Tue, 07 May 2013 05:04:46 -0400
Rewrite debug window filter in JS.
Note, this does cause a couple regressions, but they are probably not
that big a deal. First, the JS regular expression syntax is slightly
different. Second, the JS regex API lacks a way to reliably determine
the location of matched groups, so we can't highlight just the groups
and must highlight the entire expression.
I suspect that none of our users ever had to use any fancy regex in the
debug window, and that most of our developers didn't even know it could
be done. So I doubt these regressions will cause much pain.
|
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" |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
29 | |
|
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 | * Conversation Theme Builder |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
32 | *****************************************************************************/ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
33 | |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
34 | static GHashTable * |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
35 | read_info_plist(xmlnode *plist) |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
36 | { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
37 | GHashTable *info; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
38 | xmlnode *key, *value; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
39 | gboolean fail = FALSE; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
40 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
41 | 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
|
42 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
43 | for (key = xmlnode_get_child(plist, "dict/key"); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
44 | key; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
45 | key = xmlnode_get_next_twin(key)) { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
46 | char *keyname; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
47 | GValue *val; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
48 | |
|
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 | for (value = key->next; value && value->type != XMLNODE_TYPE_TAG; value = value->next) |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
51 | ; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
52 | if (!value) { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
53 | fail = TRUE; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
54 | break; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
55 | } |
|
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 | 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
|
58 | 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
|
59 | g_value_init(val, G_TYPE_STRING); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
60 | g_value_take_string(val, xmlnode_get_data_unescaped(value)); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
61 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
62 | } 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
|
63 | 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
|
64 | 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
|
65 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
66 | } 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
|
67 | 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
|
68 | 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
|
69 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
70 | } else if (g_str_equal(value->name, "real")) { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
71 | char *temp = xmlnode_get_data_unescaped(value); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
72 | 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
|
73 | 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
|
74 | g_free(temp); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
75 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
76 | } else if (g_str_equal(value->name, "integer")) { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
77 | char *temp = xmlnode_get_data_unescaped(value); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
78 | 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
|
79 | 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
|
80 | g_free(temp); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
81 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
82 | } else { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
83 | /* 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
|
84 | 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
|
85 | g_free(val); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
86 | fail = TRUE; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
87 | break; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
88 | } |
|
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 | keyname = xmlnode_get_data_unescaped(key); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
91 | 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
|
92 | } |
|
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 | if (fail) { |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
95 | 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
|
96 | info = NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
97 | } |
|
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 | return info; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
100 | } |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
101 | |
|
32958
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
102 | static gboolean |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
103 | 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
|
104 | { |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
105 | gboolean result; |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
106 | gchar *plist_file; |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
107 | |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
108 | 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
|
109 | 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
|
110 | 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
|
111 | |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
112 | return result; |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
113 | } |
|
98a8270ec6aa
Override the probe function in the conversation theme loader.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32588
diff
changeset
|
114 | |
|
32536
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
115 | static PurpleTheme * |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
116 | 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
|
117 | { |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
118 | PidginConvTheme *theme = NULL; |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
119 | char *contents; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
120 | xmlnode *plist; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
121 | GHashTable *info; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
122 | GValue *val; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
123 | int MessageViewVersion; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
124 | const char *CFBundleName; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
125 | 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
|
126 | GDir *variants; |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
127 | 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
|
128 | |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
129 | 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
|
130 | |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
131 | /* 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
|
132 | contents = g_build_filename(dir, "Contents", NULL); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
133 | plist = xmlnode_from_file(contents, "Info.plist", "Info.plist", "gtkconv-theme-loader"); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
134 | g_free(contents); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
135 | if (plist == NULL) { |
|
32565
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
136 | purple_debug_error("gtkconv-theme-loader", |
|
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
137 | "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
|
138 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
139 | } |
|
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 | info = read_info_plist(plist); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
142 | xmlnode_free(plist); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
143 | if (info == NULL) { |
|
32565
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
144 | purple_debug_error("gtkconv-theme-loader", |
|
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
145 | "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
|
146 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
147 | } |
|
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 | /* 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
|
150 | 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
|
151 | 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
|
152 | 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
|
153 | "%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
|
154 | dir); |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
155 | 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
|
156 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
157 | } |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
158 | 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
|
159 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
160 | /* 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
|
161 | 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
|
162 | 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
|
163 | 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
|
164 | "%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
|
165 | dir); |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
166 | 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
|
167 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
168 | } |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
169 | 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
|
170 | |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
171 | /* 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
|
172 | 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
|
173 | 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
|
174 | 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
|
175 | "%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
|
176 | dir); |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
177 | 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
|
178 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
179 | } |
|
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 | 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
|
182 | if (MessageViewVersion < 3) { |
|
32565
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
183 | purple_debug_error("gtkconv-theme-loader", |
|
9278cf3bf2c5
Use a consistent debugging domain.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32562
diff
changeset
|
184 | "%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
|
185 | CFBundleName, MessageViewVersion); |
|
32545
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
186 | 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
|
187 | return NULL; |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
188 | } |
|
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 | 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
|
191 | "type", "conversation", |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
192 | "name", CFBundleName, |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
193 | "directory", dir, |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
194 | "info", info, NULL); |
|
1b21192ab58a
Move conversation theme loading into the PidginConvThemeLoader GObject
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32536
diff
changeset
|
195 | |
|
32562
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
196 | /* 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
|
197 | 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
|
198 | 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
|
199 | 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
|
200 | |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
201 | 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
|
202 | char *prefname; |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
203 | 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
|
204 | 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
|
205 | |
|
32588
b0ce9232396b
Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32570
diff
changeset
|
206 | /* 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
|
207 | 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
|
208 | CFBundleIdentifier); |
|
b0ce9232396b
Make sure our pref parents exist, or else saved variants will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32570
diff
changeset
|
209 | 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
|
210 | 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
|
211 | |
|
32568
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
212 | /* 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
|
213 | 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
|
214 | CFBundleIdentifier); |
|
32570
52af6871a599
Avoid an error log for non-existent prefs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32568
diff
changeset
|
215 | 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
|
216 | 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
|
217 | 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
|
218 | |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
219 | 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
|
220 | 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
|
221 | |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
222 | } else { |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
223 | /* 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
|
224 | 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
|
225 | 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
|
226 | 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
|
227 | 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
|
228 | 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
|
229 | else |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
230 | 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
|
231 | } else |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
232 | 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
|
233 | } |
|
32562
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
234 | |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
235 | 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
|
236 | 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
|
237 | char *name; |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
238 | |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
239 | 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
|
240 | continue; |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
241 | |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
242 | 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
|
243 | 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
|
244 | |
|
22cb8a095118
Set the default variant when loading the theme. The priorities
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32566
diff
changeset
|
245 | /* 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
|
246 | 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
|
247 | 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
|
248 | 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
|
249 | } |
|
32562
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
250 | } |
|
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 | 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
|
253 | } |
|
9c094ffe9333
Load the list of variants when building the theme.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32545
diff
changeset
|
254 | |
|
32536
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
255 | 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
|
256 | } |
|
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 | * GObject Stuff |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
260 | *****************************************************************************/ |
|
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 | static void |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
263 | 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
|
264 | { |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
265 | 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
|
266 | |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
267 | 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
|
268 | 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
|
269 | } |
|
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 | GType |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
273 | 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
|
274 | { |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
275 | 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
|
276 | if (type == 0) { |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
277 | 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
|
278 | sizeof(PidginConvThemeLoaderClass), |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
279 | NULL, /* base_init */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
280 | NULL, /* base_finalize */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
281 | (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
|
282 | NULL, /* class_finalize */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
283 | NULL, /* class_data */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
284 | sizeof (PidginConvThemeLoader), |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
285 | 0, /* n_preallocs */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
286 | NULL, /* instance_init */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
287 | NULL, /* value table */ |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
288 | }; |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
289 | 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
|
290 | "PidginConvThemeLoader", &info, 0); |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
291 | } |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
292 | return type; |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
293 | } |
|
91b09760ab0c
Add some boilerplate Conversation theme GObjects. These don't do
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
294 |