finch/libgnt/gntutils.c

Wed, 23 Apr 2014 12:35:57 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Wed, 23 Apr 2014 12:35:57 +0200
changeset 35883
44327a195f54
parent 35494
e631108a5464
child 38984
70dbe96fd686
permissions
-rw-r--r--

cross-win32: finch: keep your files in config dir

35456
821aa4bcb6fa Fix a bunch of gtk-doc warnings in finch
Ankit Vani <a@nevitus.org>
parents: 30494
diff changeset
1 /*
17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
2 * GNT - The GLib Ncurses Toolkit
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
3 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
4 * GNT is the legal property of its developers, whose names are too numerous
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
6 * source distribution.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
7 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
8 * This library is free software; you can redistribute it and/or modify
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
9 * it under the terms of the GNU General Public License as published by
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
11 * (at your option) any later version.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
12 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
13 * This program is distributed in the hope that it will be useful,
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
16 * GNU General Public License for more details.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
17 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
18 * You should have received a copy of the GNU General Public License
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19561
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
21 */
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
22
29106
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 28632
diff changeset
23 #include "config.h"
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 28632
diff changeset
24
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
25 #include "gntinternal.h"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
26 #undef GNT_LOG_DOMAIN
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
27 #define GNT_LOG_DOMAIN "Utils"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
28
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
29 #include "gntbutton.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
30 #include "gntcheckbox.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
31 #include "gntcombobox.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
32 #include "gntentry.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
33 #include "gntlabel.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
34 #include "gntline.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
35 #include "gnttextview.h"
16047
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
36 #include "gnttree.h"
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
37 #include "gntutils.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
38 #include "gntwindow.h"
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
40 #include <stdarg.h>
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
41 #include <stdlib.h>
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
42 #include <string.h>
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
43
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
44 #ifndef NO_LIBXML
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
45 #include <libxml/parser.h>
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
46 #include <libxml/tree.h>
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
47 #endif
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
48
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49 void gnt_util_get_text_bound(const char *text, int *width, int *height)
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 {
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51 const char *s = text, *last;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
52 int count = 1, max = 0;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
53 int len;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 /* XXX: ew ... everyone look away */
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56 last = s;
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
57 if (s)
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58 {
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
59 while (*s)
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60 {
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
61 if (*s == '\n' || *s == '\r')
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
62 {
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
63 count++;
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
64 len = gnt_util_onscreen_width(last, s);
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
65 if (max < len)
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
66 max = len;
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
67 last = s + 1;
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
68 }
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
69 s = g_utf8_next_char(s);
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 }
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
71
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
72 len = gnt_util_onscreen_width(last, s);
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
73 if (max < len)
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
74 max = len;
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75 }
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
76
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
77 if (height)
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78 *height = count;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 if (width)
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 *width = max + (count > 1);
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81 }
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
82
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
83 int gnt_util_onscreen_width(const char *start, const char *end)
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
84 {
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
85 int width = 0;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
86
14539
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
87 if (end == NULL)
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
88 end = start + strlen(start);
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
89
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
90 while (start < end) {
14481
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
91 width += g_unichar_iswide(g_utf8_get_char(start)) ? 2 : 1;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
92 start = g_utf8_next_char(start);
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
93 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
94 return width;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
95 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
96
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
97 const char *gnt_util_onscreen_width_to_pointer(const char *string, int len, int *w)
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
98 {
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
99 int size;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
100 int width = 0;
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
101 const char *str = string;
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
102
14776
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
103 if (len <= 0) {
14886
9f76d3a61aa7 [gaim-migrate @ 17591]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14855
diff changeset
104 len = gnt_util_onscreen_width(string, NULL);
14776
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
105 }
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
106
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
107 while (width < len && *str) {
14481
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
108 size = g_unichar_iswide(g_utf8_get_char(str)) ? 2 : 1;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
109 if (width + size > len)
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
110 break;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
111 str = g_utf8_next_char(str);
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
112 width += size;
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
113 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
114 if (w)
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
115 *w = width;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
116 return str;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
117 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
118
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
119 char *gnt_util_onscreen_fit_string(const char *string, int maxw)
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
120 {
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
121 const char *start, *end;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
122 GString *str;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
123
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
124 if (maxw <= 0)
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
125 maxw = getmaxx(stdscr) - 4;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
126
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
127 start = string;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
128 str = g_string_new(NULL);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
129
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
130 while (*start) {
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
131 if ((end = strchr(start, '\n')) != NULL ||
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
132 (end = strchr(start, '\r')) != NULL) {
14486
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
133 if (gnt_util_onscreen_width(start, end) > maxw)
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
134 end = NULL;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
135 }
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
136 if (end == NULL)
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
137 end = gnt_util_onscreen_width_to_pointer(start, maxw, NULL);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
138 str = g_string_append_len(str, start, end - start);
14486
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
139 if (*end) {
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
140 str = g_string_append_c(str, '\n');
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
141 if (*end == '\n' || *end == '\r')
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
142 end++;
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
143 }
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
144 start = end;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
145 }
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
146 return g_string_free(str, FALSE);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
147 }
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
148
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
149 struct duplicate_fns
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
150 {
35494
e631108a5464 Fix namespace issues in libgnt and finch.
Ankit Vani <a@nevitus.org>
parents: 35456
diff changeset
151 GntDuplicateFunc key_dup;
e631108a5464 Fix namespace issues in libgnt and finch.
Ankit Vani <a@nevitus.org>
parents: 35456
diff changeset
152 GntDuplicateFunc value_dup;
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
153 GHashTable *table;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
154 };
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
155
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
156 static void
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
157 duplicate_values(gpointer key, gpointer value, gpointer data)
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
158 {
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
159 struct duplicate_fns *fns = data;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
160 g_hash_table_insert(fns->table, fns->key_dup ? fns->key_dup(key) : key,
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
161 fns->value_dup ? fns->value_dup(value) : value);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
162 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
163
35494
e631108a5464 Fix namespace issues in libgnt and finch.
Ankit Vani <a@nevitus.org>
parents: 35456
diff changeset
164 GHashTable *gnt_hash_table_duplicate(GHashTable *src, GHashFunc hash,
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
165 GEqualFunc equal, GDestroyNotify key_d, GDestroyNotify value_d,
35494
e631108a5464 Fix namespace issues in libgnt and finch.
Ankit Vani <a@nevitus.org>
parents: 35456
diff changeset
166 GntDuplicateFunc key_dup, GntDuplicateFunc value_dup)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
167 {
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
168 GHashTable *dest = g_hash_table_new_full(hash, equal, key_d, value_d);
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
169 struct duplicate_fns fns = {key_dup, value_dup, dest};
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
170 g_hash_table_foreach(src, duplicate_values, &fns);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
171 return dest;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
172 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
173
15220
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
174 gboolean gnt_boolean_handled_accumulator(GSignalInvocationHint *ihint,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
175 GValue *return_accu,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
176 const GValue *handler_return,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
177 gpointer dummy)
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
178 {
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
179 gboolean continue_emission;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
180 gboolean signal_handled;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
181
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
182 signal_handled = g_value_get_boolean (handler_return);
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
183 g_value_set_boolean (return_accu, signal_handled);
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
184 continue_emission = !signal_handled;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
185
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
186 return continue_emission;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
187 }
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
188
16047
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
189 typedef struct {
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
190 GHashTable *hash;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
191 GntTree *tree;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
192 } BindingView;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
193
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
194 static void
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
195 add_binding(gpointer key, gpointer value, gpointer data)
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
196 {
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
197 BindingView *bv = data;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
198 GntBindableActionParam *act = value;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
199 const char *name = g_hash_table_lookup(bv->hash, act->action);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
200 if (name && *name) {
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
201 const char *k = gnt_key_lookup(key);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
202 if (!k)
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
203 k = key;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
204 gnt_tree_add_row_after(bv->tree, (gpointer)k,
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
205 gnt_tree_create_row(bv->tree, k, name), NULL, NULL);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
206 }
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
207 }
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
208
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
209 static void
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
210 add_action(gpointer key, gpointer value, gpointer data)
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
211 {
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
212 BindingView *bv = data;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
213 g_hash_table_insert(bv->hash, value, key);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
214 }
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
215
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
216 GntWidget *gnt_widget_bindings_view(GntWidget *widget)
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
217 {
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
218 GntBindable *bind = GNT_BINDABLE(widget);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
219 GntWidget *tree = gnt_tree_new_with_columns(2);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
220 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bind));
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
221 GHashTable *hash = g_hash_table_new(g_direct_hash, g_direct_equal);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
222 BindingView bv = {hash, GNT_TREE(tree)};
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
223
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
224 gnt_tree_set_compare_func(bv.tree, (GCompareFunc)g_utf8_collate);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
225 g_hash_table_foreach(klass->actions, add_action, &bv);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
226 g_hash_table_foreach(klass->bindings, add_binding, &bv);
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
227 if (GNT_TREE(tree)->list == NULL) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
228 gnt_widget_destroy(tree);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
229 tree = NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
230 } else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
231 gnt_tree_adjust_columns(bv.tree);
16047
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
232 g_hash_table_destroy(hash);
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
233
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
234 return tree;
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
235 }
03880dc14852 Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15886
diff changeset
236
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
237 #ifndef NO_LIBXML
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
238 static GntWidget *
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
239 gnt_widget_from_xmlnode(xmlNode *node, GntWidget **data[], int max)
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
240 {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
241 GntWidget *widget = NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
242 char *name;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
243 char *id, *prop, *content;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
244 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
245
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
246 if (node == NULL || node->name == NULL || node->type != XML_ELEMENT_NODE)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
247 return NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
248
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
249 name = (char*)node->name;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
250 content = (char*)xmlNodeGetContent(node);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
251 if (strcmp(name + 1, "window") == 0 || strcmp(name + 1, "box") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
252 xmlNode *ch;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
253 char *title;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
254 gboolean vert = (*name == 'v');
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
255
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
256 if (name[1] == 'w')
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
257 widget = gnt_window_box_new(FALSE, vert);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
258 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
259 widget = gnt_box_new(FALSE, vert);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
260
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
261 title = (char*)xmlGetProp(node, (xmlChar*)"title");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
262 if (title) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
263 gnt_box_set_title(GNT_BOX(widget), title);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
264 xmlFree(title);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
265 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
266
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
267 prop = (char*)xmlGetProp(node, (xmlChar*)"fill");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
268 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
269 if (sscanf(prop, "%d", &val) == 1)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
270 gnt_box_set_fill(GNT_BOX(widget), !!val);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
271 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
272 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
273
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
274 prop = (char*)xmlGetProp(node, (xmlChar*)"align");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
275 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
276 if (sscanf(prop, "%d", &val) == 1)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
277 gnt_box_set_alignment(GNT_BOX(widget), val);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
278 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
279 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
280
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
281 prop = (char*)xmlGetProp(node, (xmlChar*)"pad");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
282 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
283 if (sscanf(prop, "%d", &val) == 1)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
284 gnt_box_set_pad(GNT_BOX(widget), val);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
285 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
286 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
287
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
288 for (ch = node->children; ch; ch=ch->next)
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
289 gnt_box_add_widget(GNT_BOX(widget), gnt_widget_from_xmlnode(ch, data, max));
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
290 } else if (strcmp(name, "button") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
291 widget = gnt_button_new(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
292 } else if (strcmp(name, "label") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
293 widget = gnt_label_new(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
294 } else if (strcmp(name, "entry") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
295 widget = gnt_entry_new(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
296 } else if (strcmp(name, "combobox") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
297 widget = gnt_combo_box_new();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
298 } else if (strcmp(name, "checkbox") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
299 widget = gnt_check_box_new(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
300 } else if (strcmp(name, "tree") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
301 widget = gnt_tree_new();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
302 } else if (strcmp(name, "textview") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
303 widget = gnt_text_view_new();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
304 } else if (strcmp(name + 1, "line") == 0) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
305 widget = gnt_line_new(*name == 'v');
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
306 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
307
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
308 xmlFree(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
309
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
310 if (widget == NULL) {
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
311 gnt_warning("Invalid widget name %s", name);
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
312 return NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
313 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
314
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
315 id = (char*)xmlGetProp(node, (xmlChar*)"id");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
316 if (id) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
317 int i;
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
318 if (sscanf(id, "%d", &i) == 1 && i >= 0 && i < max) {
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
319 *data[i] = widget;
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
320 xmlFree(id);
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
321 }
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
322 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
323
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
324 prop = (char*)xmlGetProp(node, (xmlChar*)"border");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
325 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
326 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
327 if (sscanf(prop, "%d", &val) == 1) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
328 if (val)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
329 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_NO_BORDER);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
330 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
331 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
332 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
333 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
334 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
335
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
336 prop = (char*)xmlGetProp(node, (xmlChar*)"shadow");
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
337 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
338 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
339 if (sscanf(prop, "%d", &val) == 1) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
340 if (val)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
341 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_NO_BORDER);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
342 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
343 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
344 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
345 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
346 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
347
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
348 return widget;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
349 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
350 #endif
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
351
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
352 void gnt_util_parse_widgets(const char *string, int num, ...)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
353 {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
354 #ifndef NO_LIBXML
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
355 xmlParserCtxtPtr ctxt;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
356 xmlDocPtr doc;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
357 xmlNodePtr node;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
358 va_list list;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
359 GntWidget ***data;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
360 int id;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
361
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
362 ctxt = xmlNewParserCtxt();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
363 doc = xmlCtxtReadDoc(ctxt, (xmlChar*)string, NULL, NULL, XML_PARSE_NOBLANKS);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
364
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
365 data = g_new0(GntWidget **, num);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
366
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
367 va_start(list, num);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
368 for (id = 0; id < num; id++)
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
369 data[id] = va_arg(list, gpointer);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
370
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
371 node = xmlDocGetRootElement(doc);
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
372 gnt_widget_from_xmlnode(node, data, num);
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
373
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
374 xmlFreeDoc(doc);
28632
a9654dbd2a0e Free up the parsers.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24822
diff changeset
375 xmlFreeParserCtxt(ctxt);
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
376 va_end(list);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
377 g_free(data);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
378 #endif
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
379 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
380
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
381 #ifndef NO_LIBXML
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
382 static void
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
383 util_parse_html_to_tv(xmlNode *node, GntTextView *tv, GntTextFormatFlags flag)
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
384 {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
385 const char *name;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
386 char *content;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
387 xmlNode *ch;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
388 char *url = NULL;
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
389 gboolean insert_nl_s = FALSE, insert_nl_e = FALSE;
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
390
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
391 if (node == NULL || node->name == NULL || node->type != XML_ELEMENT_NODE)
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
392 return;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
393
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
394 name = (char*)node->name;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
395 if (g_ascii_strcasecmp(name, "b") == 0 ||
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
396 g_ascii_strcasecmp(name, "strong") == 0 ||
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
397 g_ascii_strcasecmp(name, "i") == 0 ||
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
398 g_ascii_strcasecmp(name, "blockquote") == 0) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
399 flag |= GNT_TEXT_FLAG_BOLD;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
400 } else if (g_ascii_strcasecmp(name, "u") == 0) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
401 flag |= GNT_TEXT_FLAG_UNDERLINE;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
402 } else if (g_ascii_strcasecmp(name, "br") == 0) {
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
403 insert_nl_e = TRUE;
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
404 } else if (g_ascii_strcasecmp(name, "a") == 0) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
405 flag |= GNT_TEXT_FLAG_UNDERLINE;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
406 url = (char *)xmlGetProp(node, (xmlChar*)"href");
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
407 } else if (g_ascii_strcasecmp(name, "h1") == 0 ||
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
408 g_ascii_strcasecmp(name, "h2") == 0 ||
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
409 g_ascii_strcasecmp(name, "h3") == 0 ||
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
410 g_ascii_strcasecmp(name, "h4") == 0 ||
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
411 g_ascii_strcasecmp(name, "h5") == 0 ||
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
412 g_ascii_strcasecmp(name, "h6") == 0) {
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
413 insert_nl_s = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
414 insert_nl_e = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
415 } else if (g_ascii_strcasecmp(name, "title") == 0) {
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
416 insert_nl_s = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
417 insert_nl_e = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
418 flag |= GNT_TEXT_FLAG_BOLD | GNT_TEXT_FLAG_UNDERLINE;
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
419 } else {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
420 /* XXX: Process other possible tags */
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
421 }
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
422
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
423 if (insert_nl_s)
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
424 gnt_text_view_append_text_with_flags(tv, "\n", flag);
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
425
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
426 for (ch = node->children; ch; ch = ch->next) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
427 if (ch->type == XML_ELEMENT_NODE) {
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
428 util_parse_html_to_tv(ch, tv, flag);
30494
0c6b66dc9b9a Fix parsing XHTML.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29200
diff changeset
429 } else if (ch->type == XML_TEXT_NODE) {
0c6b66dc9b9a Fix parsing XHTML.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29200
diff changeset
430 content = (char*)xmlNodeGetContent(ch);
0c6b66dc9b9a Fix parsing XHTML.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29200
diff changeset
431 gnt_text_view_append_text_with_flags(tv, content, flag);
0c6b66dc9b9a Fix parsing XHTML.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29200
diff changeset
432 xmlFree(content);
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
433 }
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
434 }
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
435
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
436 if (url) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
437 char *href = g_strdup_printf(" (%s)", url);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
438 gnt_text_view_append_text_with_flags(tv, href, flag);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
439 g_free(href);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
440 xmlFree(url);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
441 }
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
442
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
443 if (insert_nl_e)
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
444 gnt_text_view_append_text_with_flags(tv, "\n", flag);
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
445 }
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
446 #endif
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
447
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
448 gboolean gnt_util_parse_xhtml_to_textview(const char *string, GntTextView *tv)
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
449 {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
450 #ifdef NO_LIBXML
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
451 return FALSE;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
452 #else
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
453 xmlParserCtxtPtr ctxt;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
454 xmlDocPtr doc;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
455 xmlNodePtr node;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
456 GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
457 gboolean ret = FALSE;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
458
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
459 ctxt = xmlNewParserCtxt();
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
460 doc = xmlCtxtReadDoc(ctxt, (xmlChar*)string, NULL, NULL, XML_PARSE_NOBLANKS | XML_PARSE_RECOVER);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
461 if (doc) {
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
462 node = xmlDocGetRootElement(doc);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
463 util_parse_html_to_tv(node, tv, flag);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
464 xmlFreeDoc(doc);
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
465 ret = TRUE;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
466 }
28632
a9654dbd2a0e Free up the parsers.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24822
diff changeset
467 xmlFreeParserCtxt(ctxt);
19456
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
468 return ret;
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
469 #endif
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
470 }
a37d7ba493d4 Add support to parse and add XHTML in a textview. This we can use for logs,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19235
diff changeset
471
18763
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
472 /* Setup trigger widget */
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
473 typedef struct {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
474 char *text;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
475 GntWidget *button;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
476 } TriggerButton;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
477
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
478 static void
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
479 free_trigger_button(TriggerButton *b)
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
480 {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
481 g_free(b->text);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
482 g_free(b);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
483 }
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
484
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
485 static gboolean
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
486 key_pressed(GntWidget *widget, const char *text, TriggerButton *trig)
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
487 {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
488 if (text && trig->text &&
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
489 strcmp(text, trig->text) == 0) {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
490 gnt_widget_activate(trig->button);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
491 return TRUE;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
492 }
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
493 return FALSE;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
494 }
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
495
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
496 void gnt_util_set_trigger_widget(GntWidget *wid, const char *text, GntWidget *button)
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
497 {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
498 TriggerButton *tb = g_new0(TriggerButton, 1);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
499 tb->text = g_strdup(text);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
500 tb->button = button;
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
501 g_signal_connect(G_OBJECT(wid), "key_pressed", G_CALLBACK(key_pressed), tb);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
502 g_signal_connect_swapped(G_OBJECT(button), "destroy", G_CALLBACK(free_trigger_button), tb);
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
503 }

mercurial