pidgin/plugins/themeedit-icon.c

Wed, 21 Sep 2011 06:45:26 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Wed, 21 Sep 2011 06:45:26 +0000
changeset 32575
eb4fc932fae9
parent 31102
0687ddc92313
child 34706
02cb08146888
permissions
-rw-r--r--

Apply conversation theme when opening the GTK conversation. All the
parsing stuff was moved out of the theme code and into the conversation
code.

Someone (not me!) needs to check the code I commented out and see if
we really need that stuff (and then port it to WebKit/styling).

We also need to determine where to place Template.html and the rest
of our (not-yet-written) default theme.

26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 /* Pidgin
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
2 *
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
3 * Pidgin is the legal property of its developers, whose names are too numerous
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
5 * source distribution.
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
6 *
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
11 *
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
16 *
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
20 */
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
22 #include "pidgin.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 #include "debug.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
24 #include "version.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 #include "theme-manager.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28 #include "gtkblist.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 #include "gtkblist-theme.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
30 #include "gtkutils.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31 #include "gtkplugin.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33 #include "pidginstock.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34 #include "themeedit-icon.h"
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
35
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
36 typedef enum
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
37 {
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
38 FLAG_SIZE_MICROSOPIC = 0,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
39 FLAG_SIZE_EXTRA_SMALL,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
40 FLAG_SIZE_SMALL,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
41 FLAG_SIZE_MEDIUM,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
42 FLAG_SIZE_LARGE,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
43 FLAG_SIZE_HUGE,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
44 FLAG_SIZE_NONE,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
45 } SectionFlags;
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
46
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
47 #define SECTION_FLAGS_ALL (0x3f)
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
48
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49 static const char *stocksizes [] = {
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
50 [FLAG_SIZE_MICROSOPIC] = PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
51 [FLAG_SIZE_EXTRA_SMALL] = PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
52 [FLAG_SIZE_SMALL] = PIDGIN_ICON_SIZE_TANGO_SMALL,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
53 [FLAG_SIZE_MEDIUM] = PIDGIN_ICON_SIZE_TANGO_MEDIUM,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
54 [FLAG_SIZE_LARGE] = PIDGIN_ICON_SIZE_TANGO_LARGE,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
55 [FLAG_SIZE_HUGE] = PIDGIN_ICON_SIZE_TANGO_HUGE,
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
56 [FLAG_SIZE_NONE] = NULL,
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 };
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
59 static const struct options {
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60 const char *stockid;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
61 const char *text;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 } statuses[] = {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 {PIDGIN_STOCK_STATUS_AVAILABLE, N_("Available")},
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
64 {PIDGIN_STOCK_STATUS_AWAY, N_("Away")},
26814
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
65 {PIDGIN_STOCK_STATUS_XA, N_("Extended Away")},
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
66 {PIDGIN_STOCK_STATUS_BUSY, N_("Busy")},
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
67 {PIDGIN_STOCK_STATUS_OFFLINE, N_("Offline")},
26814
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
68 {PIDGIN_STOCK_STATUS_LOGIN, N_("Just logged in")},
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
69 {PIDGIN_STOCK_STATUS_LOGOUT, N_("Just logged out")},
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
70 {PIDGIN_STOCK_STATUS_PERSON, N_("Icon for Contact/\nIcon for Unknown person")},
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
71 {PIDGIN_STOCK_STATUS_CHAT, N_("Icon for Chat")},
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 {NULL, NULL}
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
73 }, chatemblems[] = {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
74 {PIDGIN_STOCK_STATUS_IGNORED, N_("Ignored")},
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
75 {PIDGIN_STOCK_STATUS_FOUNDER, N_("Founder")},
27985
7268e2b28571 Add a comment for these two strings. A translator asked about
Mark Doliner <markdoliner@pidgin.im>
parents: 27494
diff changeset
76 /* A user in a chat room who has special privileges. */
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
77 {PIDGIN_STOCK_STATUS_OPERATOR, N_("Operator")},
27985
7268e2b28571 Add a comment for these two strings. A translator asked about
Mark Doliner <markdoliner@pidgin.im>
parents: 27494
diff changeset
78 /* A half operator is someone who has a subset of the privileges
7268e2b28571 Add a comment for these two strings. A translator asked about
Mark Doliner <markdoliner@pidgin.im>
parents: 27494
diff changeset
79 that an operator has. */
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
80 {PIDGIN_STOCK_STATUS_HALFOP, N_("Half Operator")},
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
81 {PIDGIN_STOCK_STATUS_VOICE, N_("Voice")},
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
82 {NULL, NULL}
26815
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
83 }, dialogicons[] = {
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
84 {PIDGIN_STOCK_DIALOG_AUTH, N_("Authorization dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
85 {PIDGIN_STOCK_DIALOG_ERROR, N_("Error dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
86 {PIDGIN_STOCK_DIALOG_INFO, N_("Information dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
87 {PIDGIN_STOCK_DIALOG_MAIL, N_("Mail dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
88 {PIDGIN_STOCK_DIALOG_QUESTION, N_("Question dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
89 {PIDGIN_STOCK_DIALOG_WARNING, N_("Warning dialog")},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
90 {NULL, NULL},
8fc121fd720b Allow editing dialog icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26814
diff changeset
91 {PIDGIN_STOCK_DIALOG_COOL, N_("What kind of dialog is this?")},
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
92 };
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
93
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
94 static const struct {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
95 const char *heading;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
96 const struct options *options;
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
97 SectionFlags flags;
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
98 } sections[] = {
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
99 {N_("Status Icons"), statuses, SECTION_FLAGS_ALL ^ (1 << FLAG_SIZE_HUGE)},
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
100 {N_("Chatroom Emblems"), chatemblems, FLAG_SIZE_SMALL},
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
101 {N_("Dialog Icons"), dialogicons, (1 << FLAG_SIZE_EXTRA_SMALL) | (1 << FLAG_SIZE_HUGE)},
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
102 {NULL, NULL, 0}
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103 };
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105 static PidginStatusIconTheme *
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
106 create_icon_theme(GtkWidget *window)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
107 {
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
108 int s, i, j;
31102
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
109 const char *dirname = g_get_tmp_dir();
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
110 PidginStatusIconTheme *theme;
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
111 const char *author;
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
112 #ifndef _WIN32
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
113 author = getlogin();
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
114 #else
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
115 author = "user";
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
116 #endif
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
117 theme = g_object_new(PIDGIN_TYPE_STATUS_ICON_THEME, "type", "status-icon",
0687ddc92313 Build the "Pidgin Theme Editor" plugin on Windows too.
Daniel Atallah <datallah@pidgin.im>
parents: 27985
diff changeset
118 "author", author,
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
119 "directory", dirname,
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
120 NULL);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
121
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
122 for (s = 0; sections[s].heading; s++) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
123 GtkWidget *vbox = g_object_get_data(G_OBJECT(window), sections[s].heading);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
124 for (i = 0; sections[s].options[i].stockid; i++) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
125 GtkWidget *image = g_object_get_data(G_OBJECT(vbox), sections[s].options[i].stockid);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
126 GdkPixbuf *pixbuf = g_object_get_data(G_OBJECT(image), "pixbuf");
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
127 if (!pixbuf)
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
128 continue;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
129 pidgin_icon_theme_set_icon(PIDGIN_ICON_THEME(theme), sections[s].options[i].stockid,
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
130 sections[s].options[i].stockid);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
131 for (j = 0; stocksizes[j]; j++) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
132 int width, height;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
133 GtkIconSize iconsize;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
134 char size[8];
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
135 char *name;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
136 GdkPixbuf *scale;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
137 GError *error = NULL;
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
138
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
139 if (!(sections[s].flags & (1 << j)))
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
140 continue;
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
141
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
142 iconsize = gtk_icon_size_from_name(stocksizes[j]);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
143 gtk_icon_size_lookup(iconsize, &width, &height);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
144 g_snprintf(size, sizeof(size), "%d", width);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
146 if (i == 0) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
147 name = g_build_filename(dirname, size, NULL);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
148 purple_build_dir(name, S_IRUSR | S_IWUSR | S_IXUSR);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
149 g_free(name);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
150 }
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
151
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
152 name = g_build_filename(dirname, size, sections[s].options[i].stockid, NULL);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
153 scale = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
154 gdk_pixbuf_save(scale, name, "png", &error, "compression", "9", NULL);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
155 g_free(name);
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
156 g_object_unref(G_OBJECT(scale));
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
157 if (error)
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
158 g_error_free(error);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
159 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
160 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
161 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162 return theme;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
163 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
164
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 static void
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166 use_icon_theme(GtkWidget *w, GtkWidget *window)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 {
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
168 /* I don't quite understand the icon-theme stuff. For example, I don't
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
169 * know why PidginIconTheme needs to be abstract, or how PidginStatusIconTheme
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
170 * would be different from other PidginIconTheme's (e.g. PidginStockIconTheme)
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
171 * etc., but anyway, this works for now.
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
172 *
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
173 * Here's an interesting note: A PidginStatusIconTheme can be used for both
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
174 * stock and status icons. Like I said, I don't quite know how they could be
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
175 * different. So I am going to just keep it as it is, for now anyway, until I
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
176 * have the time to dig through this, or someone explains this stuff to me
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
177 * clearly.
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
178 * -- Sad
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
179 */
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180 PidginStatusIconTheme *theme = create_icon_theme(window);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181 pidgin_stock_load_status_icon_theme(PIDGIN_STATUS_ICON_THEME(theme));
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
182 pidgin_stock_load_stock_icon_theme((PidginStockIconTheme *)theme);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
183 pidgin_blist_refresh(purple_get_blist());
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 g_object_unref(theme);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186
26841
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
187 #ifdef NOT_SADRUL
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188 static void
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 save_icon_theme(GtkWidget *w, GtkWidget *window)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191 /* TODO: SAVE! */
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
192 gtk_widget_destroy(window);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 }
26841
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
194 #endif
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
195
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
196 static void
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
197 close_icon_theme(GtkWidget *w, GtkWidget *window)
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
198 {
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
199 gtk_widget_destroy(window);
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
200 }
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
201
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
202 static void
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 stock_icon_selected(const char *filename, gpointer image)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 GError *error = NULL;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206 GdkPixbuf *scale;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207 int i;
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
208 GdkPixbuf *pixbuf;
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
209
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
210 if (!filename)
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
211 return;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
212
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
213 pixbuf = gdk_pixbuf_new_from_file(filename, &error);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 if (error || !pixbuf) {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 purple_debug_error("theme-editor-icon", "Unable to load icon file '%s' (%s)\n",
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216 filename, error ? error->message : "Reason unknown");
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
217 if (error)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
218 g_error_free(error);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219 return;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
221
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
222 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223 gtk_image_set_from_pixbuf(GTK_IMAGE(image), scale);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 g_object_unref(G_OBJECT(scale));
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226 /* Update the size previews */
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227 for (i = 0; stocksizes[i]; i++) {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228 int width, height;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229 GtkIconSize iconsize;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230 GtkWidget *prev = g_object_get_data(G_OBJECT(image), stocksizes[i]);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
231 if (!prev)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 continue;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 iconsize = gtk_icon_size_from_name(stocksizes[i]);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
234 gtk_icon_size_lookup(iconsize, &width, &height);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235 scale = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 gtk_image_set_from_pixbuf(GTK_IMAGE(prev), scale);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 g_object_unref(G_OBJECT(scale));
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
238 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
239
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 /* Save the original pixbuf so we can use it for resizing later */
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
241 g_object_set_data_full(G_OBJECT(image), "pixbuf", pixbuf,
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
242 (GDestroyNotify)g_object_unref);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
245 static gboolean
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
246 change_stock_image(GtkWidget *widget, GdkEventButton *event, GtkWidget *image)
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
247 {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
248 GtkWidget *win = pidgin_buddy_icon_chooser_new(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
249 stock_icon_selected, image);
27494
7f274eff98d0 Change the name of the file selector from "Buddy Icon" to the name of the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26869
diff changeset
250 gtk_window_set_title(GTK_WINDOW(win),
7f274eff98d0 Change the name of the file selector from "Buddy Icon" to the name of the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26869
diff changeset
251 g_object_get_data(G_OBJECT(image), "localized-name"));
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
252 gtk_widget_show_all(win);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
253
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
254 return TRUE;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
256
26869
210aa82531fe Fix two warnings in the theme editor plugin
Paul Aurich <darkrain42@pidgin.im>
parents: 26841
diff changeset
257 void pidgin_icon_theme_edit(PurplePluginAction *unused)
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258 {
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
259 GtkWidget *dialog;
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
260 GtkWidget *box, *vbox;
26814
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
261 GtkWidget *notebook;
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 GtkSizeGroup *sizegroup;
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
263 int s, i, j;
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
264 dialog = pidgin_create_dialog(_("Pidgin Icon Theme Editor"), 0, "theme-editor-icon", FALSE);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
265 box = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(dialog), FALSE, PIDGIN_HIG_BOX_SPACE);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266
26814
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
267 notebook = gtk_notebook_new();
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
268 gtk_box_pack_start(GTK_BOX(box), notebook, TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
271 for (s = 0; sections[s].heading; s++) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
272 const char *heading = sections[s].heading;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
273
26814
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
274 box = gtk_vbox_new(FALSE, 0);
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
275 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, gtk_label_new(heading));
7a6522d6f9e5 Add some more status emblems, and since the dialog is too long, use a
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26813
diff changeset
276
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
277 vbox = pidgin_make_frame(box, heading);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
278 g_object_set_data(G_OBJECT(dialog), heading, vbox);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
279
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
280 for (i = 0; sections[s].options[i].stockid; i++) {
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
281 const char *id = sections[s].options[i].stockid;
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
282 const char *text = _(sections[s].options[i].text);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
283
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
284 GtkWidget *hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
285 GtkWidget *label = gtk_label_new(text);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
286 GtkWidget *image = gtk_image_new_from_stock(id,
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
287 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
288 GtkWidget *ebox = gtk_event_box_new();
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
289 gtk_container_add(GTK_CONTAINER(ebox), image);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
290 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
292 g_signal_connect(G_OBJECT(ebox), "button-press-event", G_CALLBACK(change_stock_image), image);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
293 g_object_set_data(G_OBJECT(image), "property-name", (gpointer)id);
27494
7f274eff98d0 Change the name of the file selector from "Buddy Icon" to the name of the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26869
diff changeset
294 g_object_set_data(G_OBJECT(image), "localized-name", (gpointer)text);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
295
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
296 gtk_size_group_add_widget(sizegroup, label);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
297 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
298 gtk_box_pack_start(GTK_BOX(hbox), ebox, FALSE, FALSE, 0);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
300 for (j = 0; stocksizes[j]; j++) {
26816
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
301 GtkWidget *sh;
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
302
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
303 if (!(sections[s].flags & (1 << j)))
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
304 continue;
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
305
821c77a9ba20 Show preview of only the supported sizes for each class of icons.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26815
diff changeset
306 sh = gtk_image_new_from_stock(id, gtk_icon_size_from_name(stocksizes[j]));
26813
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
307 gtk_box_pack_start(GTK_BOX(hbox), sh, FALSE, FALSE, 0);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
308 g_object_set_data(G_OBJECT(image), stocksizes[j], sh);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
309 }
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
310
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
311 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
312
c1a058a2466e Make it possible to load non-status icons using a PidginStockIconTheme.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26812
diff changeset
313 g_object_set_data(G_OBJECT(vbox), id, image);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
314 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316
26841
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
317 #ifdef NOT_SADRUL
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
318 pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_SAVE, G_CALLBACK(save_icon_theme), dialog);
26841
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
319 #endif
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
320 pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_APPLY, G_CALLBACK(use_icon_theme), dialog);
26841
4de3b5aa28c5 Disable the 'Save' buttons since they don't do nothing yet, man.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 26816
diff changeset
321 pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, G_CALLBACK(close_icon_theme), dialog);
26811
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
322 gtk_widget_show_all(dialog);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
323 g_object_unref(sizegroup);
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
324 }
72045103fad1 A status-icon theme editor.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325

mercurial