pidgin/gtksmiley-theme.c

Fri, 16 Apr 2021 03:48:26 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 16 Apr 2021 03:48:26 -0500
changeset 40857
d9d347d5532b
parent 40496
6941fece679b
permissions
-rw-r--r--

Use G_DECLARE_FINAL_TYPE for FacebookProtocol

Testing Done:
Connected a Facebook account

Reviewed at https://reviews.imfreedom.org/r/619/

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

mercurial