pidgin/gtkicon-theme-loader.c

Thu, 17 May 2018 22:26:19 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Thu, 17 May 2018 22:26:19 -0500
changeset 39078
bbaab5d6a8d5
parent 34935
686fa55b0deb
child 39461
a4ae05d3be93
permissions
-rw-r--r--

win32: Simplify complicated DLL preparation

WinPidgin uses complicated DLL preparation in order to find where
GTK+ and other DLLs are located. This is broken due to names and
paths of DLLs having changed with the new build system and versions.
GTK+3 doesn't provide an installable package either. Since we need
to bundle the dependencies ourselves anyway, we can control where
they are stored and can simplify this complicated searching.

For the purpose of loading DLLs, the difference between "classic"
and "fhs" win32-dirs is that "classic" has its dependencies in a
bin/ subdirectory. Therefore, all that's really needed is to add
the bin/ subdirectory into the search path. This patch does this
using SetDllDirectory().

23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
1 /*
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
2 * PidginIconThemeLoader for Pidgin
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
3 *
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
4 * Pidgin is the legal property of its developers, whose names are too numerous
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
6 * source distribution.
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
7 *
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
12 *
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
17 *
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
21 */
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
22
24377
8d0bfda8402d renamed gtkblist-loader.[ch] to gtblist-theme-loader.[ch]
Gary Kramlich <grim@reaperworld.com>
parents: 23972
diff changeset
23 #include "gtkicon-theme-loader.h"
23967
cc5667bc8f1e Clean up status icon themes a bit
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23965
diff changeset
24 #include "gtkstatus-icon-theme.h"
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
25
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
26 #include "xmlnode.h"
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
27 #include "debug.h"
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
28
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
29 /*****************************************************************************
25875
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
30 * Icon Theme Builder
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
31 *****************************************************************************/
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
32
23971
9764690b14f2 Changed PurpleTheme build function to only return PurpleTheme*
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23967
diff changeset
33 static PurpleTheme *
32957
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
34 pidgin_icon_loader_build(const gchar *theme_dir)
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
35 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
36 PurpleXmlNode *root_node = NULL, *sub_node;
32957
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
37 gchar *dir, *filename_full, *data = NULL;
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
38 PidginIconTheme *theme = NULL;
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
39 const gchar *name;
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
40
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
41 /* Find the theme file */
32957
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
42 g_return_val_if_fail(theme_dir != NULL, NULL);
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
43 dir = g_build_filename(theme_dir, "purple", "status-icon", NULL);
23972
90e0da03c053 theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23971
diff changeset
44 filename_full = g_build_filename(dir, "theme.xml", NULL);
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
45
23972
90e0da03c053 theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23971
diff changeset
46 if (g_file_test(filename_full, G_FILE_TEST_IS_REGULAR))
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
47 root_node = purple_xmlnode_from_file(dir, "theme.xml", "icon themes", "icon-theme-loader");
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
48
23972
90e0da03c053 theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23971
diff changeset
49 g_free(filename_full);
32957
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
50 if (root_node == NULL) {
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
51 g_free(dir);
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
52 return NULL;
32957
b1967ccba26c Change theme loaders to use the correct subdirectory now that the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27444
diff changeset
53 }
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
54
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
55 name = purple_xmlnode_get_attrib(root_node, "name");
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
56
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
57 if (name) {
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
58 /* Parse the tree */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
59 sub_node = purple_xmlnode_get_child(root_node, "description");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
60 data = purple_xmlnode_get_data(sub_node);
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
61
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
62 if (purple_xmlnode_get_attrib(root_node, "name") != NULL) {
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
63 theme = g_object_new(PIDGIN_TYPE_STATUS_ICON_THEME,
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
64 "type", "status-icon",
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
65 "name", name,
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
66 "author", purple_xmlnode_get_attrib(root_node, "author"),
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
67 "image", purple_xmlnode_get_attrib(root_node, "image"),
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
68 "directory", dir,
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
69 "description", data, NULL);
25875
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
70
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
71 sub_node = purple_xmlnode_get_child(root_node, "icon");
23972
90e0da03c053 theme loader cleanup, and remove a few warnings
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23971
diff changeset
72
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
73 while (sub_node) {
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
74 pidgin_icon_theme_set_icon(theme,
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
75 purple_xmlnode_get_attrib(sub_node, "id"),
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
76 purple_xmlnode_get_attrib(sub_node, "file"));
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
77 sub_node = purple_xmlnode_get_next_twin(sub_node);
27444
21add455833a Better error checking on the theme loaders.
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 27328
diff changeset
78 }
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
79 }
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
80 }
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
81
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 32957
diff changeset
82 purple_xmlnode_free(root_node);
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
83 g_free(data);
23971
9764690b14f2 Changed PurpleTheme build function to only return PurpleTheme*
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23967
diff changeset
84 return PURPLE_THEME(theme);
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
85 }
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
86
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
87 /******************************************************************************
25875
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
88 * GObject Stuff
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
89 *****************************************************************************/
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
90
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
91 static void
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
92 pidgin_icon_theme_loader_class_init (PidginIconThemeLoaderClass *klass)
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
93 {
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
94 PurpleThemeLoaderClass *loader_klass = PURPLE_THEME_LOADER_CLASS(klass);
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
95
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
96 loader_klass->purple_theme_loader_build = pidgin_icon_loader_build;
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
97 }
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
98
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
99
25875
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
100 GType
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
101 pidgin_icon_theme_loader_get_type (void)
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
102 {
25875
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
103 static GType type = 0;
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
104 if (type == 0) {
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
105 static const GTypeInfo info = {
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
106 sizeof(PidginIconThemeLoaderClass),
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
107 NULL, /* base_init */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
108 NULL, /* base_finalize */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
109 (GClassInitFunc)pidgin_icon_theme_loader_class_init, /* class_init */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
110 NULL, /* class_finalize */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
111 NULL, /* class_data */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
112 sizeof (PidginIconThemeLoader),
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
113 0, /* n_preallocs */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
114 NULL, /* instance_init */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
115 NULL, /* value table */
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
116 };
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
117 type = g_type_register_static (PURPLE_TYPE_THEME_LOADER,
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
118 "PidginIconThemeLoader", &info, 0);
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
119 }
a98b16817658 Lots of minor whitespace and comment changes:
Mark Doliner <markdoliner@pidgin.im>
parents: 24377
diff changeset
120 return type;
23965
13cd30de531b Add the icon theme files, and re-work some things
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
diff changeset
121 }

mercurial