pidgin/gtkconv-theme-loader.c

Sat, 07 Sep 2013 00:11:42 +0530

author
Ankit Vani <a@nevitus.org>
date
Sat, 07 Sep 2013 00:11:42 +0530
branch
soc.2013.gobjectification.plugins
changeset 36692
324db2a53c4c
parent 36512
35b1e42281e5
parent 34935
686fa55b0deb
child 39548
dfd989c8236e
permissions
-rw-r--r--

Merged soc.2013.gobjectification branch

32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
1 /*
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
2 * PidginConvThemeLoader for Pidgin
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
3 *
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
4 * Pidgin is the legal property of its developers, whose names are too numerous
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
6 * source distribution.
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
7 *
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
12 *
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
17 *
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
21 */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
22
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
23 #include "pidgin.h"
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
24 #include "gtkconv-theme-loader.h"
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
25 #include "gtkconv-theme.h"
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
26
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
27 #include "xmlnode.h"
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
28 #include "debug.h"
36512
35b1e42281e5 Removed loadable field from plugin info dialog, and added license
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
29 #include "prefs.h"
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
30
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
31 /*****************************************************************************
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
32 * Conversation Theme Builder
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
33 *****************************************************************************/
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
34
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
35 static GHashTable *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
36 read_info_plist(PurpleXmlNode *plist)
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
37 {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
38 GHashTable *info;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
39 PurpleXmlNode *key, *value;
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
40 gboolean fail = FALSE;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
41
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
42 info = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
43
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
44 for (key = purple_xmlnode_get_child(plist, "dict/key");
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
45 key;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
46 key = purple_xmlnode_get_next_twin(key)) {
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
47 char *keyname;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
48 GValue *val;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
49
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
50 ;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
51 for (value = key->next; value && value->type != PURPLE_XMLNODE_TYPE_TAG; value = value->next)
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
52 ;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
53 if (!value) {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
54 fail = TRUE;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
55 break;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
56 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
57
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
58 val = g_new0(GValue, 1);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
59 if (g_str_equal(value->name, "string")) {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
60 g_value_init(val, G_TYPE_STRING);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
61 g_value_take_string(val, purple_xmlnode_get_data_unescaped(value));
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
62
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
63 } else if (g_str_equal(value->name, "true")) {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
64 g_value_init(val, G_TYPE_BOOLEAN);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
65 g_value_set_boolean(val, TRUE);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
66
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
67 } else if (g_str_equal(value->name, "false")) {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
68 g_value_init(val, G_TYPE_BOOLEAN);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
69 g_value_set_boolean(val, FALSE);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
70
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
71 } else if (g_str_equal(value->name, "real")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
72 char *temp = purple_xmlnode_get_data_unescaped(value);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
73 g_value_init(val, G_TYPE_FLOAT);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
74 g_value_set_float(val, atof(temp));
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
75 g_free(temp);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
76
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
77 } else if (g_str_equal(value->name, "integer")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
78 char *temp = purple_xmlnode_get_data_unescaped(value);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
79 g_value_init(val, G_TYPE_INT);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
80 g_value_set_int(val, atoi(temp));
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
81 g_free(temp);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
82
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
83 } else {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
84 /* NOTE: We don't support array, data, date, or dict as values,
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
85 since they don't seem to be needed for styles. */
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
86 g_free(val);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
87 fail = TRUE;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
88 break;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
89 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
90
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
91 keyname = purple_xmlnode_get_data_unescaped(key);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
92 g_hash_table_insert(info, keyname, val);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
93 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
94
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
95 if (fail) {
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
96 g_hash_table_destroy(info);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
97 info = NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
98 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
99
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
100 return info;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
101 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
102
32958
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
103 static gboolean
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
104 pidgin_conv_loader_probe(const gchar *dir)
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
105 {
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
106 gboolean result;
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
107 gchar *plist_file;
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
108
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
109 plist_file = g_build_filename(dir, "Contents", "Info.plist", NULL);
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
110 result = g_file_test(plist_file, G_FILE_TEST_IS_REGULAR);
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
111 g_free(plist_file);
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
112
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
113 return result;
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
114 }
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
115
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
116 static PurpleTheme *
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
117 pidgin_conv_loader_build(const gchar *dir)
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
118 {
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
119 PidginConvTheme *theme = NULL;
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
120 char *contents;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
121 PurpleXmlNode *plist;
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
122 GHashTable *info;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
123 GValue *val;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
124 int MessageViewVersion;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
125 const char *CFBundleName;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
126 const char *CFBundleIdentifier;
32562
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
127 GDir *variants;
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
128 char *variant_dir;
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
129
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
130 g_return_val_if_fail(dir != NULL, NULL);
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
131
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
132 /* Load Info.plist for theme information */
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
133 contents = g_build_filename(dir, "Contents", NULL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
134 plist = purple_xmlnode_from_file(contents, "Info.plist", "Info.plist", "gtkconv-theme-loader");
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
135 g_free(contents);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
136 if (plist == NULL) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
137 purple_debug_error("gtkconv-theme-loader",
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
138 "Failed to load Contents/Info.plist in %s\n", dir);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
139 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
140 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
141
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
142 info = read_info_plist(plist);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32958
diff changeset
143 purple_xmlnode_free(plist);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
144 if (info == NULL) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
145 purple_debug_error("gtkconv-theme-loader",
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
146 "Failed to load Contents/Info.plist in %s\n", dir);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
147 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
148 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
149
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
150 /* Check for required keys: CFBundleName */
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
151 val = g_hash_table_lookup(info, "CFBundleName");
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
152 if (!val || !G_VALUE_HOLDS_STRING(val)) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
153 purple_debug_error("gtkconv-theme-loader",
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
154 "%s/Contents/Info.plist missing required string key CFBundleName.\n",
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
155 dir);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
156 g_hash_table_destroy(info);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
157 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
158 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
159 CFBundleName = g_value_get_string(val);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
160
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
161 /* Check for required keys: CFBundleIdentifier */
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
162 val = g_hash_table_lookup(info, "CFBundleIdentifier");
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
163 if (!val || !G_VALUE_HOLDS_STRING(val)) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
164 purple_debug_error("gtkconv-theme-loader",
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
165 "%s/Contents/Info.plist missing required string key CFBundleIdentifier.\n",
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
166 dir);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
167 g_hash_table_destroy(info);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
168 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
169 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
170 CFBundleIdentifier = g_value_get_string(val);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
171
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
172 /* Check for required keys: MessageViewVersion */
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
173 val = g_hash_table_lookup(info, "MessageViewVersion");
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
174 if (!val || !G_VALUE_HOLDS_INT(val)) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
175 purple_debug_error("gtkconv-theme-loader",
32566
05644bb1aec2 Be a bit stricter about types in Info.plist.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32565
diff changeset
176 "%s/Contents/Info.plist missing required integer key MessageViewVersion.\n",
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
177 dir);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
178 g_hash_table_destroy(info);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
179 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
180 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
181
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
182 MessageViewVersion = g_value_get_int(val);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
183 if (MessageViewVersion < 3) {
32565
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
184 purple_debug_error("gtkconv-theme-loader",
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
185 "%s is a legacy style (version %d) and will not be loaded.\n",
9278cf3bf2c5 Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32562
diff changeset
186 CFBundleName, MessageViewVersion);
32545
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
187 g_hash_table_destroy(info);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
188 return NULL;
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
189 }
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
190
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
191 theme = g_object_new(PIDGIN_TYPE_CONV_THEME,
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
192 "type", "conversation",
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
193 "name", CFBundleName,
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
194 "directory", dir,
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
195 "info", info, NULL);
1b21192ab58a Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32536
diff changeset
196
32562
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
197 /* Read list of variants */
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
198 variant_dir = g_build_filename(dir, "Contents", "Resources", "Variants", NULL);
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
199 variants = g_dir_open(variant_dir, 0, NULL);
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
200 g_free(variant_dir);
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
201
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
202 if (variants) {
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
203 char *prefname;
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
204 const char *default_variant = NULL;
32562
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
205 const char *file;
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
206
32588
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
207 /* Make sure prefs exist */
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
208 prefname = g_strdup_printf(PIDGIN_PREFS_ROOT "/conversations/themes/%s",
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
209 CFBundleIdentifier);
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
210 purple_prefs_add_none(prefname);
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
211 g_free(prefname);
b0ce9232396b Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32570
diff changeset
212
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
213 /* Try user-set variant */
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
214 prefname = g_strdup_printf(PIDGIN_PREFS_ROOT "/conversations/themes/%s/variant",
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
215 CFBundleIdentifier);
32570
52af6871a599 Avoid an error log for non-existent prefs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32568
diff changeset
216 if (purple_prefs_exists(prefname))
52af6871a599 Avoid an error log for non-existent prefs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32568
diff changeset
217 default_variant = purple_prefs_get_string(prefname);
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
218 g_free(prefname);
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
219
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
220 if (default_variant && *default_variant) {
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
221 pidgin_conversation_theme_set_variant(theme, default_variant);
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
222
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
223 } else {
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
224 /* Try theme default */
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
225 val = g_hash_table_lookup(info, "DefaultVariant");
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
226 if (val && G_VALUE_HOLDS_STRING(val)) {
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
227 default_variant = g_value_get_string(val);
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
228 if (default_variant && *default_variant)
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
229 pidgin_conversation_theme_set_variant(theme, default_variant);
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
230 else
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
231 default_variant = NULL;
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
232 } else
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
233 default_variant = NULL;
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
234 }
32562
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
235
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
236 while ((file = g_dir_read_name(variants)) != NULL) {
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
237 const char *end = g_strrstr(file, ".css");
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
238 char *name;
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
239
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
240 if ((end == NULL) || (*(end + 4) != '\0'))
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
241 continue;
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
242
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
243 name = g_strndup(file, end - file);
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
244 pidgin_conversation_theme_add_variant(theme, name);
32568
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
245
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
246 /* Set variant with first found */
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
247 if (!default_variant) {
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
248 pidgin_conversation_theme_set_variant(theme, name);
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
249 default_variant = name;
22cb8a095118 Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32566
diff changeset
250 }
32562
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
251 }
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
252
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
253 g_dir_close(variants);
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
254 }
9c094ffe9333 Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32545
diff changeset
255
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
256 return PURPLE_THEME(theme);
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
257 }
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
258
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
259 /******************************************************************************
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
260 * GObject Stuff
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
261 *****************************************************************************/
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
262
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
263 static void
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
264 pidgin_conv_theme_loader_class_init(PidginConvThemeLoaderClass *klass)
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
265 {
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
266 PurpleThemeLoaderClass *loader_klass = PURPLE_THEME_LOADER_CLASS(klass);
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
267
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
268 loader_klass->purple_theme_loader_build = pidgin_conv_loader_build;
32958
98a8270ec6aa Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32588
diff changeset
269 loader_klass->probe_directory = pidgin_conv_loader_probe;
32536
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
270 }
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
271
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
272
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
273 GType
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
274 pidgin_conversation_theme_loader_get_type(void)
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
275 {
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
276 static GType type = 0;
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
277 if (type == 0) {
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
278 static const GTypeInfo info = {
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
279 sizeof(PidginConvThemeLoaderClass),
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
280 NULL, /* base_init */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
281 NULL, /* base_finalize */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
282 (GClassInitFunc)pidgin_conv_theme_loader_class_init, /* class_init */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
283 NULL, /* class_finalize */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
284 NULL, /* class_data */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
285 sizeof (PidginConvThemeLoader),
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
286 0, /* n_preallocs */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
287 NULL, /* instance_init */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
288 NULL, /* value table */
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
289 };
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
290 type = g_type_register_static(PURPLE_TYPE_THEME_LOADER,
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
291 "PidginConvThemeLoader", &info, 0);
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
292 }
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
293 return type;
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
294 }
91b09760ab0c Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
295

mercurial