pidgin/gtksmiley-theme.c

Thu, 19 Dec 2019 14:25:49 +0100

author
Fabrice Bellet <fabrice@bellet.info>
date
Thu, 19 Dec 2019 14:25:49 +0100
branch
port-changes-from-branch-2.x.y-to-default
changeset 40273
a8cee989c2ab
parent 40195
fb4b0ae193c0
child 40360
e21f3bbcc2a5
permissions
-rw-r--r--

Use gtk-doc comments (review pull request #632)

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
35781
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
35704
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
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
26 #include "debug.h"
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
27
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
28 #include "gtkutils.h"
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
29
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
30 #include <glib/gstdio.h>
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
31
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
32 #define PIDGIN_SMILEY_THEME_MAX_LINES 1024
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
33 #define PIDGIN_SMILEY_THEME_MAX_TOKENS 1024
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
34
39542
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
35 /**
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
36 * PidginSmileyTheme:
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
37 *
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
38 * An implementation of a smiley theme.
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
39 */
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
40 struct _PidginSmileyTheme
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
41 {
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
42 PurpleSmileyTheme parent;
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
43 };
0575720e51bd Use G_DECLARE* macros in smiley themes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39465
diff changeset
44
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
45 typedef struct
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
46 {
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
47 gchar *path;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
48
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
49 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
50 gchar *desc;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
51 gchar *icon;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
52 gchar *author;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
53
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
54 GdkPixbuf *icon_pixbuf;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
55
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
56 GHashTable *smiley_lists_map;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
57 } PidginSmileyThemePrivate;
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
58
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
59 static gchar **probe_dirs;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
60 static GList *smiley_themes = NULL;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
61
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
62 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
63 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
64 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
65 gchar *desc;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
66 gchar *icon;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
67 gchar *author;
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 GList *protocols;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
70 } PidginSmileyThemeIndex;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
71
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
72 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
73 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
74 gchar *name;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
75 GList *smileys;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
76 } PidginSmileyThemeIndexProtocol;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
77
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
78 typedef struct
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
79 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
80 gchar *file;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
81 gboolean hidden;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
82 GList *shortcuts;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
83 } PidginSmileyThemeIndexSmiley;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
84
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
85 G_DEFINE_TYPE_WITH_PRIVATE(PidginSmileyTheme, pidgin_smiley_theme,
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
86 PURPLE_TYPE_SMILEY_THEME);
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
87
35707
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 * Theme index parsing
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
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
92 static void
40135
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
93 pidgin_smiley_theme_index_smiley_free(PidginSmileyThemeIndexSmiley *smiley)
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
94 {
40139
13cfb1168f42 Add NULL checks
qarkai <qarkai@gmail.com>
parents: 40135
diff changeset
95 g_return_if_fail(smiley != NULL);
13cfb1168f42 Add NULL checks
qarkai <qarkai@gmail.com>
parents: 40135
diff changeset
96
40135
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
97 g_free(smiley->file);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
98 g_list_free_full(smiley->shortcuts, g_free);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
99 g_free(smiley);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
100 }
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
101
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
102 static void
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
103 pidgin_smiley_theme_index_protocol_free(PidginSmileyThemeIndexProtocol *proto)
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
104 {
40139
13cfb1168f42 Add NULL checks
qarkai <qarkai@gmail.com>
parents: 40135
diff changeset
105 g_return_if_fail(proto != NULL);
13cfb1168f42 Add NULL checks
qarkai <qarkai@gmail.com>
parents: 40135
diff changeset
106
40135
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
107 g_free(proto->name);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
108 g_list_free_full(proto->smileys, (GDestroyNotify)pidgin_smiley_theme_index_smiley_free);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
109 g_free(proto);
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
110 }
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
111
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
112 static void
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
113 pidgin_smiley_theme_index_free(PidginSmileyThemeIndex *index)
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 g_return_if_fail(index != NULL);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
116
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
117 g_free(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
118 g_free(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
119 g_free(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
120 g_free(index->author);
40135
3acbe4afeab5 Reduce lists iterations
qarkai <qarkai@gmail.com>
parents: 39955
diff changeset
121 g_list_free_full(index->protocols, (GDestroyNotify)pidgin_smiley_theme_index_protocol_free);
39465
3b48e07c3625 Fix a leak in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39461
diff changeset
122 g_free(index);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
123 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
124
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
125 static PidginSmileyThemeIndex *
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
126 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
127 {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
128 PidginSmileyThemeIndex *index;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
129 PidginSmileyThemeIndexProtocol *proto = NULL;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
130 gchar *index_path;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
131 FILE *file;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
132 int line_no = 0;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
133 gboolean inv_frm = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
134
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
135 index_path = g_build_filename(theme_path, "theme", NULL);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
136 file = g_fopen(index_path, "r");
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
137 if (!file) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
138 purple_debug_error("gtksmiley-theme",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
139 "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
140 g_free(index_path);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
141 return NULL;
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
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
144 index = g_new0(PidginSmileyThemeIndex, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
145
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
146 while (!feof(file)) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
147 PidginSmileyThemeIndexSmiley *smiley;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
148 gchar buff[1024];
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
149 gchar *line, *eqchr;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
150 gchar **split;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
151 int i;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
152
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
153 if (++line_no > PIDGIN_SMILEY_THEME_MAX_LINES) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
154 purple_debug_warning("gtksmiley-theme", "file too big");
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
155 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
156 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
157
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
158 if (!fgets(buff, sizeof(buff), file))
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
159 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
160
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
161 /* strip comments */
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
162 if (buff[0] == '#')
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 g_strstrip(buff);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
166 if (buff[0] == '\0')
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
167 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
168
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
169 if (!g_utf8_validate(buff, -1, NULL)) {
35769
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
170 purple_debug_error("gtksmiley-theme",
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
171 "%s:%d is invalid UTF-8",
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
172 index_path, line_no);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
173 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
174 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
175
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
176 line = buff;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
177
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
178 if (line[0] == '[') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
179 gchar *end;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
180
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
181 if (!load_contents)
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
182 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
183 line++;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
184 end = strchr(line, ']');
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
185 if (!end) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
186 inv_frm = TRUE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
187 break;
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
35799
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
190 if (proto)
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
191 proto->smileys = g_list_reverse(proto->smileys);
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
192
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
193 proto = g_new0(PidginSmileyThemeIndexProtocol, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
194 proto->name = g_strndup(line, end - line);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
195
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
196 index->protocols =
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
197 g_list_prepend(index->protocols, proto);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
198
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
199 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
200 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
201
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
202 if ((eqchr = strchr(line, '='))) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
203 *eqchr = '\0';
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
204 if (g_ascii_strcasecmp(line, "name") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
205 g_free(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
206 index->name = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
207 g_strchug(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
208 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
209 } else if (g_ascii_strcasecmp(line, "description") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
210 g_free(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
211 index->desc = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
212 g_strchug(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
213 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
214 } else if (g_ascii_strcasecmp(line, "icon") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
215 g_free(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
216 index->icon = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
217 g_strchug(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
218 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
219 } else if (g_ascii_strcasecmp(line, "author") == 0) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
220 g_free(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
221 index->author = g_strdup(eqchr + 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
222 g_strchug(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
223 continue;
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 *eqchr = '=';
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
226 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
227
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
228 /* parsing section content */
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 if (proto == NULL) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
231 inv_frm = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
232 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
233 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
234
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
235 smiley = g_new0(PidginSmileyThemeIndexSmiley, 1);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
236 proto->smileys = g_list_prepend(proto->smileys, smiley);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
237
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
238 smiley->hidden = FALSE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
239 if (line[0] == '!') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
240 smiley->hidden = TRUE;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
241 line++;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
242 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
243
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
244 split = g_strsplit_set(line, " \t",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
245 PIDGIN_SMILEY_THEME_MAX_TOKENS);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
246 for (i = 0; split[i]; i++) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
247 gchar *token = split[i];
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 if (token[0] == '\0')
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
250 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
251 if (i == PIDGIN_SMILEY_THEME_MAX_TOKENS - 1)
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
252 break;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
253
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
254 if (!smiley->file) {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
255 smiley->file = g_strdup(token);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
256 continue;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
257 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
258
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
259 smiley->shortcuts = g_list_prepend(smiley->shortcuts,
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
260 g_strdup(token));
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
261 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
262 g_strfreev(split);
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
263 smiley->shortcuts = g_list_reverse(smiley->shortcuts);
35707
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
35799
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
266 if (proto)
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
267 proto->smileys = g_list_reverse(proto->smileys);
04b439a886e6 Smileys: don't shuffle smileys when displaying smiley toolbar window
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35781
diff changeset
268
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
269 fclose(file);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
270
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
271 if (inv_frm) {
35769
00e61752e21c Fix build and warnings after merge
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
272 purple_debug_error("gtksmiley-theme", "%s:%d"
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
273 " invalid format", index_path, line_no);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
274 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
275 index = NULL;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
276 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
277
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
278 g_free(index_path);
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
279 return index;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
280 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
281
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
282 /*******************************************************************************
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
283 * Theme loading
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
284 ******************************************************************************/
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
285
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
286 static void
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
287 pidgin_smiley_theme_load(const gchar *theme_path)
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 PidginSmileyTheme *theme;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
290 PidginSmileyThemePrivate *priv;
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
291 PidginSmileyThemeIndex *index;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
292 GList *it;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
293
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
294 /* 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
295 * installed themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
296 for (it = smiley_themes; it; it = g_list_next(it)) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
297 PidginSmileyThemePrivate *priv =
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
298 pidgin_smiley_theme_get_instance_private(it->data);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
299
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
300 /* theme is already loaded */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
301 if (g_strcmp0(priv->path, theme_path) == 0)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
302 return;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
303 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
304
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
305 theme = g_object_new(PIDGIN_TYPE_SMILEY_THEME, NULL);
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
306 priv = pidgin_smiley_theme_get_instance_private(theme);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
307
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
308 priv->path = g_strdup(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
309
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
310 index = pidgin_smiley_theme_index_parse(theme_path, FALSE);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
311
35707
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
312 if (!index->name || index->name[0] == '\0') {
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
313 purple_debug_warning("gtksmiley-theme",
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
314 "incomplete theme %s", theme_path);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
315 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
316 g_object_unref(theme);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
317 return;
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
318 }
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
319
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
320 priv->name = g_strdup(index->name);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
321 if (index->desc && index->desc[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
322 priv->desc = g_strdup(index->desc);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
323 if (index->icon && index->icon[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
324 priv->icon = g_strdup(index->icon);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
325 if (index->author && index->author[0])
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
326 priv->author = g_strdup(index->author);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
327
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
328 pidgin_smiley_theme_index_free(index);
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
329
2979d2a75df8 PidginSmileyTheme: index file parsing
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35706
diff changeset
330 smiley_themes = g_list_append(smiley_themes, theme);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
331 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
332
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
333 static void
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
334 pidgin_smiley_theme_probe(void)
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 GList *it, *next;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
337 int i;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
338
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
339 /* remove non-existing themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
340 for (it = smiley_themes; it; it = next) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
341 PidginSmileyTheme *theme = it->data;
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
342 PidginSmileyThemePrivate *priv =
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
343 pidgin_smiley_theme_get_instance_private(theme);
35705
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 next = g_list_next(it);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
346
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
347 if (g_file_test(priv->path, G_FILE_TEST_EXISTS))
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
348 continue;
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35739
diff changeset
349 smiley_themes = g_list_delete_link(smiley_themes, it);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
350 g_object_unref(theme);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
351 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
352
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
353 /* scan for themes */
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
354 for (i = 0; probe_dirs[i]; i++) {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
355 GDir *dir = g_dir_open(probe_dirs[i], 0, NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
356 const gchar *theme_dir_name;
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 if (!dir)
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
359 continue;
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 while ((theme_dir_name = g_dir_read_name(dir))) {
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
362 gchar *theme_path;
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
363
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
364 /* Ignore Pidgin 2.x.y "none" theme. */
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
365 if (g_strcmp0(theme_dir_name, "none") == 0)
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
366 continue;
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
367
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
368 theme_path = g_build_filename(
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
369 probe_dirs[i], theme_dir_name, NULL);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
370
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
371 if (g_file_test(theme_path, G_FILE_TEST_IS_DIR))
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
372 pidgin_smiley_theme_load(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
373
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
374 g_free(theme_path);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
375 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
376
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
377 g_dir_close(dir);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
378 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
379 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
380
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
381
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
382 /*******************************************************************************
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
383 * API implementation
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
384 ******************************************************************************/
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
385
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
386 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
387 pidgin_smiley_theme_get_name(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
388 {
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
389 PidginSmileyThemePrivate *priv = NULL;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
390
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
391 g_return_val_if_fail(PIDGIN_IS_SMILEY_THEME(theme), NULL);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
392
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
393 priv = pidgin_smiley_theme_get_instance_private(theme);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
394 return priv->name;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
395 }
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 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
398 pidgin_smiley_theme_get_description(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
399 {
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
400 PidginSmileyThemePrivate *priv = NULL;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
401
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
402 g_return_val_if_fail(PIDGIN_IS_SMILEY_THEME(theme), NULL);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
403
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
404 priv = pidgin_smiley_theme_get_instance_private(theme);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
405 return priv->desc;
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
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
408 GdkPixbuf *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
409 pidgin_smiley_theme_get_icon(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
410 {
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
411 PidginSmileyThemePrivate *priv = NULL;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
412
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
413 g_return_val_if_fail(PIDGIN_IS_SMILEY_THEME(theme), NULL);
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
414 priv = pidgin_smiley_theme_get_instance_private(theme);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
415
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
416 if (priv->icon == NULL)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
417 return NULL;
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 if (!priv->icon_pixbuf) {
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
420 gchar *icon_path = g_build_filename(
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
421 priv->path, priv->icon, NULL);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
422 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
423 g_free(icon_path);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
424 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
425
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
426 return priv->icon_pixbuf;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
427 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
428
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
429 const gchar *
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
430 pidgin_smiley_theme_get_author(PidginSmileyTheme *theme)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
431 {
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
432 PidginSmileyThemePrivate *priv = NULL;
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
433
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
434 g_return_val_if_fail(PIDGIN_IS_SMILEY_THEME(theme), NULL);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
435
39783
0d43b09199e6 Fix broken `priv != NULL` checks in Pidgin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39776
diff changeset
436 priv = pidgin_smiley_theme_get_instance_private(theme);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
437 return priv->author;
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
438 }
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
439
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
440 PurpleSmileyList *
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
441 pidgin_smiley_theme_for_conv(PurpleConversation *conv)
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
442 {
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
443 PurpleAccount *acc = NULL;
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
444 PurpleSmileyTheme *theme;
35738
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
445 const gchar *proto_name = NULL;
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
446
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
447 theme = purple_smiley_theme_get_current();
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
448 if (theme == NULL)
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
449 return NULL;
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
450
35738
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
451 if (conv)
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
452 acc = purple_conversation_get_account(conv);
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
453 if (acc)
030ce6840163 Smileys: toolbar button sensitivity
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35713
diff changeset
454 proto_name = purple_account_get_protocol_name(acc);
35713
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
455
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
456 return purple_smiley_theme_get_smileys(theme, (gpointer)proto_name);
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
457 }
4423f463a782 Smileys in PidginWebviewToolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35710
diff changeset
458
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
459 static void
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
460 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
461 {
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
462 PidginSmileyThemePrivate *priv =
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
463 pidgin_smiley_theme_get_instance_private(
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
464 PIDGIN_SMILEY_THEME(theme));
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
465 PidginSmileyThemeIndex *index;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
466 GHashTable *smap;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
467 GList *it, *it2, *it3;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
468
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
469 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
470 return;
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 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
473 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
474
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
475 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
476
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
477 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
478 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
479 PurpleSmileyList *proto_smileys;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
480
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
481 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
482 if (!proto_smileys) {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
483 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
484 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
485 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
486 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
487
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
488 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
489 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
490 gchar *smiley_path;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
491
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
492 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
493 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
494 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
495 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
496 "Smiley %s is missing", smiley_path);
39461
a4ae05d3be93 Fix several g_build_filename leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39238
diff changeset
497 g_free(smiley_path);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
498 continue;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
499 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
500
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
501 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
502 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
503 {
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
504 PurpleSmiley *smiley;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
505 gchar *shortcut = it3->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
506
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
507 smiley = purple_smiley_new(
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
508 shortcut, smiley_path);
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
509 g_object_set_data(G_OBJECT(smiley),
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
510 "pidgin-smiley-hidden",
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
511 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
512 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
513 g_object_unref(smiley);
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
514 }
39461
a4ae05d3be93 Fix several g_build_filename leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39238
diff changeset
515
a4ae05d3be93 Fix several g_build_filename leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39238
diff changeset
516 g_free(smiley_path);
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
517 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
518 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
519
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
520 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
521 }
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
522
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
523 static PurpleSmileyList *
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
524 pidgin_smiley_theme_get_smileys_impl(PurpleSmileyTheme *theme, gpointer ui_data)
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
525 {
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
526 PidginSmileyThemePrivate *priv =
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
527 pidgin_smiley_theme_get_instance_private(
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
528 PIDGIN_SMILEY_THEME(theme));
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
529 PurpleSmileyList *smileys = NULL;
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
530
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
531 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
532
35739
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
533 if (ui_data)
cb9acfd6fa1e Smileys: hide hidden smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35738
diff changeset
534 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
535 if (smileys != NULL)
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
536 return smileys;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
537
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
538 return g_hash_table_lookup(priv->smiley_lists_map, "default");
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
539 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
540
35781
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
541 GList *
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
542 pidgin_smiley_theme_get_all(void)
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
543 {
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
544 pidgin_smiley_theme_probe();
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
545
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
546 return smiley_themes;
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
547 }
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
548
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
549 void
35781
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
550 _pidgin_smiley_theme_init(void)
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
551 {
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
552 GList *it;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
553 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
554 const gchar *theme_name;
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
555
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
556 probe_dirs = g_new0(gchar*, 3);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
557 probe_dirs[0] = g_build_filename(
35850
1abeda205d6c cross-win32: make dirs more flexible, add them to the config.h
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35799
diff changeset
558 PURPLE_DATADIR, "pixmaps", "pidgin", "emotes", NULL);
39955
0ab521bb0887 Move smileys and themes to XDG data directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39783
diff changeset
559 user_smileys_dir = probe_dirs[1] =
0ab521bb0887 Move smileys and themes to XDG data directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39783
diff changeset
560 g_build_filename(purple_data_dir(), "smileys", NULL);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
561
36049
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
562 if (!g_file_test(user_smileys_dir, G_FILE_TEST_IS_DIR)) {
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
563 if (g_mkdir(user_smileys_dir, S_IRUSR | S_IWUSR | S_IXUSR) == 0) {
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
564 purple_debug_error("gtksmiley-theme",
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
565 "Failed to create user smileys dir");
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
566 }
bffbd724134d Fix CWE-252 coverity issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35850
diff changeset
567 }
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
568
35709
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
569 /* 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
570 pidgin_smiley_theme_probe();
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
571 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
572 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
573 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
574 PidginSmileyTheme *theme = it->data;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
575
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
576 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
577 continue;
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
578
0d7a84931572 Smileys: implement and use new parser, only themes for now
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35708
diff changeset
579 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
580 }
35704
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
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
583 void
35781
8c621fbbee8e Comments: PidginSmileyTheme
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35769
diff changeset
584 _pidgin_smiley_theme_uninit(void)
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
585 {
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
586 g_strfreev(probe_dirs);
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
587 }
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
588
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
589 /*******************************************************************************
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
590 * Object stuff
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
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
593 static void
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
594 pidgin_smiley_theme_finalize(GObject *obj)
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
595 {
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
596 PidginSmileyThemePrivate *priv =
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
597 pidgin_smiley_theme_get_instance_private(
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
598 PIDGIN_SMILEY_THEME(obj));
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
599
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
600 g_free(priv->path);
35708
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
601 g_free(priv->name);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
602 g_free(priv->desc);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
603 g_free(priv->icon);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
604 g_free(priv->author);
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
605 if (priv->icon_pixbuf)
8903e6402d5b PidginSmileyTheme: working implementation for gtkprefs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35707
diff changeset
606 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
607 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
608 g_hash_table_destroy(priv->smiley_lists_map);
35705
3203e0f1b1bd PidginSmileyTheme: probe themes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35704
diff changeset
609
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
610 G_OBJECT_CLASS(pidgin_smiley_theme_parent_class)->finalize(obj);
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
611 }
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 static void
35706
6a0bbe6adc4a PidginSmileyTheme: some fixes
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35705
diff changeset
614 pidgin_smiley_theme_class_init(PidginSmileyThemeClass *klass)
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
615 {
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
616 GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
617 PurpleSmileyThemeClass *pst_class = PURPLE_SMILEY_THEME_CLASS(klass);
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
618
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
619 gobj_class->finalize = pidgin_smiley_theme_finalize;
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
620
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
621 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
622 pst_class->activate = pidgin_smiley_theme_activate_impl;
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
623 }
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
624
39238
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
625 static void
53cfb9400de8 Port Pidgin away from deprecated g_type_class_add_private()
Mike Ruprecht <cmaiku@gmail.com>
parents: 36049
diff changeset
626 pidgin_smiley_theme_init(PidginSmileyTheme *theme)
35704
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
627 {
aa22dcef8913 Initial PidginSmileyTheme implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
628 }

mercurial