Mercurial > pidgin.yaz
annotate libpurple/theme-manager.c @ 27561:3da1d149de25
If neither a locally-set custom icon nor a remotely-set buddy icon can be
found, then reset the icon container size to the minimum again.
Fixes #9671.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sun, 12 Jul 2009 20:03:43 +0000 |
parents | d629a42c8340 |
children | f1437342cc0e |
rev | line source |
---|---|
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
1 /* |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
2 * Themes for libpurple |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
3 * |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
4 * Pidgin is the legal property of its developers, whose names are too numerous |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
6 * source distribution. |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
7 * |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
8 * This program is free software; you can redistribute it and/or modify |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
11 * (at your option) any later version. |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
12 * |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
16 * GNU General Public License for more details. |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
17 * |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
21 */ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
22 |
25349
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
23 #include <glib.h> |
23483
748308865dbf
Changed how the prefs handle themes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23474
diff
changeset
|
24 #include <string.h> |
748308865dbf
Changed how the prefs handle themes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23474
diff
changeset
|
25 |
25349
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
26 #include "internal.h" |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
27 #include "theme-manager.h" |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
28 #include "util.h" |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
29 |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
30 /****************************************************************************** |
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
31 * Globals |
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
32 *****************************************************************************/ |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
33 |
23464
9ffbfbcf307d
Fixed purple sound loader class init function (bug on startup) and added shell sound theme selector
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23463
diff
changeset
|
34 static GHashTable *theme_table = NULL; |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
35 |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
36 /***************************************************************************** |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
37 * GObject Stuff |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
38 ****************************************************************************/ |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
39 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
40 GType |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
41 purple_theme_manager_get_type(void) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
42 { |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
43 static GType type = 0; |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
44 if (type == 0) { |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
45 static const GTypeInfo info = { |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
46 sizeof(PurpleThemeManagerClass), |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
47 NULL, /* base_init */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
48 NULL, /* base_finalize */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
49 NULL, /* class_init */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
50 NULL, /* class_finalize */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
51 NULL, /* class_data */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
52 sizeof(PurpleThemeManager), |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
53 0, /* n_preallocs */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
54 NULL, /* instance_init */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
55 NULL, /* Value Table */ |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
56 }; |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
57 type = g_type_register_static(G_TYPE_OBJECT, |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
58 "PurpleThemeManager", &info, 0); |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
59 } |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
60 return type; |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
61 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
62 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
63 /****************************************************************************** |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
64 * Helpers |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
65 *****************************************************************************/ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
66 |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
67 /* makes a key of <type> + '/' + <name> */ |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
68 static gchar * |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
69 purple_theme_manager_make_key(const gchar *name, const gchar *type) |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
70 { |
25349
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
71 g_return_val_if_fail(name && *name, NULL); |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
72 g_return_val_if_fail(type && *type, NULL); |
23466
5a02912e0bac
more gobject fixed
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23465
diff
changeset
|
73 return g_strconcat(type, "/", name, NULL); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
74 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
75 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
76 /* returns TRUE if theme is of type "user_data" */ |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
77 static gboolean |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
78 purple_theme_manager_is_theme_type(gchar *key, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
79 gpointer value, |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
80 gchar *user_data) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
81 { |
23472
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
82 return g_str_has_prefix(key, g_strconcat(user_data, "/", NULL)); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
83 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
84 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
85 static gboolean |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
86 purple_theme_manager_is_theme(gchar *key, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
87 gpointer value, |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
88 gchar *user_data) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
89 { |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
90 return PURPLE_IS_THEME(value); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
91 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
92 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
93 static void |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
94 purple_theme_manager_function_wrapper(gchar *key, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
95 gpointer value, |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
96 PTFunc user_data) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
97 { |
23455
d5c5512adc69
Fixed some leaks formatting
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23454
diff
changeset
|
98 if (PURPLE_IS_THEME(value)) |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
99 (* user_data)(value); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
100 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
101 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
102 static void |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
103 purple_theme_manager_build_dir(const gchar *root) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
104 { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
105 gchar *purple_dir, *theme_dir; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
106 const gchar *name = NULL, *type = NULL; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
107 GDir *rdir, *tdir; |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
108 PurpleThemeLoader *loader; |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
109 |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
110 rdir = g_dir_open(root, 0, NULL); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
111 |
25349
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
112 if (!rdir) |
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
113 return; |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
114 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
115 /* Parses directory by root/name/purple/type */ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
116 while ((name = g_dir_read_name(rdir))) { |
23460
623f0b40f6f6
Added sound builder (implete still needs a good way to go from xml file to xml node)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23455
diff
changeset
|
117 purple_dir = g_build_filename(root, name, "purple", NULL); |
25349
1eacf60a73dd
Fix some theme manager assertion failures.
Richard Laager <rlaager@wiktel.com>
parents:
23874
diff
changeset
|
118 tdir = g_dir_open(purple_dir, 0, NULL); |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
119 |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
120 if (!tdir) { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
121 g_free(purple_dir); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
122 |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
123 continue; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
124 } |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
125 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
126 while ((type = g_dir_read_name(tdir))) { |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
127 if ((loader = g_hash_table_lookup(theme_table, type))) { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
128 PurpleTheme *theme = NULL; |
23455
d5c5512adc69
Fixed some leaks formatting
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23454
diff
changeset
|
129 |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
130 theme_dir = g_build_filename(purple_dir, type, NULL); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
131 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
132 theme = purple_theme_loader_build(loader, theme_dir); |
26629
652efbbf1b45
Fix a leak when loading themes.
Paul Aurich <paul@darkrain42.org>
parents:
25402
diff
changeset
|
133 g_free(theme_dir); |
23455
d5c5512adc69
Fixed some leaks formatting
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23454
diff
changeset
|
134 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
135 if (PURPLE_IS_THEME(theme)) |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
136 purple_theme_manager_add_theme(theme); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
137 } |
23455
d5c5512adc69
Fixed some leaks formatting
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23454
diff
changeset
|
138 } |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
139 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
140 g_dir_close(tdir); |
23455
d5c5512adc69
Fixed some leaks formatting
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23454
diff
changeset
|
141 g_free(purple_dir); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
142 } |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
143 |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
144 g_dir_close(rdir); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
145 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
146 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
147 /***************************************************************************** |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
148 * Public API functions |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
149 *****************************************************************************/ |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
150 |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
151 void |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
152 purple_theme_manager_init(void) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
153 { |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
154 theme_table = g_hash_table_new_full(g_str_hash, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
155 g_str_equal, g_free, g_object_unref); |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
156 } |
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
157 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
158 void |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
159 purple_theme_manager_refresh(void) |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
160 { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
161 gchar *path = NULL; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
162 const gchar *xdg = NULL; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
163 gint i = 0; |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
164 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
165 g_hash_table_foreach_remove(theme_table, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
166 (GHRFunc) purple_theme_manager_is_theme, NULL); |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
167 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
168 /* Add themes from ~/.purple */ |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
169 path = g_build_filename(purple_user_dir(), "themes", NULL); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
170 purple_theme_manager_build_dir(path); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
171 g_free(path); |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
172 |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
173 /* look for XDG_DATA_HOME. If we don't have it use ~/.local, and add it */ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
174 if ((xdg = g_getenv("XDG_DATA_HOME")) != NULL) |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
175 path = g_build_filename(xdg, "themes", NULL); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
176 else |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
177 path = g_build_filename(purple_home_dir(), ".local", "themes", NULL); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
178 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
179 purple_theme_manager_build_dir(path); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
180 g_free(path); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
181 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
182 /* now dig through XDG_DATA_DIRS and add those too */ |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
183 xdg = g_getenv("XDG_DATA_DIRS"); |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
184 if (xdg) { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
185 gchar **xdg_dirs = g_strsplit(xdg, G_SEARCHPATH_SEPARATOR_S, 0); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
186 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
187 for (i = 0; xdg_dirs[i]; i++) { |
23873
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
188 path = g_build_filename(xdg_dirs[i], "themes", NULL); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
189 purple_theme_manager_build_dir(path); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
190 g_free(path); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
191 } |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
192 |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
193 g_strfreev(xdg_dirs); |
4575b578a54b
cleaned up purple_theme_manager_build_dir
Gary Kramlich <grim@reaperworld.com>
parents:
23483
diff
changeset
|
194 } |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
195 } |
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
196 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
197 void |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
198 purple_theme_manager_uninit(void) |
23461
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
199 { |
fecc8e2612c4
Fixed some things needed for proper gobfication (init/finalize/etc)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23460
diff
changeset
|
200 g_hash_table_destroy(theme_table); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
201 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
202 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
203 void |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
204 purple_theme_manager_register_type(PurpleThemeLoader *loader) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
205 { |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
206 gchar *type; |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
207 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
208 g_return_if_fail(PURPLE_IS_THEME_LOADER(loader)); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
209 |
23464
9ffbfbcf307d
Fixed purple sound loader class init function (bug on startup) and added shell sound theme selector
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23463
diff
changeset
|
210 type = g_strdup(purple_theme_loader_get_type_string(loader)); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
211 g_return_if_fail(type); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
212 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
213 /* if something is already there do nothing */ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
214 if (!g_hash_table_lookup(theme_table, type)) |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
215 g_hash_table_insert(theme_table, type, loader); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
216 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
217 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
218 void |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
219 purple_theme_manager_unregister_type(PurpleThemeLoader *loader) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
220 { |
23474
331a7a69d955
Changed the theme_manager_init function to do less, makes it cleaner and faster (won't have to build
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23472
diff
changeset
|
221 const gchar *type; |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
222 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
223 g_return_if_fail(PURPLE_IS_THEME_LOADER(loader)); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
224 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
225 type = purple_theme_loader_get_type_string(loader); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
226 g_return_if_fail(type); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
227 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
228 if (g_hash_table_lookup(theme_table, type) == loader) |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
229 { |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
230 g_hash_table_remove(theme_table, type); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
231 |
23702
9525fb966efb
theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23483
diff
changeset
|
232 g_hash_table_foreach_remove(theme_table, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
233 (GHRFunc)purple_theme_manager_is_theme_type, (gpointer)type); |
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
234 } /* only free if given registered loader */ |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
235 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
236 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
237 PurpleTheme * |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
238 purple_theme_manager_find_theme(const gchar *name, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
239 const gchar *type) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
240 { |
23472
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
241 gchar *key; |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
242 PurpleTheme *theme; |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
243 |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
244 key = purple_theme_manager_make_key(name, type); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
245 |
23472
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
246 g_return_val_if_fail(key, NULL); |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
247 |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
248 theme = g_hash_table_lookup(theme_table, key); |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
249 |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
250 g_free(key); |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
251 |
fbf72bbd1084
Fixed up a few typos, readability, leaks, and bugs, all minor and mostly in theme and theme loader classes
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23470
diff
changeset
|
252 return theme; |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
253 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
254 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
255 void |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
256 purple_theme_manager_add_theme(PurpleTheme *theme) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
257 { |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
258 gchar *key; |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
259 |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
260 g_return_if_fail(PURPLE_IS_THEME(theme)); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
261 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
262 key = purple_theme_manager_make_key(purple_theme_get_name(theme), |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
263 purple_theme_get_type_string(theme)); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
264 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
265 g_return_if_fail(key); |
23467
655a37bc0eb0
fixed images to appear in pref menu
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23466
diff
changeset
|
266 |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
267 /* if something is already there do nothing */ |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
268 if (g_hash_table_lookup(theme_table, key) == NULL) |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
269 g_hash_table_insert(theme_table, key, theme); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
270 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
271 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
272 void |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
273 purple_theme_manager_remove_theme(PurpleTheme *theme) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
274 { |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
275 gchar *key; |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
276 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
277 g_return_if_fail(PURPLE_IS_THEME(theme)); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
278 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
279 key = purple_theme_manager_make_key(purple_theme_get_name(theme), |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
280 purple_theme_get_type_string(theme)); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
281 |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
282 g_return_if_fail(key); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
283 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
284 g_hash_table_remove(theme_table, key); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
285 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
286 g_free(key); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
287 } |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
288 |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
289 void |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
290 purple_theme_manager_for_each_theme(PTFunc func) |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
291 { |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
292 g_return_if_fail(func); |
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
293 |
23454
0ece981e44f5
Fixed theme-manager to be more of a singleton and less-gobject like
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23453
diff
changeset
|
294 g_hash_table_foreach(theme_table, |
25402
0c7b74fc558e
Lots of minor whitespace and comment changes:
Mark Doliner <mark@kingant.net>
parents:
25349
diff
changeset
|
295 (GHFunc) purple_theme_manager_function_wrapper, func); |
23453
6356f402079c
Added the theme-manager and basic functionality (needs to be given proper directories to find themes)
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff
changeset
|
296 } |
27285
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
297 |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
298 PurpleTheme * |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
299 purple_theme_manager_load_theme(const gchar *theme_dir, const gchar *type) |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
300 { |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
301 PurpleThemeLoader *loader; |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
302 |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
303 g_return_val_if_fail(theme_dir != NULL && type != NULL, NULL); |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
304 |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
305 loader = g_hash_table_lookup(theme_table, type); |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
306 g_return_val_if_fail(PURPLE_IS_THEME_LOADER(loader), NULL); |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
307 |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
308 return purple_theme_loader_build(loader, theme_dir); |
d629a42c8340
Allow drag-and-drop of all sorts of themes.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
26629
diff
changeset
|
309 } |