src/gtkthemes.c

Tue, 14 Jun 2005 00:24:27 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 14 Jun 2005 00:24:27 +0000
changeset 11005
06c22b605323
parent 10589
4e10236e06d4
child 11525
1d06283bdcc9
permissions
-rw-r--r--

[gaim-migrate @ 12864]
Small changes to the oscar PRPL. Someone in #gaim was attempting to
debug a problem he's seen with permit/deny settings not sticking,
and noticed that there were multiple copies of people in his permit
or deny list. He didn't think the copies were still being added.

In any case, now Gaim will remove duplicate copies of people in your
permit and deny list, and multiple copies of a single buddy in the
same group.

10295
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
1 /*
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
2 * Themes for Gaim
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
3 *
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
6 * source distribution.
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
7 *
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
12 *
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
17 *
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
21 *
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
22 */
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
23 #include "internal.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
24 #include "gtkgaim.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
25
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
26 #include "conversation.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
27 #include "debug.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
28 #include "prpl.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
29 #include "util.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
30
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
31 #include "gtkconv.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
32 #include "gtkdialogs.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
33 #include "gtkimhtml.h"
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
34
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
35 struct smiley_list {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
36 char *sml;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
37 GSList *smileys;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
38 struct smiley_list *next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
39 };
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
40
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
41 GSList *smiley_themes = NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
42 struct smiley_theme *current_smiley_theme;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
43
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
44 void smiley_themeize(GtkWidget *imhtml)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
45 {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
46 struct smiley_list *list;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
47 if (!current_smiley_theme)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
48 return;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
49
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
50 gtk_imhtml_remove_smileys(GTK_IMHTML(imhtml));
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
51 list = current_smiley_theme->list;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
52 while (list) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
53 char *sml = !strcmp(list->sml, "default") ? NULL : list->sml;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
54 GSList *icons = list->smileys;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
55 while (icons) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
56 gtk_imhtml_associate_smiley(GTK_IMHTML(imhtml), sml, icons->data);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
57 icons = icons->next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
58 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
59 list = list->next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
60 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
61 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
62
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
63 void load_smiley_theme(const char *file, gboolean load)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
64 {
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10295
diff changeset
65 FILE *f = g_fopen(file, "r");
10295
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
66 char buf[256];
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
67 char *i;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
68 struct smiley_theme *theme=NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
69 struct smiley_list *list = NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
70 GSList *lst = smiley_themes;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
71 char *dirname;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
72
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
73 if (!f)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
74 return;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
75
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
76 while (lst) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
77 struct smiley_theme *thm = lst->data;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
78 if (!strcmp(thm->path, file)) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
79 theme = thm;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
80 break;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
81 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
82 lst = lst->next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
83 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
84
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
85 if (!theme) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
86 theme = g_new0(struct smiley_theme, 1);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
87 theme->path = g_strdup(file);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
88 smiley_themes = g_slist_append(smiley_themes, theme);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
89 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
90
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
91 dirname = g_path_get_dirname(file);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
92 if (load) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
93 if (current_smiley_theme) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
94 GSList *already_freed = NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
95 struct smiley_list *wer = current_smiley_theme->list, *wer2;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
96 while (wer) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
97 while (wer->smileys) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
98 GtkIMHtmlSmiley *uio = wer->smileys->data;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
99 if (uio->icon)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
100 g_object_unref(uio->icon);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
101 if (!g_slist_find(already_freed, uio->file)) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
102 g_free(uio->file);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
103 already_freed = g_slist_append(already_freed, uio->file);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
104 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
105 g_free(uio->smile);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
106 g_free(uio);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
107 wer->smileys=g_slist_remove(wer->smileys, uio);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
108 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
109 wer2 = wer->next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
110 g_free(wer->sml);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
111 g_free(wer);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
112 wer = wer2;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
113 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
114 current_smiley_theme->list = NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
115 g_slist_free(already_freed);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
116 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
117 current_smiley_theme = theme;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
118 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
119
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
120
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
121 while (!feof(f)) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
122 if (!fgets(buf, sizeof(buf), f)) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
123 break;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
124 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
125
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
126 if (buf[0] == '#' || buf[0] == '\0')
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
127 continue;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
128
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
129 i = buf;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
130 while (isspace(*i))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
131 i++;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
132
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
133 if (*i == '[' && strchr(i, ']') && load) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
134 struct smiley_list *child = g_new0(struct smiley_list, 1);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
135 child->sml = g_strndup(i+1, strchr(i, ']') - i - 1);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
136 if (theme->list)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
137 list->next = child;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
138 else
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
139 theme->list = child;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
140 list = child;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
141 } else if (!g_ascii_strncasecmp(i, "Name=", strlen("Name="))) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
142 if(theme->name)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
143 g_free(theme->name);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
144 theme->name = g_strdup(i+ strlen("Name="));
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
145 theme->name[strlen(theme->name)-1] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
146 } else if (!g_ascii_strncasecmp(i, "Description=", strlen("Description="))) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
147 if(theme->desc)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
148 g_free(theme->desc);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
149 theme->desc = g_strdup(i + strlen("Description="));
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
150 theme->desc[strlen(theme->desc)-1] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
151 } else if (!g_ascii_strncasecmp(i, "Icon=", strlen("Icon="))) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
152 if(theme->icon)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
153 g_free(theme->icon);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
154 theme->icon = g_build_filename(dirname, i + strlen("Icon="), NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
155 theme->icon[strlen(theme->icon)-1] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
156 } else if (!g_ascii_strncasecmp(i, "Author=", strlen("Author="))) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
157 if(theme->author)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
158 g_free(theme->author);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
159 theme->author = g_strdup(i + strlen("Author="));
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
160 theme->author[strlen(theme->author)-1] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
161 } else if (load && list) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
162 gboolean hidden = FALSE;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
163 char *sfile = NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
164
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
165 if (*i == '!' && *(i + 1) == ' ') {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
166 hidden = TRUE;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
167 i = i + 2;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
168 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
169 while (*i) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
170 char l[64];
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
171 int li = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
172 while (!isspace(*i))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
173 l[li++] = *(i++);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
174 if (!sfile) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
175 l[li] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
176 sfile = g_build_filename(dirname, l, NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
177 } else {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
178 GtkIMHtmlSmiley *smiley = g_new0(GtkIMHtmlSmiley, 1);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
179 l[li] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
180 smiley->file = sfile;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
181 smiley->smile = g_strdup(l);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
182 smiley->hidden = hidden;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
183 list->smileys = g_slist_append(list->smileys, smiley);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
184 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
185 while (isspace(*i))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
186 i++;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
187
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
188 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
189 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
190 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
191
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
192 if (load) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
193 GList *cnv;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
194
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
195 for (cnv = gaim_get_conversations(); cnv != NULL; cnv = cnv->next) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
196 GaimConversation *conv = cnv->data;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
197
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
198 if (GAIM_IS_GTK_CONVERSATION(conv)) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
199 smiley_themeize(GAIM_GTK_CONVERSATION(conv)->imhtml);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
200 smiley_themeize(GAIM_GTK_CONVERSATION(conv)->entry);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
201 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
202 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
203 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
204
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
205 g_free(dirname);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
206 fclose(f);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
207 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
208
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
209 void smiley_theme_probe()
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
210 {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
211 GDir *dir;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
212 const gchar *file;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
213 gchar *path;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
214 int l;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
215
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
216 char* probedirs[3];
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
217 probedirs[0] = g_build_filename(DATADIR, "pixmaps", "gaim", "smileys", NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
218 probedirs[1] = g_build_filename(gaim_user_dir(), "smileys", NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
219 probedirs[2] = 0;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
220 for (l=0; probedirs[l]; l++) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
221 dir = g_dir_open(probedirs[l], 0, NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
222 if (dir) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
223 while ((file = g_dir_read_name(dir))) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
224 path = g_build_filename(probedirs[l], file, "theme", NULL);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
225
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
226 /* Here we check to see that the theme has proper syntax.
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
227 * We set the second argument to FALSE so that it doesn't load
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
228 * the theme yet.
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
229 */
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
230 load_smiley_theme(path, FALSE);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
231 g_free(path);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
232 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
233 g_dir_close(dir);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
234 } else if (l == 1) {
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10295
diff changeset
235 g_mkdir(probedirs[l], S_IRUSR | S_IWUSR | S_IXUSR);
10295
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
236 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
237 g_free(probedirs[l]);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
238 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
239 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
240
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
241 GSList *get_proto_smileys(const char *id) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
242 GaimPlugin *proto;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
243 struct smiley_list *list, *def;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
244
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
245 if ((current_smiley_theme == NULL) || (current_smiley_theme->list == NULL))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
246 return NULL;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
247
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
248 def = list = current_smiley_theme->list;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
249
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
250 if (id == NULL)
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
251 return def->smileys;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
252
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
253 proto = gaim_find_prpl(id);
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
254
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
255 while (list) {
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
256 if (!strcmp(list->sml, "default"))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
257 def = list;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
258 else if (proto && !strcmp(proto->info->name, list->sml))
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
259 break;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
260
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
261 list = list->next;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
262 }
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
263
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
264 return list ? list->smileys : def->smileys;
99ed714c92f3 [gaim-migrate @ 11474]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
265 }

mercurial