src/themes.c

Fri, 18 Apr 2003 02:28:06 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Fri, 18 Apr 2003 02:28:06 +0000
changeset 5160
bcc3e2b2ed56
parent 4989
9878cf519ae8
child 5205
242b8aa81328
permissions
-rw-r--r--

[gaim-migrate @ 5524]
1) Added neat little protocol icons next to the set away message menu when
you have more than one account signed on. I basically just copied
Nathan's code, so it should be ok.
2) Changed the horizontal rules in the away message menu so they show up
for me. This is how horizontal rules are done in other menus, I'm
not sure why the away message menu was different.
3) Moved 2 gtkish functions from util.c to gtkutils.c. Earlier I used one
of these functions, and then earlier, but not as early, I realized that
gtkutils.c existed, so I put 2 and 2 together and realized you were
probably flying somewhere.

Well then, let's put another shrimp on the barbi'!

4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1 /*
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
2 * Themes for Gaim
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 *
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2003, Sean Egan <bj91704@binghamton.edu>
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
5 *
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
10 *
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 *
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 *
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
20 */
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
22 #include "gaim.h"
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
23 #include "ui.h"
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 #include "gtkimhtml.h"
4667
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
25 #include "prpl.h"
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
26 #include <stdio.h>
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
27 #include <string.h>
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
28 #include <ctype.h>
4341
01e60b0ab430 [gaim-migrate @ 4605]
Sean Egan <seanegan@pidgin.im>
parents: 4338
diff changeset
29 #include <sys/stat.h>
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
30
4321
a8ad659e5ea2 [gaim-migrate @ 4576]
Herman Bloggs <herman@bluedigits.com>
parents: 4301
diff changeset
31 #ifdef _WIN32
a8ad659e5ea2 [gaim-migrate @ 4576]
Herman Bloggs <herman@bluedigits.com>
parents: 4301
diff changeset
32 #include "win32dep.h"
a8ad659e5ea2 [gaim-migrate @ 4576]
Herman Bloggs <herman@bluedigits.com>
parents: 4301
diff changeset
33 #endif
a8ad659e5ea2 [gaim-migrate @ 4576]
Herman Bloggs <herman@bluedigits.com>
parents: 4301
diff changeset
34
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
35 struct smiley_list {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36 char *sml;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
37 GSList *smileys;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
38 struct smiley_list *next;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
39 };
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
40
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
41 GSList *smiley_themes = NULL;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
42 struct smiley_theme *current_smiley_theme;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
43
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
44 void smiley_themeize(GtkWidget *imhtml)
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
45 {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
46 struct smiley_list *list;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
47 if (!current_smiley_theme)
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
48 return;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
49
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
50 gtk_imhtml_remove_smileys(GTK_IMHTML(imhtml));
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51 list = current_smiley_theme->list;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
52 while (list) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
53 char *sml = !strcmp(list->sml, "default") ? NULL : list->sml;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
54 GSList *icons = list->smileys;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55 while (icons) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
56 gtk_imhtml_associate_smiley(GTK_IMHTML(imhtml), sml, icons->data);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
57 icons = icons->next;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
58 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
59 list = list->next;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
60 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
61 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
62
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
63 void load_smiley_theme(const char *file, gboolean load)
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64 {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
65 FILE *f = fopen(file, "r");
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
66 char buf[256];
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
67 char *i;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
68 struct smiley_theme *theme=NULL;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
69 struct smiley_list *list = NULL;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
70 GSList *lst = smiley_themes;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 char *dirname;
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
72
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
73 if (!f)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
74 return;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
75
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
76 while (lst) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
77 struct smiley_theme *thm = lst->data;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
78 if (!strcmp(thm->path, file)) {
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
79 theme = thm;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
80 break;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
81 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
82 lst = lst->next;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83 }
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
84
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
85 if (!theme) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
86 theme = g_new0(struct smiley_theme, 1);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
87 theme->path = g_strdup(file);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
88 smiley_themes = g_slist_append(smiley_themes, theme);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
89 }
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
90
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
91 dirname = g_path_get_dirname(file);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
92 if (load) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
93 if (current_smiley_theme) {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
94 GSList *already_freed = NULL;
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
95 struct smiley_list *wer = current_smiley_theme->list, *wer2;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
96 while (wer) {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
97 while (wer->smileys) {
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
98 GtkIMHtmlSmiley *uio = wer->smileys->data;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
99 if (uio->icon)
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
100 g_object_unref(uio->icon);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
101 if (!g_slist_find(already_freed, uio->file)) {
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
102 g_free(uio->file);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
103 already_freed = g_slist_append(already_freed, uio->file);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
104 }
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
105 g_free(uio->smile);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
106 g_free(uio);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
107 wer->smileys=g_slist_remove(wer->smileys, uio);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
108 }
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
109 wer2 = wer->next;
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
110 g_free(wer->sml);
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
111 g_free(wer);
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
112 wer = wer2;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
113 }
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
114 current_smiley_theme->list = NULL;
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
115 g_slist_free(already_freed);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
116 }
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
117 current_smiley_theme = theme;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
118 }
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
119
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
120
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121 while (!feof(f)) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122 if (!fgets(buf, sizeof(buf), f)) {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
123 break;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
124 }
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
125
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
126 if (buf[0] == '#' || buf[0] == '\0')
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
127 continue;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
128
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
129 i = buf;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130 while (isspace(*i))
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131 i++;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
132
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
133 if (*i == '[' && strchr(i, ']') && load) {
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 struct smiley_list *child = g_new0(struct smiley_list, 1);
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
135 child->sml = g_strndup(i+1, (int)strchr(i, ']') - (int)i - 1);
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
136 if (theme->list)
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 list->next = child;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 else
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
139 theme->list = child;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140 list = child;
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
141 } else if (!g_ascii_strncasecmp(i, "Name=", strlen("Name="))) {
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
142 if(theme->name)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
143 g_free(theme->name);
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
144 theme->name = g_strdup(i+ strlen("Name="));
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
145 theme->name[strlen(theme->name)-1] = 0;
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
146 } else if (!g_ascii_strncasecmp(i, "Description=", strlen("Description="))) {
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
147 if(theme->desc)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
148 g_free(theme->desc);
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
149 theme->desc = g_strdup(i + strlen("Description="));
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
150 theme->desc[strlen(theme->desc)-1] = 0;
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
151 } else if (!g_ascii_strncasecmp(i, "Icon=", strlen("Icon="))) {
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
152 if(theme->icon)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
153 g_free(theme->icon);
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
154 theme->icon = g_build_filename(dirname, i + strlen("Icon="), NULL);
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
155 theme->icon[strlen(theme->icon)-1] = 0;
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
156 } else if (!g_ascii_strncasecmp(i, "Author=", strlen("Author="))) {
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
157 if(theme->author)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
158 g_free(theme->author);
4816
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
159 theme->author = g_strdup(i + strlen("Author="));
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
160 theme->author[strlen(theme->author)-1] = 0;
497ee39d4b64 [gaim-migrate @ 5140]
Luke Schierer <lschiere@pidgin.im>
parents: 4814
diff changeset
161 } else if (load && list) {
4667
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
162 gboolean hidden = FALSE;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
163 char *sfile = NULL;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
164
4266
0cd42c6ff5fb [gaim-migrate @ 4517]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
165 if (*i == '!' && *(i + 1) == ' ') {
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
166 hidden = TRUE;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
167 i = i + 2;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
168 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
169 while (*i) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
170 char l[64];
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
171 int li = 0;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
172 while (!isspace(*i))
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
173 l[li++] = *(i++);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
174 if (!sfile) {
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
175 l[li] = 0;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
176 sfile = g_build_filename(dirname, l, NULL);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
177 } else {
4632
c3b2f7bc58e1 [gaim-migrate @ 4930]
Luke Schierer <lschiere@pidgin.im>
parents: 4630
diff changeset
178 GtkIMHtmlSmiley *smiley = g_new0(GtkIMHtmlSmiley, 1);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
179 l[li] = 0;
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
180 smiley->file = sfile;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
181 smiley->smile = g_strdup(l);
4667
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
182 smiley->hidden = hidden;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
183 list->smileys = g_slist_append(list->smileys, smiley);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
184 }
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
185 while (isspace(*i))
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
186 i++;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
187
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
188 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
189 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
190 }
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
191
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
192 if (load) {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4341
diff changeset
193 GList *cnv;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
194
4375
1788e74229eb [gaim-migrate @ 4641]
Christian Hammond <chipx86@chipx86.com>
parents: 4359
diff changeset
195 for (cnv = gaim_get_conversations(); cnv != NULL; cnv = cnv->next) {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4341
diff changeset
196 struct gaim_conversation *conv = cnv->data;
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4398
diff changeset
197
4398
ba901bb913e5 [gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents: 4375
diff changeset
198 if (GAIM_IS_GTK_CONVERSATION(conv))
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4341
diff changeset
199 smiley_themeize(GAIM_GTK_CONVERSATION(conv)->imhtml);
4338
e4ad226358d1 [gaim-migrate @ 4602]
Christian Hammond <chipx86@chipx86.com>
parents: 4323
diff changeset
200 }
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
201 }
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4266
diff changeset
202
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
203 g_free(dirname);
4989
9878cf519ae8 [gaim-migrate @ 5324]
Nathan Walp <nwalp@pidgin.im>
parents: 4892
diff changeset
204 fclose(f);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
205 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
206
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
207 void smiley_theme_probe()
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
208 {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
209 GDir *dir;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
210 const gchar *file;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
211 gchar *path;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
212 int l;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
213
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214 char* probedirs[3];
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215 probedirs[0] = g_build_filename(DATADIR, "pixmaps", "gaim", "smileys", NULL);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216 probedirs[1] = g_build_filename(gaim_user_dir(), "smileys", NULL);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
217 probedirs[2] = 0;
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
218 for (l=0; probedirs[l]; l++) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
219 dir = g_dir_open(probedirs[l], 0, NULL);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
220 if (dir) {
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
221 while ((file = g_dir_read_name(dir))) {
4301
016439275f14 [gaim-migrate @ 4555]
Sean Egan <seanegan@pidgin.im>
parents: 4298
diff changeset
222 path = g_build_filename(probedirs[l], file, "theme", NULL);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
223
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
224 /* Here we check to see that the theme has proper syntax.
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
225 * We set the second argument to FALSE so that it doesn't load
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
226 * the theme yet.
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
227 */
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
228 load_smiley_theme(path, FALSE);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
229 g_free(path);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
230 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
231 g_dir_close(dir);
4341
01e60b0ab430 [gaim-migrate @ 4605]
Sean Egan <seanegan@pidgin.im>
parents: 4338
diff changeset
232 } else if (l == 1) {
01e60b0ab430 [gaim-migrate @ 4605]
Sean Egan <seanegan@pidgin.im>
parents: 4338
diff changeset
233 mkdir(probedirs[l], S_IRUSR | S_IWUSR | S_IXUSR);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4816
diff changeset
234 }
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
235 g_free(probedirs[l]);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
236 }
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
237 }
4667
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
238
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
239 GSList *get_proto_smileys(int protocol) {
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
240 struct prpl *proto = find_prpl(protocol);
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
241 struct smiley_list *list, *def;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
242
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
243 if(!current_smiley_theme)
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
244 return NULL;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
245
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
246 def = list = current_smiley_theme->list;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
247
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
248 while(list) {
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
249 if(!strcmp(list->sml, "default"))
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
250 def = list;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
251 else if(proto && !strcmp(proto->name, list->sml))
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
252 break;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
253
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
254 list = list->next;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
255 }
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
256
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
257 return list ? list->smileys : def->smileys;
687237fa1ef5 [gaim-migrate @ 4978]
Nathan Walp <nwalp@pidgin.im>
parents: 4632
diff changeset
258 }

mercurial