finch/libgnt/gntcombobox.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 26650
cfa29f8cf9b7
child 28937
5f87e66597d9
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: 15886
diff changeset
1 /**
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
2 * GNT - The GLib Ncurses Toolkit
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
3 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
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: 15886
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: 15886
diff changeset
6 * source distribution.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
7 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
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: 15886
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: 15886
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: 15886
diff changeset
11 * (at your option) any later version.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
12 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
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: 15886
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
16 * GNU General Public License for more details.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
17 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
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: 15886
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: 18627
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: 15886
diff changeset
21 */
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
22
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 #include "gntbox.h"
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
24 #include "gntcombobox.h"
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25 #include "gnttree.h"
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 #include "gntmarshal.h"
14406
44eecc8a5b8b [gaim-migrate @ 17046]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14405
diff changeset
27 #include "gntutils.h"
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 #include <string.h>
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
30
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31 enum
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33 SIG_SELECTION_CHANGED,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34 SIGS,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
35 };
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
36
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
37 static GntWidgetClass *parent_class = NULL;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
38 static guint signals[SIGS] = { 0 };
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39 static void (*widget_lost_focus)(GntWidget *widget);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
42 set_selection(GntComboBox *box, gpointer key)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
43 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
44 if (box->selected != key)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
45 {
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
46 /* XXX: make sure the key actually does exist */
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
47 gpointer old = box->selected;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
48 box->selected = key;
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
49 if (GNT_WIDGET(box)->window)
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
50 gnt_widget_draw(GNT_WIDGET(box));
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
51 if (box->dropdown)
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
52 gnt_tree_set_selected(GNT_TREE(box->dropdown), key);
14103
bcac61d40461 [gaim-migrate @ 16647]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14041
diff changeset
53 g_signal_emit(box, signals[SIG_SELECTION_CHANGED], 0, old, key);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 static void
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
58 hide_popup(GntComboBox *box, gboolean set)
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
59 {
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
60 gnt_widget_set_size(box->dropdown,
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
61 box->dropdown->priv.width - 1, box->dropdown->priv.height);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
62 if (set)
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
63 set_selection(box, gnt_tree_get_selection_data(GNT_TREE(box->dropdown)));
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
64 else
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
65 gnt_tree_set_selected(GNT_TREE(box->dropdown), box->selected);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
66 gnt_widget_hide(box->dropdown->parent);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
67 }
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
68
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
69 static void
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 gnt_combo_box_draw(GntWidget *widget)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
71 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 GntComboBox *box = GNT_COMBO_BOX(widget);
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14406
diff changeset
73 char *text = NULL, *s;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
74 GntColorType type;
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
75 int len;
26650
cfa29f8cf9b7 Update hardware cursor correctly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
76
14406
44eecc8a5b8b [gaim-migrate @ 17046]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14405
diff changeset
77 if (box->dropdown && box->selected)
14109
1af2b9d5ef3f [gaim-migrate @ 16660]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14104
diff changeset
78 text = gnt_tree_get_selection_text(GNT_TREE(box->dropdown));
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 if (text == NULL)
14406
44eecc8a5b8b [gaim-migrate @ 17046]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14405
diff changeset
81 text = g_strdup("");
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
82
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
83 if (gnt_widget_has_focus(widget))
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
84 type = GNT_COLOR_HIGHLIGHT;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
85 else
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
86 type = GNT_COLOR_NORMAL;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
87
21240
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
88 wbkgdset(widget->window, '\0' | gnt_color_pair(type));
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
89
14482
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14406
diff changeset
90 s = (char*)gnt_util_onscreen_width_to_pointer(text, widget->priv.width - 4, &len);
d974bd81de08 [gaim-migrate @ 17128]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14406
diff changeset
91 *s = '\0';
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
92
15647
60181abae898 Patch from Richard 'wabz' Nelson. This fixes some possible crashes/exploits.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
93 mvwaddstr(widget->window, 1, 1, text);
21240
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
94 whline(widget->window, ' ' | gnt_color_pair(type), widget->priv.width - 4 - len);
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
95 mvwaddch(widget->window, 1, widget->priv.width - 3, ACS_VLINE | gnt_color_pair(GNT_COLOR_NORMAL));
b78eaddaae02 Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
96 mvwaddch(widget->window, 1, widget->priv.width - 2, ACS_DARROW | gnt_color_pair(GNT_COLOR_NORMAL));
26650
cfa29f8cf9b7 Update hardware cursor correctly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22421
diff changeset
97 wmove(widget->window, 1, 1);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
98
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
99 g_free(text);
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
100 GNTDEBUG;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
101 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
102
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104 gnt_combo_box_size_request(GntWidget *widget)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105 {
14124
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
106 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED))
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
107 {
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
108 GntWidget *dd = GNT_COMBO_BOX(widget)->dropdown;
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
109 gnt_widget_size_request(dd);
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
110 widget->priv.height = 3; /* For now, a combobox will have border */
18627
2a8c2d968eb4 Fix the initial size of a combobox.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17586
diff changeset
111 widget->priv.width = MAX(10, dd->priv.width + 2);
14124
181ebb961493 [gaim-migrate @ 16681]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14109
diff changeset
112 }
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
113 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
114
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
115 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
116 gnt_combo_box_map(GntWidget *widget)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
117 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
118 if (widget->priv.width == 0 || widget->priv.height == 0)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
119 gnt_widget_size_request(widget);
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
120 GNTDEBUG;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
121 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
122
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
123 static void
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
124 popup_dropdown(GntComboBox *box)
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
125 {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
126 GntWidget *widget = GNT_WIDGET(box);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
127 GntWidget *parent = box->dropdown->parent;
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
128 int height = g_list_length(GNT_TREE(box->dropdown)->list);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
129 int y = widget->priv.y + widget->priv.height - 1;
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
130 gnt_widget_set_size(box->dropdown, widget->priv.width, height + 2);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
131
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
132 if (y + height + 2 >= getmaxy(stdscr))
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
133 y = widget->priv.y - height - 1;
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
134 gnt_widget_set_position(parent, widget->priv.x, y);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
135 if (parent->window)
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
136 {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
137 mvwin(parent->window, y, widget->priv.x);
14406
44eecc8a5b8b [gaim-migrate @ 17046]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14405
diff changeset
138 wresize(parent->window, height+2, widget->priv.width);
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
139 }
14785
e82deba6a1ff [gaim-migrate @ 17477]
Richard Nelson <wabz@pidgin.im>
parents: 14555
diff changeset
140 parent->priv.width = widget->priv.width;
e82deba6a1ff [gaim-migrate @ 17477]
Richard Nelson <wabz@pidgin.im>
parents: 14555
diff changeset
141 parent->priv.height = height + 2;
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
142
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
143 GNT_WIDGET_UNSET_FLAGS(parent, GNT_WIDGET_INVISIBLE);
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
144 gnt_widget_draw(parent);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
145 }
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
146
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
147 static gboolean
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
148 gnt_combo_box_key_pressed(GntWidget *widget, const char *text)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
149 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
150 GntComboBox *box = GNT_COMBO_BOX(widget);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
151 if (GNT_WIDGET_IS_FLAG_SET(box->dropdown->parent, GNT_WIDGET_MAPPED))
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
152 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
153 if (text[1] == 0)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
154 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
155 switch (text[0])
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
156 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
157 case '\r':
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
158 case '\t':
22421
ccddf3ffaf41 '\n' (ctrl-j) should behave similar to '\r' (ctrl-m). Fixes #4833.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21240
diff changeset
159 case '\n':
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
160 hide_popup(box, TRUE);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
161 return TRUE;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162 case 27:
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
163 hide_popup(box, FALSE);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
164 return TRUE;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 if (gnt_widget_key_pressed(box->dropdown, text))
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
168 return TRUE;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
169 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
170 else
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
171 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
172 if (text[0] == 27)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
173 {
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14785
diff changeset
174 if (strcmp(text, GNT_KEY_UP) == 0 ||
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14785
diff changeset
175 strcmp(text, GNT_KEY_DOWN) == 0)
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
176 {
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
177 popup_dropdown(box);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
178 return TRUE;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
179 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
182
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
183 return FALSE;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
187 gnt_combo_box_destroy(GntWidget *widget)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 gnt_widget_destroy(GNT_COMBO_BOX(widget)->dropdown->parent);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
192 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 gnt_combo_box_lost_focus(GntWidget *widget)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 GntComboBox *combo = GNT_COMBO_BOX(widget);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
196 if (GNT_WIDGET_IS_FLAG_SET(combo->dropdown->parent, GNT_WIDGET_MAPPED))
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
197 hide_popup(combo, FALSE);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 widget_lost_focus(widget);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
199 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
201 static gboolean
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
202 gnt_combo_box_clicked(GntWidget *widget, GntMouseEvent event, int x, int y)
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
203 {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
204 GntComboBox *box = GNT_COMBO_BOX(widget);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
205 gboolean dshowing = GNT_WIDGET_IS_FLAG_SET(box->dropdown->parent, GNT_WIDGET_MAPPED);
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
206
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
207 if (event == GNT_MOUSE_SCROLL_UP) {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
208 if (dshowing)
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14785
diff changeset
209 gnt_widget_key_pressed(box->dropdown, GNT_KEY_UP);
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
210 } else if (event == GNT_MOUSE_SCROLL_DOWN) {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
211 if (dshowing)
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14785
diff changeset
212 gnt_widget_key_pressed(box->dropdown, GNT_KEY_DOWN);
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
213 } else if (event == GNT_LEFT_MOUSE_DOWN) {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
214 if (dshowing) {
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
215 hide_popup(box, TRUE);
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
216 } else {
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
217 popup_dropdown(GNT_COMBO_BOX(widget));
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
218 }
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
219 } else
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
220 return FALSE;
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
221 return TRUE;
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
222 }
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
223
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 static void
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
225 gnt_combo_box_size_changed(GntWidget *widget, int oldw, int oldh)
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
226 {
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
227 GntComboBox *box = GNT_COMBO_BOX(widget);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
228 gnt_widget_set_size(box->dropdown, widget->priv.width - 1, box->dropdown->priv.height);
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
229 }
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
230
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
231 static void
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 gnt_combo_box_class_init(GntComboBoxClass *klass)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
234 parent_class = GNT_WIDGET_CLASS(klass);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 parent_class->destroy = gnt_combo_box_destroy;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 parent_class->draw = gnt_combo_box_draw;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
238 parent_class->map = gnt_combo_box_map;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
239 parent_class->size_request = gnt_combo_box_size_request;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 parent_class->key_pressed = gnt_combo_box_key_pressed;
14405
4398121ce889 [gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14194
diff changeset
241 parent_class->clicked = gnt_combo_box_clicked;
15803
4f04b9413b50 gntcombobox: lost_focus fix, tidy tree size
Richard Nelson <wabz@pidgin.im>
parents: 15647
diff changeset
242 parent_class->size_changed = gnt_combo_box_size_changed;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244 widget_lost_focus = parent_class->lost_focus;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
245 parent_class->lost_focus = gnt_combo_box_lost_focus;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
246
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
247 signals[SIG_SELECTION_CHANGED] =
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
248 g_signal_new("selection-changed",
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
249 G_TYPE_FROM_CLASS(klass),
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
250 G_SIGNAL_RUN_LAST,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
251 0,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
252 NULL, NULL,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
253 gnt_closure_marshal_VOID__POINTER_POINTER,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
254 G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
256 GNTDEBUG;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
257 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
259 static void
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
260 gnt_combo_box_init(GTypeInstance *instance, gpointer class)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
261 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 GntWidget *box;
14005
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13998
diff changeset
263 GntWidget *widget = GNT_WIDGET(instance);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
264 GntComboBox *combo = GNT_COMBO_BOX(instance);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
265
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(instance),
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
267 GNT_WIDGET_GROW_X | GNT_WIDGET_CAN_TAKE_FOCUS | GNT_WIDGET_NO_SHADOW);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
268 combo->dropdown = gnt_tree_new();
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 box = gnt_box_new(FALSE, FALSE);
14109
1af2b9d5ef3f [gaim-migrate @ 16660]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14104
diff changeset
271 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_NO_SHADOW | GNT_WIDGET_NO_BORDER | GNT_WIDGET_TRANSIENT);
13998
680eb6d0ed40 [gaim-migrate @ 16467]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13997
diff changeset
272 gnt_box_set_pad(GNT_BOX(box), 0);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
273 gnt_box_add_widget(GNT_BOX(box), combo->dropdown);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274
14005
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13998
diff changeset
275 widget->priv.minw = 4;
198d1658b390 [gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13998
diff changeset
276 widget->priv.minh = 3;
14494
3575eac3a518 [gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14482
diff changeset
277 GNTDEBUG;
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
278 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
279
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
280 /******************************************************************************
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
281 * GntComboBox API
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
282 *****************************************************************************/
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
283 GType
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
284 gnt_combo_box_get_gtype(void)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
285 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
286 static GType type = 0;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288 if(type == 0)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 static const GTypeInfo info = {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291 sizeof(GntComboBoxClass),
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292 NULL, /* base_init */
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
293 NULL, /* base_finalize */
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
294 (GClassInitFunc)gnt_combo_box_class_init,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
295 NULL, /* class_finalize */
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
296 NULL, /* class_data */
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
297 sizeof(GntComboBox),
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298 0, /* n_preallocs */
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 gnt_combo_box_init, /* instance_init */
15874
46df7421a1b5 Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15803
diff changeset
300 NULL /* value_table */
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301 };
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
302
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
303 type = g_type_register_static(GNT_TYPE_WIDGET,
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
304 "GntComboBox",
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305 &info, 0);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
306 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
308 return type;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 GntWidget *gnt_combo_box_new()
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313 GntWidget *widget = g_object_new(GNT_TYPE_COMBO_BOX, NULL);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
314
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 return widget;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
317
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
318 void gnt_combo_box_add_data(GntComboBox *box, gpointer key, const char *text)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
319 {
14167
ca6027c33d2c [gaim-migrate @ 16739]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14153
diff changeset
320 gnt_tree_add_row_last(GNT_TREE(box->dropdown), key,
ca6027c33d2c [gaim-migrate @ 16739]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14153
diff changeset
321 gnt_tree_create_row(GNT_TREE(box->dropdown), text), NULL);
13997
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
322 if (box->selected == NULL)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
323 set_selection(box, key);
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
324 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
326 gpointer gnt_combo_box_get_selected_data(GntComboBox *box)
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
327 {
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328 return box->selected;
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
329 }
546ca912cb25 [gaim-migrate @ 16466]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
330
14041
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
331 void gnt_combo_box_set_selected(GntComboBox *box, gpointer key)
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
332 {
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
333 set_selection(box, key);
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
334 }
6afba85cfc30 [gaim-migrate @ 16540]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14026
diff changeset
335
14555
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
336 void gnt_combo_box_remove(GntComboBox *box, gpointer key)
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
337 {
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
338 gnt_tree_remove(GNT_TREE(box->dropdown), key);
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
339 if (box->selected == key)
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
340 set_selection(box, NULL);
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
341 }
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
342
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
343 void gnt_combo_box_remove_all(GntComboBox *box)
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
344 {
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
345 gnt_tree_remove_all(GNT_TREE(box->dropdown));
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
346 set_selection(box, NULL);
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
347 }
0d6ef581e3ac [gaim-migrate @ 17212]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14494
diff changeset
348

mercurial