finch/libgnt/gntutils.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 24822
d7774462f2ba
child 28632
a9654dbd2a0e
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 16187
diff changeset
1 /**
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
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
23 #include "gntinternal.h"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
24 #undef GNT_LOG_DOMAIN
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
25 #define GNT_LOG_DOMAIN "Utils"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
26
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
27 #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
28 #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
29 #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
30 #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
31 #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
32 #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
33 #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
34 #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
35 #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
36 #include "gntwindow.h"
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
37
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
38 #include "config.h"
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
39
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
14479
ab5407a042eb [gaim-migrate @ 17125]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14428
diff changeset
49 #include "config.h"
ab5407a042eb [gaim-migrate @ 17125]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14428
diff changeset
50
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51 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
52 {
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
53 const char *s = text, *last;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54 int count = 1, max = 0;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 int len;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 /* XXX: ew ... everyone look away */
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58 last = s;
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
59 if (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 while (*s)
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 {
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
63 if (*s == '\n' || *s == '\r')
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
64 {
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
65 count++;
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
66 len = gnt_util_onscreen_width(last, s);
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
67 if (max < len)
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
68 max = len;
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
69 last = s + 1;
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
70 }
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
71 s = g_utf8_next_char(s);
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 }
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
73
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
74 len = gnt_util_onscreen_width(last, s);
14122
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
75 if (max < len)
daf2aaa61829 [gaim-migrate @ 16678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14121
diff changeset
76 max = len;
14121
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
77 }
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 if (height)
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 *height = count;
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81 if (width)
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
82 *width = max + (count > 1);
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
83 }
3d8804b82150 [gaim-migrate @ 16674]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
84
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
85 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
86 {
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
87 int width = 0;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
88
14539
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
89 if (end == NULL)
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
90 end = start + strlen(start);
7d5528c864a1 [gaim-migrate @ 17195]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14486
diff changeset
91
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
92 while (start < end) {
14481
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
93 width += g_unichar_iswide(g_utf8_get_char(start)) ? 2 : 1;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
94 start = g_utf8_next_char(start);
14373
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 return width;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
97 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
98
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
99 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
100 {
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
101 int size;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
102 int width = 0;
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14481
diff changeset
103 const char *str = string;
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
104
14776
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
105 if (len <= 0) {
14886
9f76d3a61aa7 [gaim-migrate @ 17591]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14855
diff changeset
106 len = gnt_util_onscreen_width(string, NULL);
14776
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
107 }
f34432aa0233 [gaim-migrate @ 17468]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14539
diff changeset
108
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
109 while (width < len && *str) {
14481
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
110 size = g_unichar_iswide(g_utf8_get_char(str)) ? 2 : 1;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
111 if (width + size > len)
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
112 break;
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
113 str = g_utf8_next_char(str);
708344e48b1f [gaim-migrate @ 17127]
Ethan Blanton <elb@pidgin.im>
parents: 14480
diff changeset
114 width += size;
14373
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
115 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
116 if (w)
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
117 *w = width;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
118 return str;
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
119 }
609c902d20f5 [gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14122
diff changeset
120
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
121 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
122 {
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
123 const char *start, *end;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
124 GString *str;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
125
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
126 if (maxw <= 0)
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
127 maxw = getmaxx(stdscr) - 4;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
128
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
129 start = string;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
130 str = g_string_new(NULL);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
131
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
132 while (*start) {
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
133 if ((end = strchr(start, '\n')) != NULL ||
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
134 (end = strchr(start, '\r')) != NULL) {
14486
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
135 if (gnt_util_onscreen_width(start, end) > maxw)
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
136 end = NULL;
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
137 }
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
138 if (end == NULL)
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
139 end = gnt_util_onscreen_width_to_pointer(start, maxw, NULL);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
140 str = g_string_append_len(str, start, end - start);
14486
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
141 if (*end) {
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
142 str = g_string_append_c(str, '\n');
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
143 if (*end == '\n' || *end == '\r')
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
144 end++;
002fe2ca0159 [gaim-migrate @ 17132]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14485
diff changeset
145 }
14485
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
146 start = end;
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 return g_string_free(str, FALSE);
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
149 }
4fc80c5c8c84 [gaim-migrate @ 17131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
150
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
151 struct duplicate_fns
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
152 {
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
153 GDupFunc key_dup;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
154 GDupFunc value_dup;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
155 GHashTable *table;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
156 };
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
157
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
158 static void
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
159 duplicate_values(gpointer key, gpointer value, gpointer data)
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
160 {
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
161 struct duplicate_fns *fns = data;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
162 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
163 fns->value_dup ? fns->value_dup(value) : value);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
164 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
165
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
166 GHashTable *g_hash_table_duplicate(GHashTable *src, GHashFunc hash,
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
167 GEqualFunc equal, GDestroyNotify key_d, GDestroyNotify value_d,
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
168 GDupFunc key_dup, GDupFunc value_dup)
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
169 {
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
170 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
171 struct duplicate_fns fns = {key_dup, value_dup, dest};
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15220
diff changeset
172 g_hash_table_foreach(src, duplicate_values, &fns);
14855
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
173 return dest;
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
174 }
84c869823944 [gaim-migrate @ 17558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14776
diff changeset
175
15220
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
176 gboolean gnt_boolean_handled_accumulator(GSignalInvocationHint *ihint,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
177 GValue *return_accu,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
178 const GValue *handler_return,
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
179 gpointer dummy)
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
180 {
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
181 gboolean continue_emission;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
182 gboolean signal_handled;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
183
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
184 signal_handled = g_value_get_boolean (handler_return);
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
185 g_value_set_boolean (return_accu, signal_handled);
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
186 continue_emission = !signal_handled;
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 return continue_emission;
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
189 }
fc8b223f4b75 [gaim-migrate @ 17944]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14886
diff changeset
190
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
191 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
192 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
193 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
194 } 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
195
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 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
197 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
198 {
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 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
200 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
201 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
202 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
203 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
204 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
205 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
206 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
207 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
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 }
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
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 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
212 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
213 {
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 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
215 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
216 }
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 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
219 {
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 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
221 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
222 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
223 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
224 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
225
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 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
227 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
228 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
229 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
230 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
231 tree = NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
232 } else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
233 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
234 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
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 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
237 }
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
238
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
239 #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
240 static GntWidget *
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
241 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
242 {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
243 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
244 char *name;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
245 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
246 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
247
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
248 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
249 return NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
250
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
251 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
252 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
253 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
254 xmlNode *ch;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
255 char *title;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
256 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
257
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
258 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
259 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
260 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
261 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
262
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
263 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
264 if (title) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
265 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
266 xmlFree(title);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
267 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
268
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
269 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
270 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
271 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
272 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
273 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
274 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
275
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
276 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
277 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
278 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
279 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
280 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
281 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
282
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
283 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
284 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
285 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
286 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
287 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
288 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
289
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
290 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
291 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
292 } 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
293 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
294 } 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
295 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
296 } 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
297 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
298 } 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
299 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
300 } 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
301 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
302 } 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
303 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
304 } 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
305 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
306 } 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
307 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
308 }
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 xmlFree(content);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
311
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
312 if (widget == NULL) {
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
313 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
314 return NULL;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
315 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
316
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
317 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
318 if (id) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
319 int i;
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
320 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
321 *data[i] = widget;
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
322 xmlFree(id);
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
323 }
16187
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
324 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
325
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
326 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
327 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
328 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
329 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
330 if (val)
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_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
332 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
333 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
334 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
335 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
336 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
337
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
338 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
339 if (prop) {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
340 int val;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
341 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
342 if (val)
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_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
344 else
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
345 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
346 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
347 xmlFree(prop);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
348 }
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 return widget;
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 #endif
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 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
355 {
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
356 #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
357 xmlParserCtxtPtr ctxt;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
358 xmlDocPtr doc;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
359 xmlNodePtr node;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
360 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
361 GntWidget ***data;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
362 int id;
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
363
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
364 ctxt = xmlNewParserCtxt();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
365 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
366
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
367 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
368
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
369 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
370 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
371 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
372
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
373 node = xmlDocGetRootElement(doc);
18849
9d803f3e8447 Guard against possible weird crashes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18763
diff changeset
374 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
375
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
376 xmlFreeDoc(doc);
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
377 xmlCleanupParser();
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
378 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
379 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
380 #endif
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
381 }
2977f4a9cc80 Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16047
diff changeset
382
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
383 #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
384 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
385 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
386 {
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 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
388 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
389 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
390 gboolean processed = 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
391 char *url = NULL;
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
392 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
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 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
395 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
396
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 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
398 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
399 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
400 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
401 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
402 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
403 } 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
404 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
405 } 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
406 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
407 } 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
408 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
409 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
410 } 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
411 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
412 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
413 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
414 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
415 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
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 } 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
419 insert_nl_s = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
420 insert_nl_e = TRUE;
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
421 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
422 } 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
423 /* 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
424 }
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
425
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
426 if (insert_nl_s)
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
427 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
428
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
429 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
430 if (ch->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
431 processed = TRUE;
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
432 util_parse_html_to_tv(ch, tv, 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
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 (!processed) {
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 content = (char*)xmlNodeGetContent(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
438 gnt_text_view_append_text_with_flags(tv, content, 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 xmlFree(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
440 }
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
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
442 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
443 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
444 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
445 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
446 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
447 }
19561
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
448
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
449 if (insert_nl_e)
249b4eca3431 Add support for a few more XHTML tags.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19456
diff changeset
450 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
451 }
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 #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
453
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 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
455 {
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 #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
457 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
458 #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
459 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
460 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
461 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
462 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
463 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
464
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 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
466 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
467 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
468 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
469 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
470 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
471 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
472 }
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
473 xmlCleanupParser();
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
474 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
475 #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
476 }
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
477
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
478 /* 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
479 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
480 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
481 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
482 } 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
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 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
485 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
486 {
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 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
488 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
489 }
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
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 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
492 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
493 {
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 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
495 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
496 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
497 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
498 }
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 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
500 }
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
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 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
503 {
7731e1028071 Add utility function to trigger some button when some key is pressed with
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
504 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
505 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
506 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
507 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
508 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
509 }

mercurial