pidgin/gtksmiley-theme.c

Sat, 05 Apr 2014 14:19:33 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Sat, 05 Apr 2014 14:19:33 +0200
changeset 35772
2224568d8bd2
parent 35769
00e61752e21c
child 35781
8c621fbbee8e
permissions
-rw-r--r--

Comments: memory pool

35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /* pidgin
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
2 *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
3 * Pidgin is the legal property of its developers, whose names are too numerous
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * source distribution.
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
6 *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
11 *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
16 *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
20 */
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
21
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
22 #include "gtksmiley-theme.h"
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
24 #include "internal.h"
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
25 #include "glibcompat.h"
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
26
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
27 #include "debug.h"
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
28
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
29 #include "gtkutils.h"
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
30
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
31 #include <glib/gstdio.h>
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
32
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
33 #define PIDGIN_SMILEY_THEME_GET_PRIVATE(obj) \
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
34 (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_SMILEY_THEME, \
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
35 PidginSmileyThemePrivate))
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
36
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
37 #define PIDGIN_SMILEY_THEME_MAX_LINES 1024
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
38 #define PIDGIN_SMILEY_THEME_MAX_TOKENS 1024
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
39
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
40 typedef struct
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
41 {
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
42 gchar *path;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
43
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
44 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
45 gchar *desc;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
46 gchar *icon;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
47 gchar *author;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
48
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
49 GdkPixbuf *icon_pixbuf;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
50
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
51 GHashTable *smiley_lists_map;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
52 } PidginSmileyThemePrivate;
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
53
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
54 static GObjectClass *parent_class;
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
55
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
56 static gchar **probe_dirs;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
57 static GList *smiley_themes = NULL;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
58
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
59 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
60 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
61 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
62 gchar *desc;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
63 gchar *icon;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
64 gchar *author;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
65
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
66 GList *protocols;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
67 } PidginSmileyThemeIndex;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
68
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
69 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
70 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
71 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
72 GList *smileys;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
73 } PidginSmileyThemeIndexProtocol;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
74
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
75 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
76 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
77 gchar *file;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
78 gboolean hidden;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
79 GList *shortcuts;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
80 } PidginSmileyThemeIndexSmiley;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
81
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
82 /*******************************************************************************
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
83 * Theme index parsing
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
84 ******************************************************************************/
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
85
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
86 static void
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
87 pidgin_smiley_theme_index_free(PidginSmileyThemeIndex *index)
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
88 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
89 GList *it, *it2;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
90
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
91 g_return_if_fail(index != NULL);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
92
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
93 g_free(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
94 g_free(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
95 g_free(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
96 g_free(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
97
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
98 for (it = index->protocols; it; it = g_list_next(it)) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
99 PidginSmileyThemeIndexProtocol *proto = it->data;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
100
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
101 g_free(proto->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
102 for (it2 = proto->smileys; it2; it2 = g_list_next(it2)) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
103 PidginSmileyThemeIndexSmiley *smiley = it2->data;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
104
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
105 g_free(smiley->file);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
106 g_list_free_full(smiley->shortcuts, g_free);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
107 g_free(smiley);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
108 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
109 g_list_free(proto->smileys);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
110 g_free(proto);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
111 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
112 g_list_free(index->protocols);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
113 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
114
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
115 static PidginSmileyThemeIndex *
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
116 pidgin_smiley_theme_index_parse(const gchar *theme_path, gboolean load_contents)
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
117 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
118 PidginSmileyThemeIndex *index;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
119 PidginSmileyThemeIndexProtocol *proto = NULL;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
120 gchar *index_path;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
121 FILE *file;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
122 int line_no = 0;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
123 gboolean inv_frm = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
124
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
125 index_path = g_build_filename(theme_path, "theme", NULL);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
126 file = g_fopen(index_path, "r");
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
127 if (!file) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
128 purple_debug_error("gtksmiley-theme",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
129 "Failed to open index file %s", index_path);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
130 g_free(index_path);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
131 return NULL;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
132 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
133
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
134 index = g_new0(PidginSmileyThemeIndex, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
135
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
136 while (!feof(file)) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
137 PidginSmileyThemeIndexSmiley *smiley;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
138 gchar buff[1024];
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
139 gchar *line, *eqchr;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
140 gchar **split;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
141 int i;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
142
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
143 if (++line_no > PIDGIN_SMILEY_THEME_MAX_LINES) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
144 purple_debug_warning("gtksmiley-theme", "file too big");
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
145 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
146 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
147
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
148 if (!fgets(buff, sizeof(buff), file))
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
149 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
150
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
151 /* strip comments */
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
152 if (buff[0] == '#')
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
153 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
154
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
155 g_strstrip(buff);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
156 if (buff[0] == '\0')
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
157 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
158
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
159 if (!g_utf8_validate(buff, -1, NULL)) {
35769
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
160 purple_debug_error("gtksmiley-theme",
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
161 "%s:%d is invalid UTF-8",
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
162 index_path, line_no);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
163 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
164 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
165
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
166 line = buff;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
167
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
168 if (line[0] == '[') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
169 gchar *end;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
170
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
171 if (!load_contents)
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
172 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
173 line++;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
174 end = strchr(line, ']');
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
175 if (!end) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
176 inv_frm = TRUE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
177 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
178 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
179
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
180 proto = g_new0(PidginSmileyThemeIndexProtocol, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
181 proto->name = g_strndup(line, end - line);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
182
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
183 index->protocols =
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
184 g_list_prepend(index->protocols, proto);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
185
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
186 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
187 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
188
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
189 if ((eqchr = strchr(line, '='))) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
190 *eqchr = '\0';
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
191 if (g_ascii_strcasecmp(line, "name") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
192 g_free(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
193 index->name = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
194 g_strchug(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
195 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
196 } else if (g_ascii_strcasecmp(line, "description") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
197 g_free(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
198 index->desc = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
199 g_strchug(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
200 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
201 } else if (g_ascii_strcasecmp(line, "icon") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
202 g_free(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
203 index->icon = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
204 g_strchug(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
205 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
206 } else if (g_ascii_strcasecmp(line, "author") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
207 g_free(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
208 index->author = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
209 g_strchug(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
210 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
211 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
212 *eqchr = '=';
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
213 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
214
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
215 /* parsing section content */
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
216
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
217 if (proto == NULL) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
218 inv_frm = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
219 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
220 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
221
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
222 smiley = g_new0(PidginSmileyThemeIndexSmiley, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
223 proto->smileys = g_list_prepend(proto->smileys, smiley);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
224
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
225 smiley->hidden = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
226 if (line[0] == '!') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
227 smiley->hidden = TRUE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
228 line++;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
229 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
230
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
231 split = g_strsplit_set(line, " \t",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
232 PIDGIN_SMILEY_THEME_MAX_TOKENS);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
233 for (i = 0; split[i]; i++) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
234 gchar *token = split[i];
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
235
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
236 if (token[0] == '\0')
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
237 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
238 if (i == PIDGIN_SMILEY_THEME_MAX_TOKENS - 1)
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
239 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
240
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
241 if (!smiley->file) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
242 smiley->file = g_strdup(token);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
243 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
244 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
245
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
246 smiley->shortcuts = g_list_prepend(smiley->shortcuts,
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
247 g_strdup(token));
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
248 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
249 g_strfreev(split);
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
250 smiley->shortcuts = g_list_reverse(smiley->shortcuts);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
251 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
252
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
253 fclose(file);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
254
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
255 if (inv_frm) {
35769
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
256 purple_debug_error("gtksmiley-theme", "%s:%d"
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
257 " invalid format", index_path, line_no);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
258 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
259 index = NULL;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
260 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
261
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
262 g_free(index_path);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
263 return index;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
264 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
265
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
266 /*******************************************************************************
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
267 * Theme loading
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
268 ******************************************************************************/
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
269
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
270 static void
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
271 pidgin_smiley_theme_load(const gchar *theme_path)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
272 {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
273 PidginSmileyTheme *theme;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
274 PidginSmileyThemePrivate *priv;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
275 PidginSmileyThemeIndex *index;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
276 GList *it;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
277
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
278 /* it's not super-efficient, but we don't expect huge amount of
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
279 * installed themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
280 for (it = smiley_themes; it; it = g_list_next(it)) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
281 PidginSmileyThemePrivate *priv =
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
282 PIDGIN_SMILEY_THEME_GET_PRIVATE(it->data);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
283
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
284 /* theme is already loaded */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
285 if (g_strcmp0(priv->path, theme_path) == 0)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
286 return;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
287 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
288
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
289 theme = g_object_new(PIDGIN_TYPE_SMILEY_THEME, NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
290 priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
291
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
292 priv->path = g_strdup(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
293
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
294 index = pidgin_smiley_theme_index_parse(theme_path, FALSE);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
295
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
296 if (!index->name || index->name[0] == '\0') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
297 purple_debug_warning("gtksmiley-theme",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
298 "incomplete theme %s", theme_path);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
299 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
300 g_object_unref(theme);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
301 return;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
302 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
303
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
304 priv->name = g_strdup(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
305 if (index->desc && index->desc[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
306 priv->desc = g_strdup(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
307 if (index->icon && index->icon[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
308 priv->icon = g_strdup(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
309 if (index->author && index->author[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
310 priv->author = g_strdup(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
311
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
312 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
313
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
314 smiley_themes = g_list_append(smiley_themes, theme);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
315 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
316
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
317 static void
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
318 pidgin_smiley_theme_probe(void)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
319 {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
320 GList *it, *next;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
321 int i;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
322
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
323 /* remove non-existing themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
324 for (it = smiley_themes; it; it = next) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
325 PidginSmileyTheme *theme = it->data;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
326 PidginSmileyThemePrivate *priv =
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
327 PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
328
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
329 next = g_list_next(it);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
330
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
331 if (g_file_test(priv->path, G_FILE_TEST_EXISTS))
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
332 continue;
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
333 smiley_themes = g_list_delete_link(smiley_themes, it);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
334 g_object_unref(theme);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
335 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
336
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
337 /* scan for themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
338 for (i = 0; probe_dirs[i]; i++) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
339 GDir *dir = g_dir_open(probe_dirs[i], 0, NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
340 const gchar *theme_dir_name;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
341
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
342 if (!dir)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
343 continue;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
344
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
345 while ((theme_dir_name = g_dir_read_name(dir))) {
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
346 gchar *theme_path;
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
347
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
348 /* Ignore Pidgin 2.x.y "none" theme. */
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
349 if (g_strcmp0(theme_dir_name, "none") == 0)
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
350 continue;
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
351
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
352 theme_path = g_build_filename(
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
353 probe_dirs[i], theme_dir_name, NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
354
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
355 if (g_file_test(theme_path, G_FILE_TEST_IS_DIR))
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
356 pidgin_smiley_theme_load(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
357
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
358 g_free(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
359 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
360
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
361 g_dir_close(dir);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
362 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
363 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
364
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
365
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
366 /*******************************************************************************
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
367 * API implementation
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
368 ******************************************************************************/
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
369
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
370 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
371 pidgin_smiley_theme_get_name(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
372 {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
373 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
374
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
375 g_return_val_if_fail(priv != NULL, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
376
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
377 return priv->name;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
378 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
379
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
380 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
381 pidgin_smiley_theme_get_description(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
382 {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
383 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
384
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
385 g_return_val_if_fail(priv != NULL, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
386
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
387 return priv->desc;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
388 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
389
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
390 GdkPixbuf *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
391 pidgin_smiley_theme_get_icon(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
392 {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
393 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
394
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
395 g_return_val_if_fail(priv != NULL, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
396
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
397 if (priv->icon == NULL)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
398 return NULL;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
399
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
400 if (!priv->icon_pixbuf) {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
401 gchar *icon_path = g_build_filename(
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
402 priv->path, priv->icon, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
403 priv->icon_pixbuf = pidgin_pixbuf_new_from_file(icon_path);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
404 g_free(icon_path);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
405 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
406
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
407 return priv->icon_pixbuf;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
408 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
409
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
410 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
411 pidgin_smiley_theme_get_author(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
412 {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
413 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
414
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
415 g_return_val_if_fail(priv != NULL, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
416
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
417 return priv->author;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
418 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
419
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
420 PurpleSmileyList *
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
421 pidgin_smiley_theme_for_conv(PurpleConversation *conv)
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
422 {
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
423 PurpleAccount *acc = NULL;
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
424 PurpleSmileyTheme *theme;
35738
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
425 const gchar *proto_name = NULL;
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
426
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
427 theme = purple_smiley_theme_get_current();
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
428 if (theme == NULL)
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
429 return NULL;
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
430
35738
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
431 if (conv)
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
432 acc = purple_conversation_get_account(conv);
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
433 if (acc)
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
434 proto_name = purple_account_get_protocol_name(acc);
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
435
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
436 return purple_smiley_theme_get_smileys(theme, (gpointer)proto_name);
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
437 }
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
438
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
439 static void
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
440 pidgin_smiley_theme_activate_impl(PurpleSmileyTheme *theme)
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
441 {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
442 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
443 PidginSmileyThemeIndex *index;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
444 GHashTable *smap;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
445 GList *it, *it2, *it3;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
446
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
447 g_return_if_fail(priv != NULL);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
448
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
449 if (priv->smiley_lists_map)
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
450 return;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
451
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
452 priv->smiley_lists_map = smap = g_hash_table_new_full(
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
453 g_str_hash, g_str_equal, g_free, g_object_unref);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
454
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
455 index = pidgin_smiley_theme_index_parse(priv->path, TRUE);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
456
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
457 for (it = index->protocols; it; it = g_list_next(it)) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
458 PidginSmileyThemeIndexProtocol *proto_idx = it->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
459 PurpleSmileyList *proto_smileys;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
460
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
461 proto_smileys = g_hash_table_lookup(smap, proto_idx->name);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
462 if (!proto_smileys) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
463 proto_smileys = purple_smiley_list_new();
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
464 g_hash_table_insert(smap,
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
465 g_strdup(proto_idx->name), proto_smileys);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
466 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
467
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
468 for (it2 = proto_idx->smileys; it2; it2 = g_list_next(it2)) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
469 PidginSmileyThemeIndexSmiley *smiley_idx = it2->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
470 gchar *smiley_path;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
471
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
472 smiley_path = g_build_filename(
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
473 priv->path, smiley_idx->file, NULL);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
474 if (!g_file_test(smiley_path, G_FILE_TEST_EXISTS)) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
475 purple_debug_warning("gtksmiley-theme",
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
476 "Smiley %s is missing", smiley_path);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
477 continue;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
478 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
479
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
480 for (it3 = smiley_idx->shortcuts; it3;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
481 it3 = g_list_next(it3))
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
482 {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
483 PurpleSmiley *smiley;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
484 gchar *shortcut = it3->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
485
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
486 smiley = purple_smiley_new(
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
487 shortcut, smiley_path);
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
488 g_object_set_data(G_OBJECT(smiley),
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
489 "pidgin-smiley-hidden",
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
490 GINT_TO_POINTER(smiley_idx->hidden));
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
491 purple_smiley_list_add(proto_smileys, smiley);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
492 g_object_unref(smiley);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
493 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
494 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
495 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
496
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
497 pidgin_smiley_theme_index_free(index);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
498 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
499
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
500 static PurpleSmileyList *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
501 pidgin_smiley_theme_get_smileys_impl(PurpleSmileyTheme *theme, gpointer ui_data)
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
502 {
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
503 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
504 PurpleSmileyList *smileys = NULL;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
505
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
506 pidgin_smiley_theme_activate_impl(theme);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
507
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
508 if (ui_data)
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
509 smileys = g_hash_table_lookup(priv->smiley_lists_map, ui_data);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
510 if (smileys != NULL)
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
511 return smileys;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
512
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
513 return g_hash_table_lookup(priv->smiley_lists_map, "default");
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
514 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
515
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
516 void
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
517 pidgin_smiley_theme_init(void)
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
518 {
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
519 GList *it;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
520 const gchar *user_smileys_dir;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
521 const gchar *theme_name;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
522
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
523 probe_dirs = g_new0(gchar*, 3);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
524 probe_dirs[0] = g_build_filename(
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
525 DATADIR, "pixmaps", "pidgin", "emotes", NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
526 user_smileys_dir = probe_dirs[1] = g_build_filename(
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
527 purple_user_dir(), "smileys", NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
528
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
529 if (!g_file_test(user_smileys_dir, G_FILE_TEST_IS_DIR))
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
530 g_mkdir(user_smileys_dir, S_IRUSR | S_IWUSR | S_IXUSR);
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
531
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
532 /* setting theme by name (copy-paste from gtkprefs) */
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
533 pidgin_smiley_theme_probe();
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
534 theme_name = purple_prefs_get_string(
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
535 PIDGIN_PREFS_ROOT "/smileys/theme");
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
536 for (it = smiley_themes; it; it = g_list_next(it)) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
537 PidginSmileyTheme *theme = it->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
538
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
539 if (g_strcmp0(pidgin_smiley_theme_get_name(theme), theme_name))
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
540 continue;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
541
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
542 purple_smiley_theme_set_current(PURPLE_SMILEY_THEME(theme));
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
543 }
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
544 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
545
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
546 void
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
547 pidgin_smiley_theme_uninit(void)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
548 {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
549 g_strfreev(probe_dirs);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
550 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
551
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
552 GList *
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
553 pidgin_smiley_theme_get_all(void)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
554 {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
555 pidgin_smiley_theme_probe();
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
556
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
557 return smiley_themes;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
558 }
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
559
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
560 /*******************************************************************************
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
561 * Object stuff
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
562 ******************************************************************************/
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
563
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
564 static void
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
565 pidgin_smiley_theme_finalize(GObject *obj)
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
566 {
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
567 PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(obj);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
568
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
569 g_free(priv->path);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
570 g_free(priv->name);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
571 g_free(priv->desc);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
572 g_free(priv->icon);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
573 g_free(priv->author);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
574 if (priv->icon_pixbuf)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
575 g_object_unref(priv->icon_pixbuf);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
576 if (priv->smiley_lists_map)
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
577 g_hash_table_destroy(priv->smiley_lists_map);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
578
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
579 G_OBJECT_CLASS(parent_class)->finalize(obj);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
580 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
581
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
582 static void
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
583 pidgin_smiley_theme_class_init(PidginSmileyThemeClass *klass)
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
584 {
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
585 GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
586 PurpleSmileyThemeClass *pst_class = PURPLE_SMILEY_THEME_CLASS(klass);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
587
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
588 parent_class = g_type_class_peek_parent(klass);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
589
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
590 g_type_class_add_private(klass, sizeof(PidginSmileyThemePrivate));
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
591
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
592 gobj_class->finalize = pidgin_smiley_theme_finalize;
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
593
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
594 pst_class->get_smileys = pidgin_smiley_theme_get_smileys_impl;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
595 pst_class->activate = pidgin_smiley_theme_activate_impl;
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
596 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
597
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
598 GType
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
599 pidgin_smiley_theme_get_type(void)
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
600 {
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
601 static GType type = 0;
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
602
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
603 if (G_UNLIKELY(type == 0)) {
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
604 static const GTypeInfo info = {
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
605 .class_size = sizeof(PidginSmileyThemeClass),
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
606 .class_init = (GClassInitFunc)pidgin_smiley_theme_class_init,
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
607 .instance_size = sizeof(PidginSmileyTheme),
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
608 };
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
609
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
610 type = g_type_register_static(PURPLE_TYPE_SMILEY_THEME,
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
611 "PidginSmileyTheme", &info, 0);
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
612 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
613
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
614 return type;
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
615 }

mercurial