pidgin/gtksmiley-theme.c

Fri, 05 Mar 2021 03:31:29 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 05 Mar 2021 03:31:29 -0600
changeset 40810
28d50eece92d
parent 40496
6941fece679b
permissions
-rw-r--r--

Create a PidginAvatar widget.

This does everything the existing code does, but trying to integrate right now
is kind of difficult. The plan is to use this in a new PidginInfoPane I have
started, but that change got very large so I just packed it into the end of
the existing info pane.

The only things that are not implement right now, are making menu items
insensitive and that's because we need to figure out a better want to handle
custom avatars for users.

Testing Done:
Ran locally.

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

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