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