pidgin/pidgincombobox.c

Fri, 27 Jun 2008 00:01:41 +0000

author
Casey Harkins <charkins@pidgin.im>
date
Fri, 27 Jun 2008 00:01:41 +0000
changeset 22996
6b6ab005fa0f
parent 22046
fac856b76384
child 25888
d0fdd378a635
permissions
-rw-r--r--

Make pidgin_blist_toggle_visibility() hide the buddy list when it is
partially obscured but has the focus. This ensures we do something
reasonable if the buddy list is obscured by an "always on top" window.
Fixes #5145.

16289
d882d31ebe42 A couple of missed s/purple/pidgin/'s
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15906
diff changeset
1 /* pidgincombobox.c
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2 * Copyright (C) 2002, 2003 Kristian Rietveld <kris@gtk.org>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
4 * This library is free software; you can redistribute it and/or
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
5 * modify it under the terms of the GNU Library General Public
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
7 * version 2 of the License, or (at your option) any later version.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
8 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
9 * This library is distributed in the hope that it will be useful,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
12 * Library General Public License for more details.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
13 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
14 * You should have received a copy of the GNU Library General Public
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
15 * License along with this library; if not, write to the
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 16289
diff changeset
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 16289
diff changeset
17 * Boston, MA 02111-1301, USA.
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
18 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
19
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
20 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
21 #include <config.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
22 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
23 #include <gtk/gtkversion.h>
15600
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
24 #if !GTK_CHECK_VERSION(2,6,0)
15883
969b74a3e27a According to etags, pidgin/ should be completely clean of references to 'gaim' as a client
Sean Egan <seanegan@pidgin.im>
parents: 15600
diff changeset
25 #include "pidgincombobox.h"
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
26
15600
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
27 #if !GTK_CHECK_VERSION(2,4,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
28 #include <gtk/gtkarrow.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
29 #include <gtk/gtkbindings.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
30 #include "gtkcelllayout.h"
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
31 #include <gtk/gtkcellrenderertext.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
32 #include "gtkcellview.h"
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
33 #include "gtkcellviewmenuitem.h"
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
34 #include <gtk/gtkeventbox.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
35 #include <gtk/gtkframe.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
36 #include <gtk/gtkhbox.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
37 #include <gtk/gtkliststore.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
38 #include <gtk/gtkmain.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
39 #include <gtk/gtkmenu.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
40 #include <gtk/gtktogglebutton.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
41 #include <gtk/gtktreeselection.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
42 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
43 #include <gtk/gtktreeprivate.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
44 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
45 #include <gtk/gtkvseparator.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
46 #include <gtk/gtkwindow.h>
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
47 #include <gtk/gtkversion.h>
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
48
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
49 #include <gdk/gdkkeysyms.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
50
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
51 #include <gobject/gvaluecollector.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
52
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
53 #include <string.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
54 #include <stdarg.h>
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
55
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
56 #define P_(x) (x)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
57
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
58 /* WELCOME, to THE house of evil code */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
59
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
60 typedef struct _ComboCellInfo ComboCellInfo;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
61 struct _ComboCellInfo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
62 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
63 GtkCellRenderer *cell;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
64 GSList *attributes;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
65
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
66 GtkCellLayoutDataFunc func;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
67 gpointer func_data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
68 GDestroyNotify destroy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
69
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
70 guint expand : 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
71 guint pack : 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
72 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
73
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
74 struct _GtkComboBoxPrivate
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
75 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
76 GtkTreeModel *model;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
77
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
78 gint col_column;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
79 gint row_column;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
80
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
81 gint wrap_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
82
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
83 gint active_item;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
84
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
85 GtkWidget *tree_view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
86 GtkTreeViewColumn *column;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
87
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
88 GtkWidget *cell_view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
89 GtkWidget *cell_view_frame;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
90
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
91 GtkWidget *button;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
92 GtkWidget *box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
93 GtkWidget *arrow;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
94 GtkWidget *separator;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
95
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
96 GtkWidget *popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
97 GtkWidget *popup_window;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
98 GtkWidget *popup_frame;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
99
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
100 guint inserted_id;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
101 guint deleted_id;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
102 guint reordered_id;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
103 guint changed_id;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
104
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
105 gint width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
106 GSList *cells;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
107
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
108 guint popup_in_progress : 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
109 guint destroying : 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
110 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
111
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
112 /* While debugging this evil code, I have learned that
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
113 * there are actually 4 modes to this widget, which can
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
114 * be characterized as follows
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
115 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
116 * 1) menu mode, no child added
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
117 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
118 * tree_view -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
119 * cell_view -> GtkCellView, regular child
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
120 * cell_view_frame -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
121 * button -> GtkToggleButton set_parent to combo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
122 * box -> child of button
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
123 * arrow -> child of box
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
124 * separator -> child of box
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
125 * popup_widget -> GtkMenu
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
126 * popup_window -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
127 * popup_frame -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
128 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
129 * 2) menu mode, child added
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
130 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
131 * tree_view -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
132 * cell_view -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
133 * cell_view_frame -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
134 * button -> GtkToggleButton set_parent to combo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
135 * box -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
136 * arrow -> GtkArrow, child of button
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
137 * separator -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
138 * popup_widget -> GtkMenu
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
139 * popup_window -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
140 * popup_frame -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
141 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
142 * 3) list mode, no child added
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
143 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
144 * tree_view -> GtkTreeView, child of popup_frame
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
145 * cell_view -> GtkCellView, regular child
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
146 * cell_view_frame -> GtkFrame, set parent to combo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
147 * button -> GtkToggleButton, set_parent to combo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
148 * box -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
149 * arrow -> GtkArrow, child of button
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
150 * separator -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
151 * popup_widget -> tree_view
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
152 * popup_window -> GtkWindow
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
153 * popup_frame -> GtkFrame, child of popup_window
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
154 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
155 * 4) list mode, child added
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
156 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
157 * tree_view -> GtkTreeView, child of popup_frame
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
158 * cell_view -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
159 * cell_view_frame -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
160 * button -> GtkToggleButton, set_parent to combo
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
161 * box -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
162 * arrow -> GtkArrow, child of button
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
163 * separator -> NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
164 * popup_widget -> tree_view
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
165 * popup_window -> GtkWindow
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
166 * popup_frame -> GtkFrame, child of popup_window
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
167 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
168 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
169
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
170 enum {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
171 CHANGED,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
172 LAST_SIGNAL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
173 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
174
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
175 enum {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
176 PROP_0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
177 PROP_MODEL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
178 PROP_WRAP_WIDTH,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
179 PROP_ROW_SPAN_COLUMN,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
180 PROP_COLUMN_SPAN_COLUMN,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
181 PROP_ACTIVE
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
182 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
183
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
184 static GtkBinClass *parent_class = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
185 static guint combo_box_signals[LAST_SIGNAL] = {0,};
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
186
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
187 #define BONUS_PADDING 4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
188
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
189
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
190 /* common */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
191 static void gtk_combo_box_class_init (GtkComboBoxClass *klass);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
192 static void gtk_combo_box_cell_layout_init (GtkCellLayoutIface *iface);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
193 static void gtk_combo_box_init (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
194 static void gtk_combo_box_finalize (GObject *object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
195 static void gtk_combo_box_destroy (GtkObject *object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
196
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
197 static void gtk_combo_box_set_property (GObject *object,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
198 guint prop_id,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
199 const GValue *value,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
200 GParamSpec *spec);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
201 static void gtk_combo_box_get_property (GObject *object,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
202 guint prop_id,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
203 GValue *value,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
204 GParamSpec *spec);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
205
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
206 static void gtk_combo_box_state_changed (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
207 GtkStateType previous);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
208 static void gtk_combo_box_style_set (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
209 GtkStyle *previous);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
210 static void gtk_combo_box_button_toggled (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
211 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
212 static void gtk_combo_box_add (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
213 GtkWidget *widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
214 static void gtk_combo_box_remove (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
215 GtkWidget *widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
216
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
217 static ComboCellInfo *gtk_combo_box_get_cell_info (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
218 GtkCellRenderer *cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
219
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
220 static void gtk_combo_box_menu_show (GtkWidget *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
221 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
222 static void gtk_combo_box_menu_hide (GtkWidget *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
223 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
224
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
225 static void gtk_combo_box_set_popup_widget (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
226 GtkWidget *popup);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
227 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
228 static void gtk_combo_box_menu_position_below (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
229 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
230 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
231 gint *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
232 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
233 static void gtk_combo_box_menu_position_over (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
234 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
235 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
236 gint *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
237 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
238 static void gtk_combo_box_menu_position (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
239 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
240 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
241 gint *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
242 gpointer user_data);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
243 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
244
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
245 static gint gtk_combo_box_calc_requested_width (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
246 GtkTreePath *path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
247 static void gtk_combo_box_remeasure (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
248
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
249 static void gtk_combo_box_unset_model (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
250
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
251 static void gtk_combo_box_size_request (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
252 GtkRequisition *requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
253 static void gtk_combo_box_size_allocate (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
254 GtkAllocation *allocation);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
255 static void gtk_combo_box_forall (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
256 gboolean include_internals,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
257 GtkCallback callback,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
258 gpointer callback_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
259 static gboolean gtk_combo_box_expose_event (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
260 GdkEventExpose *event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
261 static gboolean gtk_combo_box_scroll_event (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
262 GdkEventScroll *event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
263 static void gtk_combo_box_set_active_internal (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
264 gint index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
265 static gboolean gtk_combo_box_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
266 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
267 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
268
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
269 /* listening to the model */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
270 static void gtk_combo_box_model_row_inserted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
271 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
272 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
273 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
274 static void gtk_combo_box_model_row_deleted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
275 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
276 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
277 static void gtk_combo_box_model_rows_reordered (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
278 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
279 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
280 gint *new_order,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
281 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
282 static void gtk_combo_box_model_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
283 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
284 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
285 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
286
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
287 /* list */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
288 static void gtk_combo_box_list_position (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
289 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
290 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
291 gint *width,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
292 gint *height);
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
293
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
294 static void gtk_combo_box_list_setup (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
295 static void gtk_combo_box_list_destroy (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
296
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
297 static void gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
298
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
299 static gboolean gtk_combo_box_list_button_released (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
300 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
301 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
302 static gboolean gtk_combo_box_list_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
303 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
304 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
305 static gboolean gtk_combo_box_list_button_pressed (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
306 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
307 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
308
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
309 static void gtk_combo_box_list_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
310 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
311 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
312 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
313
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
314 /* menu */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
315 static void gtk_combo_box_menu_setup (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
316 gboolean add_children);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
317 static void gtk_combo_box_menu_fill (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
318 static void gtk_combo_box_menu_destroy (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
319
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
320 static void gtk_combo_box_item_get_size (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
321 gint index,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
322 gint *cols,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
323 gint *rows);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
324 static void gtk_combo_box_relayout_item (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
325 gint index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
326 static void gtk_combo_box_relayout (GtkComboBox *combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
327
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
328 static gboolean gtk_combo_box_menu_button_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
329 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
330 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
331 static void gtk_combo_box_menu_item_activate (GtkWidget *item,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
332 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
333 static void gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
334 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
335 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
336 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
337 static void gtk_combo_box_menu_row_deleted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
338 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
339 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
340 static void gtk_combo_box_menu_rows_reordered (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
341 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
342 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
343 gint *new_order,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
344 gpointer user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
345 static void gtk_combo_box_menu_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
346 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
347 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
348 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
349 static gboolean gtk_combo_box_menu_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
350 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
351 gpointer data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
352
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
353 /* cell layout */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
354 static void gtk_combo_box_cell_layout_pack_start (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
355 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
356 gboolean expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
357 static void gtk_combo_box_cell_layout_pack_end (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
358 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
359 gboolean expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
360 static void gtk_combo_box_cell_layout_clear (GtkCellLayout *layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
361 static void gtk_combo_box_cell_layout_add_attribute (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
362 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
363 const gchar *attribute,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
364 gint column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
365 static void gtk_combo_box_cell_layout_set_cell_data_func (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
366 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
367 GtkCellLayoutDataFunc func,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
368 gpointer func_data,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
369 GDestroyNotify destroy);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
370 static void gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
371 GtkCellRenderer *cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
372 static void gtk_combo_box_cell_layout_reorder (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
373 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
374 gint position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
375 static gboolean gtk_combo_box_mnemonic_activate (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
376 gboolean group_cycling);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
377
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
378 static void cell_view_sync_cells (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
379 GtkCellView *cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
380
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
381 #if !GTK_CHECK_VERSION(2,4,0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
382 static void gtk_menu_attach (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
383 GtkWidget *child,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
384 guint left_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
385 guint right_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
386 guint top_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
387 guint bottom_attach);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
388 #endif
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
389
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
390 GType
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
391 gtk_combo_box_get_type (void)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
392 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
393 static GType combo_box_type = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
394
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
395 if (!combo_box_type)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
396 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
397 static const GTypeInfo combo_box_info =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
398 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
399 sizeof (GtkComboBoxClass),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
400 NULL, /* base_init */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
401 NULL, /* base_finalize */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
402 (GClassInitFunc) gtk_combo_box_class_init,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
403 NULL, /* class_finalize */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
404 NULL, /* class_data */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
405 sizeof (GtkComboBox),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
406 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
407 (GInstanceInitFunc) gtk_combo_box_init
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
408 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
409
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
410 static const GInterfaceInfo cell_layout_info =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
411 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
412 (GInterfaceInitFunc) gtk_combo_box_cell_layout_init,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
413 NULL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
414 NULL
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
415 };
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
416
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
417 combo_box_type = g_type_register_static (GTK_TYPE_BIN,
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
418 "PidginComboBox",
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
419 &combo_box_info,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
420 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
421
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
422 g_type_add_interface_static (combo_box_type,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
423 GTK_TYPE_CELL_LAYOUT,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
424 &cell_layout_info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
425 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
426
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
427 return combo_box_type;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
428 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
429
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
430 /* common */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
431 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
432 gtk_combo_box_class_init (GtkComboBoxClass *klass)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
433 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
434 GObjectClass *object_class;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
435 GtkBindingSet *binding_set;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
436 GtkObjectClass *gtk_object_class;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
437 GtkContainerClass *container_class;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
438 GtkWidgetClass *widget_class;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
439
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
440 binding_set = gtk_binding_set_by_class (klass);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
441
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
442 container_class = (GtkContainerClass *)klass;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
443 container_class->forall = gtk_combo_box_forall;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
444 container_class->add = gtk_combo_box_add;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
445 container_class->remove = gtk_combo_box_remove;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
446
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
447 widget_class = (GtkWidgetClass *)klass;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
448 widget_class->size_allocate = gtk_combo_box_size_allocate;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
449 widget_class->size_request = gtk_combo_box_size_request;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
450 widget_class->expose_event = gtk_combo_box_expose_event;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
451 widget_class->scroll_event = gtk_combo_box_scroll_event;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
452 widget_class->mnemonic_activate = gtk_combo_box_mnemonic_activate;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
453 widget_class->style_set = gtk_combo_box_style_set;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
454 widget_class->state_changed = gtk_combo_box_state_changed;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
455
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
456 gtk_object_class = (GtkObjectClass *)klass;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
457 gtk_object_class->destroy = gtk_combo_box_destroy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
458
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
459 object_class = (GObjectClass *)klass;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
460 object_class->finalize = gtk_combo_box_finalize;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
461 object_class->set_property = gtk_combo_box_set_property;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
462 object_class->get_property = gtk_combo_box_get_property;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
463
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
464 parent_class = g_type_class_peek_parent (klass);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
465
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
466 /* signals */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
467 combo_box_signals[CHANGED] =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
468 g_signal_new ("changed",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
469 G_OBJECT_CLASS_TYPE (klass),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
470 G_SIGNAL_RUN_LAST,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
471 G_STRUCT_OFFSET (GtkComboBoxClass, changed),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
472 NULL, NULL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
473 g_cclosure_marshal_VOID__VOID,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
474 G_TYPE_NONE, 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
475
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
476 /* properties */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
477 g_object_class_install_property (object_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
478 PROP_MODEL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
479 g_param_spec_object ("model",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
480 P_("ComboBox model"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
481 P_("The model for the combo box"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
482 GTK_TYPE_TREE_MODEL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
483 G_PARAM_READWRITE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
484
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
485 g_object_class_install_property (object_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
486 PROP_WRAP_WIDTH,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
487 g_param_spec_int ("wrap_width",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
488 P_("Wrap width"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
489 P_("Wrap width for layouting the items in a grid"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
490 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
491 G_MAXINT,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
492 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
493 G_PARAM_READWRITE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
494
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
495 g_object_class_install_property (object_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
496 PROP_ROW_SPAN_COLUMN,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
497 g_param_spec_int ("row_span_column",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
498 P_("Row span column"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
499 P_("TreeModel column containing the row span values"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
500 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
501 G_MAXINT,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
502 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
503 G_PARAM_READWRITE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
504
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
505 g_object_class_install_property (object_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
506 PROP_COLUMN_SPAN_COLUMN,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
507 g_param_spec_int ("column_span_column",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
508 P_("Column span column"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
509
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
510 P_("TreeModel column containing the column span values"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
511 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
512 G_MAXINT,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
513 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
514 G_PARAM_READWRITE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
515
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
516 g_object_class_install_property (object_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
517 PROP_ACTIVE,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
518 g_param_spec_int ("active",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
519 P_("Active item"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
520 P_("The item which is currently active"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
521 -1,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
522 G_MAXINT,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
523 -1,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
524 G_PARAM_READWRITE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
525
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
526 gtk_widget_class_install_style_property (widget_class,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
527 g_param_spec_boolean ("appears-as-list",
13383
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
528 P_("Appears as list"),
b0330d929b8a [gaim-migrate @ 15755]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 12505
diff changeset
529 P_("Whether combobox dropdowns should look like lists rather than menus"),
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
530 FALSE,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
531 G_PARAM_READABLE));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
532 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
533
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
534 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
535 gtk_combo_box_cell_layout_init (GtkCellLayoutIface *iface)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
536 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
537 iface->pack_start = gtk_combo_box_cell_layout_pack_start;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
538 iface->pack_end = gtk_combo_box_cell_layout_pack_end;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
539 iface->clear = gtk_combo_box_cell_layout_clear;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
540 iface->add_attribute = gtk_combo_box_cell_layout_add_attribute;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
541 iface->set_cell_data_func = gtk_combo_box_cell_layout_set_cell_data_func;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
542 iface->clear_attributes = gtk_combo_box_cell_layout_clear_attributes;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
543 iface->reorder = gtk_combo_box_cell_layout_reorder;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
544 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
545
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
546 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
547 gtk_combo_box_init (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
548 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
549 combo_box->priv = g_new0(GtkComboBoxPrivate,1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
550
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
551 combo_box->priv->cell_view = gtk_cell_view_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
552 gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
553 GTK_BIN (combo_box)->child = combo_box->priv->cell_view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
554 gtk_widget_show (combo_box->priv->cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
555
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
556 combo_box->priv->width = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
557 combo_box->priv->wrap_width = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
558
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
559 combo_box->priv->active_item = -1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
560 combo_box->priv->col_column = -1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
561 combo_box->priv->row_column = -1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
562 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
563
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
564 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
565 gtk_combo_box_set_property (GObject *object,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
566 guint prop_id,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
567 const GValue *value,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
568 GParamSpec *pspec)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
569 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
570 GtkComboBox *combo_box = GTK_COMBO_BOX (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
571
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
572 switch (prop_id)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
573 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
574 case PROP_MODEL:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
575 gtk_combo_box_set_model (combo_box, g_value_get_object (value));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
576 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
577
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
578 case PROP_WRAP_WIDTH:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
579 gtk_combo_box_set_wrap_width (combo_box, g_value_get_int (value));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
580 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
581
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
582 case PROP_ROW_SPAN_COLUMN:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
583 gtk_combo_box_set_row_span_column (combo_box, g_value_get_int (value));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
584 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
585
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
586 case PROP_COLUMN_SPAN_COLUMN:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
587 gtk_combo_box_set_column_span_column (combo_box, g_value_get_int (value));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
588 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
589
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
590 case PROP_ACTIVE:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
591 gtk_combo_box_set_active (combo_box, g_value_get_int (value));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
592 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
593
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
594 default:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
595 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
596 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
597 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
598
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
599 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
600 gtk_combo_box_get_property (GObject *object,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
601 guint prop_id,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
602 GValue *value,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
603 GParamSpec *pspec)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
604 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
605 GtkComboBox *combo_box = GTK_COMBO_BOX (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
606
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
607 switch (prop_id)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
608 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
609 case PROP_MODEL:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
610 g_value_set_object (value, combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
611 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
612
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
613 case PROP_WRAP_WIDTH:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
614 g_value_set_int (value, combo_box->priv->wrap_width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
615 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
616
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
617 case PROP_ROW_SPAN_COLUMN:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
618 g_value_set_int (value, combo_box->priv->row_column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
619 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
620
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
621 case PROP_COLUMN_SPAN_COLUMN:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
622 g_value_set_int (value, combo_box->priv->col_column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
623 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
624
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
625 case PROP_ACTIVE:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
626 g_value_set_int (value, gtk_combo_box_get_active (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
627 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
628
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
629 default:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
630 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
631 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
632 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
633 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
634
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
635 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
636 gtk_combo_box_state_changed (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
637 GtkStateType previous)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
638 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
639 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
640
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
641 if (GTK_WIDGET_REALIZED (widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
642 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
643 if (combo_box->priv->tree_view && combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
644 gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
645 &widget->style->base[GTK_WIDGET_STATE (widget)]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
646 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
647
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
648 gtk_widget_queue_draw (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
649 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
650
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
651 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
652 gtk_combo_box_check_appearance (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
653 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
654 gboolean appears_as_list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
655
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
656 /* if wrap_width > 0, then we are in grid-mode and forced to use
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
657 * unix style
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
658 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
659 if (combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
660 appears_as_list = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
661 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
662 gtk_widget_style_get (GTK_WIDGET (combo_box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
663 "appears-as-list", &appears_as_list,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
664 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
665
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
666 if (appears_as_list)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
667 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
668 /* Destroy all the menu mode widgets, if they exist. */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
669 if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
670 gtk_combo_box_menu_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
671
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
672 /* Create the list mode widgets, if they don't already exist. */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
673 if (!GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
674 gtk_combo_box_list_setup (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
675 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
676 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
677 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
678 /* Destroy all the list mode widgets, if they exist. */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
679 if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
680 gtk_combo_box_list_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
681
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
682 /* Create the menu mode widgets, if they don't already exist. */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
683 if (!GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
684 gtk_combo_box_menu_setup (combo_box, TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
685 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
686 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
687
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
688 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
689 gtk_combo_box_style_set (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
690 GtkStyle *previous)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
691 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
692 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
693
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
694 gtk_combo_box_check_appearance (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
695
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
696 if (combo_box->priv->tree_view && combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
697 gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
698 &widget->style->base[GTK_WIDGET_STATE (widget)]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
699 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
700
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
701 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
702 gtk_combo_box_button_toggled (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
703 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
704 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
705 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
706
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
707 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
708 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
709 if (!combo_box->priv->popup_in_progress)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
710 gtk_combo_box_popup (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
711 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
712 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
713 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
714 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
715
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
716 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
717 gtk_combo_box_add (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
718 GtkWidget *widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
719 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
720 GtkComboBox *combo_box = GTK_COMBO_BOX (container);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
721
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
722 if (combo_box->priv->cell_view && combo_box->priv->cell_view->parent)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
723 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
724 gtk_widget_unparent (combo_box->priv->cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
725 GTK_BIN (container)->child = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
726 gtk_widget_queue_resize (GTK_WIDGET (container));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
727 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
728
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
729 gtk_widget_set_parent (widget, GTK_WIDGET (container));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
730 GTK_BIN (container)->child = widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
731
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
732 if (combo_box->priv->cell_view &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
733 widget != combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
734 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
735 /* since the cell_view was unparented, it's gone now */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
736 combo_box->priv->cell_view = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
737
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
738 if (!combo_box->priv->tree_view && combo_box->priv->separator)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
739 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
740 gtk_container_remove (GTK_CONTAINER (combo_box->priv->separator->parent),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
741 combo_box->priv->separator);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
742 combo_box->priv->separator = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
743
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
744 gtk_widget_queue_resize (GTK_WIDGET (container));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
745 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
746 else if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
747 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
748 gtk_widget_unparent (combo_box->priv->cell_view_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
749 combo_box->priv->cell_view_frame = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
750 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
751 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
752 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
753
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
754 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
755 gtk_combo_box_remove (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
756 GtkWidget *widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
757 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
758 GtkComboBox *combo_box = GTK_COMBO_BOX (container);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
759 gboolean appears_as_list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
760
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
761 gtk_widget_unparent (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
762 GTK_BIN (container)->child = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
763
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
764 if (combo_box->priv->destroying)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
765 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
766
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
767 gtk_widget_queue_resize (GTK_WIDGET (container));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
768
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
769 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
770 appears_as_list = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
771 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
772 appears_as_list = TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
773
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
774 if (appears_as_list)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
775 gtk_combo_box_list_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
776 else if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
777 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
778 gtk_combo_box_menu_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
779 gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
780 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
781 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
782
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
783 if (!combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
784 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
785 combo_box->priv->cell_view = gtk_cell_view_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
786 gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (container));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
787 GTK_BIN (container)->child = combo_box->priv->cell_view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
788
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
789 gtk_widget_show (combo_box->priv->cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
790 gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
791 combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
792 cell_view_sync_cells (combo_box, GTK_CELL_VIEW (combo_box->priv->cell_view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
793 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
794
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
795
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
796 if (appears_as_list)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
797 gtk_combo_box_list_setup (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
798 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
799 gtk_combo_box_menu_setup (combo_box, TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
800
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
801 gtk_combo_box_set_active_internal (combo_box, combo_box->priv->active_item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
802 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
803
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
804 static ComboCellInfo *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
805 gtk_combo_box_get_cell_info (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
806 GtkCellRenderer *cell)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
807 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
808 GSList *i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
809
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
810 for (i = combo_box->priv->cells; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
811 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
812 ComboCellInfo *info = (ComboCellInfo *)i->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
813
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
814 if (info && info->cell == cell)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
815 return info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
816 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
817
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
818 return NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
819 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
820
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
821 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
822 gtk_combo_box_menu_show (GtkWidget *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
823 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
824 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
825 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
826
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
827 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
828 TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
829 combo_box->priv->popup_in_progress = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
830 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
831
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
832 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
833 gtk_combo_box_menu_hide (GtkWidget *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
834 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
835 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
836 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
837
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
838 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
839 FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
840 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
841
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
842 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
843 gtk_combo_box_detacher (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
844 GtkMenu *menu)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
845 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
846 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
847
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
848 g_return_if_fail (GTK_IS_COMBO_BOX (widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
849
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
850 combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
851 g_return_if_fail (combo_box->priv->popup_widget == (GtkWidget*) menu);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
852
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
853 g_signal_handlers_disconnect_by_func (menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
854 gtk_combo_box_menu_show,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
855 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
856 g_signal_handlers_disconnect_by_func (menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
857 gtk_combo_box_menu_hide,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
858 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
859
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
860 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
861 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
862
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
863 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
864 gtk_combo_box_set_popup_widget (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
865 GtkWidget *popup)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
866 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
867 if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
868 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
869 gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
870 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
871 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
872 else if (combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
873 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
874 gtk_container_remove (GTK_CONTAINER (combo_box->priv->popup_frame),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
875 combo_box->priv->popup_widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
876 g_object_unref (G_OBJECT (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
877 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
878 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
879
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
880 if (GTK_IS_MENU (popup))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
881 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
882 if (combo_box->priv->popup_window)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
883 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
884 gtk_widget_destroy (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
885 combo_box->priv->popup_window = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
886 combo_box->priv->popup_frame = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
887 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
888
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
889 combo_box->priv->popup_widget = popup;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
890
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
891 g_signal_connect (popup, "show",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
892 G_CALLBACK (gtk_combo_box_menu_show), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
893 g_signal_connect (popup, "hide",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
894 G_CALLBACK (gtk_combo_box_menu_hide), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
895
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
896 gtk_menu_attach_to_widget (GTK_MENU (popup),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
897 GTK_WIDGET (combo_box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
898 gtk_combo_box_detacher);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
899 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
900 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
901 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
902 if (!combo_box->priv->popup_window)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
903 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
904 combo_box->priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
905 gtk_window_set_resizable (GTK_WINDOW (combo_box->priv->popup_window), FALSE);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
906 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
907 gtk_window_set_screen (GTK_WINDOW (combo_box->priv->popup_window),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
908 gtk_widget_get_screen (GTK_WIDGET (combo_box)));
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
909 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
910
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
911 combo_box->priv->popup_frame = gtk_frame_new (NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
912 gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->popup_frame),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
913 GTK_SHADOW_ETCHED_IN);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
914 gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_window),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
915 combo_box->priv->popup_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
916
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
917 gtk_widget_show (combo_box->priv->popup_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
918 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
919
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
920 gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_frame),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
921 popup);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
922 gtk_widget_show (popup);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
923 g_object_ref (G_OBJECT (popup));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
924 combo_box->priv->popup_widget = popup;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
925 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
926 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
927
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
928 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
929 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
930 gtk_combo_box_menu_position_below (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
931 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
932 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
933 gint *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
934 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
935 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
936 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
937 gint sx, sy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
938 GtkWidget *child;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
939 GtkRequisition req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
940 GdkScreen *screen;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
941 gint monitor_num;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
942 GdkRectangle monitor;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
943
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
944 /* FIXME: is using the size request here broken? */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
945 child = GTK_BIN (combo_box)->child;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
946
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
947 gdk_window_get_origin (child->window, &sx, &sy);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
948
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
949 if (GTK_WIDGET_NO_WINDOW (child))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
950 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
951 sx += child->allocation.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
952 sy += child->allocation.y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
953 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
954
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
955 gtk_widget_size_request (GTK_WIDGET (menu), &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
956
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
957 if (gtk_widget_get_direction (GTK_WIDGET (combo_box)) == GTK_TEXT_DIR_LTR)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
958 *x = sx;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
959 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
960 *x = sx + child->allocation.width - req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
961 *y = sy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
962
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
963 screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
964 monitor_num = gdk_screen_get_monitor_at_window (screen,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
965 GTK_WIDGET (combo_box)->window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
966 gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
967
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
968 if (*x < monitor.x)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
969 *x = monitor.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
970 else if (*x + req.width > monitor.x + monitor.width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
971 *x = monitor.x + monitor.width - req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
972
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
973 if (monitor.y + monitor.height - *y - child->allocation.height >= req.height)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
974 *y += child->allocation.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
975 else if (*y - monitor.y >= req.height)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
976 *y -= req.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
977 else if (monitor.y + monitor.height - *y - child->allocation.height > *y - monitor.y)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
978 *y += child->allocation.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
979 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
980 *y -= req.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
981
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
982 *push_in = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
983 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
984
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
985 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
986 gtk_combo_box_menu_position_over (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
987 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
988 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
989 gboolean *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
990 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
991 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
992 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
993 GtkWidget *active;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
994 GtkWidget *child;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
995 GtkWidget *widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
996 GtkRequisition requisition;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
997 GList *children;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
998 gint screen_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
999 gint menu_xpos;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1000 gint menu_ypos;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1001 gint menu_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1002
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1003 g_return_if_fail (GTK_IS_COMBO_BOX (user_data));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1004
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1005 combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1006 widget = GTK_WIDGET (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1007
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1008 gtk_widget_get_child_requisition (GTK_WIDGET (menu), &requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1009 menu_width = requisition.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1010
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1011 active = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1012 gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1013
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1014 menu_xpos += widget->allocation.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1015 menu_ypos += widget->allocation.y + widget->allocation.height / 2 - 2;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1016
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1017 if (active != NULL)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1018 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1019 gtk_widget_get_child_requisition (active, &requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1020 menu_ypos -= requisition.height / 2;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1021 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1022
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1023 children = GTK_MENU_SHELL (combo_box->priv->popup_widget)->children;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1024 while (children)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1025 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1026 child = children->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1027
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1028 if (active == child)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1029 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1030
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1031 if (GTK_WIDGET_VISIBLE (child))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1032 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1033 gtk_widget_get_child_requisition (child, &requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1034 menu_ypos -= requisition.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1035 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1036
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1037 children = children->next;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1038 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1039
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1040 if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1041 menu_xpos = menu_xpos + widget->allocation.width - menu_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1042
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1043 /* Clamp the position on screen */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1044 screen_width = gdk_screen_get_width (gtk_widget_get_screen (widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1045
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1046 if (menu_xpos < 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1047 menu_xpos = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1048 else if ((menu_xpos + menu_width) > screen_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1049 menu_xpos -= ((menu_xpos + menu_width) - screen_width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1050
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1051 *x = menu_xpos;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1052 *y = menu_ypos;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1053
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1054 *push_in = TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1055 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1056
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1057 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1058 gtk_combo_box_menu_position (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1059 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1060 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1061 gint *push_in,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1062 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1063 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1064 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1065 GtkWidget *menu_item;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1066
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1067 combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1068
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1069 if (combo_box->priv->wrap_width > 0 || combo_box->priv->cell_view == NULL)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1070 gtk_combo_box_menu_position_below (menu, x, y, push_in, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1071 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1072 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1073 menu_item = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1074 if (menu_item)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1075 gtk_menu_shell_select_item (GTK_MENU_SHELL (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1076 menu_item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1077
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1078 gtk_combo_box_menu_position_over (menu, x, y, push_in, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1079 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1080
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1081 }
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1082 #endif /* Gtk 2.2 */
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1083
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1084 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1085 gtk_combo_box_list_position (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1086 gint *x,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1087 gint *y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1088 gint *width,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1089 gint *height)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1090 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1091 GtkWidget *sample;
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1092 GtkRequisition popup_req;
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1093 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1094 GdkScreen *screen;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1095 gint monitor_num;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1096 GdkRectangle monitor;
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1097 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1098
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1099 sample = GTK_BIN (combo_box)->child;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1100
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1101 *width = sample->allocation.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1102 gtk_widget_size_request (combo_box->priv->popup_window, &popup_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1103 *height = popup_req.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1104
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1105 gdk_window_get_origin (sample->window, x, y);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1106
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1107 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1108 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1109 *x -= GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1110 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1111 *width += 2 * (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1112 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1113 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1114
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1115 if (GTK_WIDGET_NO_WINDOW (sample))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1116 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1117 *x += sample->allocation.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1118 *y += sample->allocation.y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1119 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1120
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1121 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1122 screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1123 monitor_num = gdk_screen_get_monitor_at_window (screen,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1124 GTK_WIDGET (combo_box)->window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1125 gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1126
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1127 if (*x < monitor.x)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1128 *x = monitor.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1129 else if (*x + *width > monitor.x + monitor.width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1130 *x = monitor.x + monitor.width - *width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1131
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1132 if (*y + sample->allocation.height + *height <= monitor.y + monitor.height)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1133 *y += sample->allocation.height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1134 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1135 *y -= *height;
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1136 #endif /* Gtk 2.2 */
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1137 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1138
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1139 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1140 * gtk_combo_box_popup:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1141 * @combo_box: a #GtkComboBox
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1142 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1143 * Pops up the menu or dropdown list of @combo_box.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1144 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1145 * This function is mostly intended for use by accessibility technologies;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1146 * applications should have little use for it.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1147 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1148 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1149 **/
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1150 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1151 gtk_combo_box_popup (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1152 {
12505
5ce8304a38d5 [gaim-migrate @ 14817]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11780
diff changeset
1153 gint x, y, width, height;
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1154
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1155 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1156
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1157 if (GTK_WIDGET_MAPPED (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1158 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1159
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1160 if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1161 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1162 gtk_menu_set_active (GTK_MENU (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1163 combo_box->priv->active_item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1164
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1165 if (combo_box->priv->wrap_width == 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1166 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1167 GtkRequisition requisition;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1168
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1169 width = GTK_WIDGET (combo_box)->allocation.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1170 gtk_widget_size_request (combo_box->priv->popup_widget, &requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1171
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1172 gtk_widget_set_size_request (combo_box->priv->popup_widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1173 MAX (width, requisition.width), -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1174 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1175
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1176 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1177 NULL, NULL,
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1178 #if GTK_CHECK_VERSION(2,2,0)
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1179 gtk_combo_box_menu_position,
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1180 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1181 NULL,
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1182 #endif
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1183 combo_box, 0, 0);
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1184 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1185 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1186
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1187 gtk_widget_show_all (combo_box->priv->popup_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1188 gtk_combo_box_list_position (combo_box, &x, &y, &width, &height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1189
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1190 gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1191 gtk_window_move (GTK_WINDOW (combo_box->priv->popup_window), x, y);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1192
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1193 /* popup */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1194 gtk_widget_show (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1195
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1196 gtk_widget_grab_focus (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1197 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1198 TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1199
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1200 if (!GTK_WIDGET_HAS_FOCUS (combo_box->priv->tree_view))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1201 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1202 gdk_keyboard_grab (combo_box->priv->popup_window->window,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1203 FALSE, GDK_CURRENT_TIME);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1204 gtk_widget_grab_focus (combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1205 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1206
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1207 gtk_grab_add (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1208 gdk_pointer_grab (combo_box->priv->popup_window->window, TRUE,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1209 GDK_BUTTON_PRESS_MASK |
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1210 GDK_BUTTON_RELEASE_MASK |
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1211 GDK_POINTER_MOTION_MASK,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1212 NULL, NULL, GDK_CURRENT_TIME);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1213
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1214 gtk_grab_add (combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1215 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1216
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1217 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1218 * gtk_combo_box_popdown:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1219 * @combo_box: a #GtkComboBox
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1220 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1221 * Hides the menu or dropdown list of @combo_box.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1222 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1223 * This function is mostly intended for use by accessibility technologies;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1224 * applications should have little use for it.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1225 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1226 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1227 **/
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1228 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1229 gtk_combo_box_popdown (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1230 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1231 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1232
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1233 if (!GTK_WIDGET_REALIZED (GTK_WIDGET (combo_box)))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1234 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1235
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1236 if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1237 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1238 gtk_menu_popdown (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1239 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1240 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1241
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1242 gtk_combo_box_list_remove_grabs (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1243 gtk_widget_hide_all (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1244 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1245 FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1246 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1247
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1248 static gint
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1249 gtk_combo_box_calc_requested_width (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1250 GtkTreePath *path)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1251 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1252 gint padding;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1253 GtkRequisition req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1254
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1255 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1256 gtk_widget_style_get (combo_box->priv->cell_view,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1257 "focus-line-width", &padding,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1258 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1259 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1260 padding = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1261
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1262 /* add some pixels for good measure */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1263 padding += BONUS_PADDING;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1264
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1265 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1266 gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1267 path, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1268 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1269 req.width = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1270
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1271 return req.width + padding;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1272 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1273
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1274 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1275 gtk_combo_box_remeasure (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1276 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1277 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1278 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1279 gint padding = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1280
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1281 if (!combo_box->priv->model ||
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1282 !gtk_tree_model_get_iter_first (combo_box->priv->model, &iter))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1283 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1284
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1285 combo_box->priv->width = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1286
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1287 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1288 path = gtk_tree_path_new_from_indices (0, -1);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1289 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1290 path = gtk_tree_path_new_first();
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1291 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1292
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1293 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1294 gtk_widget_style_get (combo_box->priv->cell_view,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1295 "focus-line-width", &padding,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1296 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1297 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1298 padding = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1299
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1300 /* add some pixels for good measure */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1301 padding += BONUS_PADDING;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1302
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1303 do
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1304 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1305 GtkRequisition req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1306
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1307 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1308 gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1309 path, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1310 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1311 req.width = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1312
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1313 combo_box->priv->width = MAX (combo_box->priv->width,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1314 req.width + padding);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1315
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1316 gtk_tree_path_next (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1317 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1318 while (gtk_tree_model_iter_next (combo_box->priv->model, &iter));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1319
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1320 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1321 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1322
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1323 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1324 gtk_combo_box_size_request (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1325 GtkRequisition *requisition)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1326 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1327 gint width, height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1328 GtkRequisition bin_req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1329
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1330 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1331
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1332 /* common */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1333 gtk_widget_size_request (GTK_BIN (widget)->child, &bin_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1334 gtk_combo_box_remeasure (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1335 bin_req.width = MAX (bin_req.width, combo_box->priv->width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1336
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1337 gtk_combo_box_check_appearance (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1338
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1339 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1340 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1341 /* menu mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1342
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1343 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1344 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1345 GtkRequisition button_req, sep_req, arrow_req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1346 gint border_width, xthickness, ythickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1347
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1348 gtk_widget_size_request (combo_box->priv->button, &button_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1349 border_width = GTK_CONTAINER (combo_box->priv->button)->border_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1350 xthickness = combo_box->priv->button->style->xthickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1351 ythickness = combo_box->priv->button->style->ythickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1352
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1353 bin_req.width = MAX (bin_req.width, combo_box->priv->width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1354
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1355 gtk_widget_size_request (combo_box->priv->separator, &sep_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1356 gtk_widget_size_request (combo_box->priv->arrow, &arrow_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1357
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1358 height = MAX (sep_req.height, arrow_req.height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1359 height = MAX (height, bin_req.height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1360
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1361 width = bin_req.width + sep_req.width + arrow_req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1362
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1363 height += border_width + 1 + ythickness * 2 + 4;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1364 width += border_width + 1 + xthickness * 2 + 4;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1365
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1366 requisition->width = width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1367 requisition->height = height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1368 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1369 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1370 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1371 GtkRequisition but_req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1372
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1373 gtk_widget_size_request (combo_box->priv->button, &but_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1374
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1375 requisition->width = bin_req.width + but_req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1376 requisition->height = MAX (bin_req.height, but_req.height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1377 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1378 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1379 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1380 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1381 /* list mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1382 GtkRequisition button_req, frame_req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1383
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1384 /* sample + frame */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1385 *requisition = bin_req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1386
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1387 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1388 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1389 gtk_widget_size_request (combo_box->priv->cell_view_frame, &frame_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1390 requisition->width += 2 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1391 (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1392 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1393 requisition->height += 2 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1394 (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1395 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1396 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1397
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1398 /* the button */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1399 gtk_widget_size_request (combo_box->priv->button, &button_req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1400
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1401 requisition->height = MAX (requisition->height, button_req.height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1402 requisition->width += button_req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1403 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1404 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1405
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1406 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1407 gtk_combo_box_size_allocate (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1408 GtkAllocation *allocation)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1409 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1410 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1411 GtkAllocation child;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1412 GtkRequisition req;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1413 gboolean is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1414
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1415 widget->allocation = *allocation;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1416
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1417 gtk_combo_box_check_appearance (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1418
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1419 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1420 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1421 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1422 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1423 gint border_width, xthickness, ythickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1424 gint width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1425
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1426 /* menu mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1427 gtk_widget_size_allocate (combo_box->priv->button, allocation);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1428
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1429 /* set some things ready */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1430 border_width = GTK_CONTAINER (combo_box->priv->button)->border_width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1431 xthickness = combo_box->priv->button->style->xthickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1432 ythickness = combo_box->priv->button->style->ythickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1433
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1434 child.x = allocation->x + border_width + 1 + xthickness + 2;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1435 child.y = allocation->y + border_width + 1 + ythickness + 2;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1436
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1437 width = MAX(1, allocation->width - (border_width + 1 + xthickness * 2 + 4));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1438
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1439 /* handle the children */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1440 gtk_widget_size_request (combo_box->priv->arrow, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1441 child.width = req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1442 child.height = MAX(1, allocation->height - 2 * (child.y - allocation->y));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1443 if (!is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1444 child.x += width - req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1445 gtk_widget_size_allocate (combo_box->priv->arrow, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1446 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1447 child.x += req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1448 gtk_widget_size_request (combo_box->priv->separator, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1449 child.width = req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1450 if (!is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1451 child.x -= req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1452 gtk_widget_size_allocate (combo_box->priv->separator, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1453
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1454 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1455 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1456 child.x += req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1457 child.width = MAX(1, allocation->x + allocation->width
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1458 - (border_width + 1 + xthickness + 2) - child.x);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1459 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1460 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1461 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1462 child.width = child.x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1463 child.x = allocation->x + border_width + 1 + xthickness + 2;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1464 child.width = MAX(1, child.width - child.x);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1465 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1466
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1467 gtk_widget_size_allocate (GTK_BIN (widget)->child, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1468 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1469 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1470 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1471 gtk_widget_size_request (combo_box->priv->button, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1472 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1473 child.x = allocation->x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1474 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1475 child.x = allocation->x + allocation->width - req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1476 child.y = allocation->y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1477 child.width = req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1478 child.height = allocation->height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1479 gtk_widget_size_allocate (combo_box->priv->button, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1480
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1481 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1482 child.x = allocation->x + req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1483 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1484 child.x = allocation->x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1485 child.y = allocation->y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1486 child.width = MAX(1, allocation->width - req.width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1487 gtk_widget_size_allocate (GTK_BIN (widget)->child, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1488 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1489 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1490 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1491 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1492 /* list mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1493
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1494 /* button */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1495 gtk_widget_size_request (combo_box->priv->button, &req);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1496 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1497 child.x = allocation->x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1498 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1499 child.x = allocation->x + allocation->width - req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1500 child.y = allocation->y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1501 child.width = req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1502 child.height = allocation->height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1503 gtk_widget_size_allocate (combo_box->priv->button, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1504
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1505 /* frame */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1506 if (is_rtl)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1507 child.x = allocation->x + req.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1508 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1509 child.x = allocation->x;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1510 child.y = allocation->y;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1511 child.width = MAX (1, allocation->width - req.width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1512 child.height = allocation->height;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1513
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1514 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1515 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1516 gtk_widget_size_allocate (combo_box->priv->cell_view_frame, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1517
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1518 /* the sample */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1519 child.x +=
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1520 GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1521 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1522 child.y +=
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1523 GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1524 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1525 child.width -= 2 * (
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1526 GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1527 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1528 child.width = MAX(1,child.width);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1529 child.height -= 2 * (
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1530 GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1531 GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1532 child.height = MAX(1,child.height);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1533 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1534
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1535 gtk_widget_size_allocate (GTK_BIN (combo_box)->child, &child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1536 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1537 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1538
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1539 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1540 gtk_combo_box_unset_model (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1541 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1542 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1543 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1544 g_signal_handler_disconnect (combo_box->priv->model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1545 combo_box->priv->inserted_id);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1546 g_signal_handler_disconnect (combo_box->priv->model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1547 combo_box->priv->deleted_id);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1548 g_signal_handler_disconnect (combo_box->priv->model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1549 combo_box->priv->reordered_id);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1550 g_signal_handler_disconnect (combo_box->priv->model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1551 combo_box->priv->changed_id);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1552 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1553
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1554 /* menu mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1555 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1556 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1557 if (combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1558 gtk_container_foreach (GTK_CONTAINER (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1559 (GtkCallback)gtk_widget_destroy, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1560 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1561
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1562 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1563 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1564 g_object_unref (G_OBJECT (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1565 combo_box->priv->model = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1566 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1567
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1568 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1569 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1570 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1571
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1572 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1573 gtk_combo_box_forall (GtkContainer *container,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1574 gboolean include_internals,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1575 GtkCallback callback,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1576 gpointer callback_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1577 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1578 GtkComboBox *combo_box = GTK_COMBO_BOX (container);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1579
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1580 if (include_internals)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1581 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1582 if (combo_box->priv->button)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1583 (* callback) (combo_box->priv->button, callback_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1584 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1585 (* callback) (combo_box->priv->cell_view_frame, callback_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1586 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1587
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1588 if (GTK_BIN (container)->child)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1589 (* callback) (GTK_BIN (container)->child, callback_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1590 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1591
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1592 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1593 gtk_combo_box_expose_event (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1594 GdkEventExpose *event)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1595 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1596 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1597
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1598 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1599 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1600 gtk_container_propagate_expose (GTK_CONTAINER (widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1601 combo_box->priv->button, event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1602 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1603 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1604 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1605 gtk_container_propagate_expose (GTK_CONTAINER (widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1606 combo_box->priv->button, event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1607
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1608 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1609 gtk_container_propagate_expose (GTK_CONTAINER (widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1610 combo_box->priv->cell_view_frame, event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1611 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1612
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1613 gtk_container_propagate_expose (GTK_CONTAINER (widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1614 GTK_BIN (widget)->child, event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1615
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1616 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1617 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1618
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1619 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1620 gtk_combo_box_scroll_event (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1621 GdkEventScroll *event)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1622 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1623 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1624 gint index;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1625 gint items;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1626
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1627 index = gtk_combo_box_get_active (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1628
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1629 if (index != -1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1630 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1631 items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1632
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1633 if (event->direction == GDK_SCROLL_UP)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1634 index--;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1635 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1636 index++;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1637
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1638 gtk_combo_box_set_active (combo_box, CLAMP (index, 0, items - 1));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1639 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1640
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1641 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1642 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1643
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1644 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1645 * menu style
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1646 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1647
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1648 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1649 cell_view_sync_cells (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1650 GtkCellView *cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1651 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1652 GSList *k;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1653
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1654 for (k = combo_box->priv->cells; k; k = k->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1655 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1656 GSList *j;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1657 ComboCellInfo *info = (ComboCellInfo *)k->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1658
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1659 if (info->pack == GTK_PACK_START)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1660 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1661 info->cell, info->expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1662 else if (info->pack == GTK_PACK_END)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1663 gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1664 info->cell, info->expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1665
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1666 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1667 info->cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1668 info->func, info->func_data, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1669
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1670 for (j = info->attributes; j; j = j->next->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1671 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1672 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1673 info->cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1674 j->data,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1675 GPOINTER_TO_INT (j->next->data));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1676 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1677 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1678 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1679
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1680 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1681 gtk_combo_box_menu_setup (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1682 gboolean add_children)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1683 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1684 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1685
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1686 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1687 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1688 combo_box->priv->button = gtk_toggle_button_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1689 g_signal_connect (combo_box->priv->button, "toggled",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1690 G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1691 g_signal_connect_after (combo_box->priv->button, "key_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1692 G_CALLBACK (gtk_combo_box_key_press), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1693 gtk_widget_set_parent (combo_box->priv->button,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1694 GTK_BIN (combo_box)->child->parent);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1695
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1696 combo_box->priv->box = gtk_hbox_new (FALSE, 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1697 gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1698 combo_box->priv->box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1699
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1700 combo_box->priv->separator = gtk_vseparator_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1701 gtk_container_add (GTK_CONTAINER (combo_box->priv->box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1702 combo_box->priv->separator);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1703
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1704 combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1705 gtk_container_add (GTK_CONTAINER (combo_box->priv->box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1706 combo_box->priv->arrow);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1707
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1708 gtk_widget_show_all (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1709 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1710 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1711 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1712 combo_box->priv->button = gtk_toggle_button_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1713 g_signal_connect (combo_box->priv->button, "toggled",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1714 G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1715 g_signal_connect_after (combo_box, "key_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1716 G_CALLBACK (gtk_combo_box_key_press), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1717 gtk_widget_set_parent (combo_box->priv->button,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1718 GTK_BIN (combo_box)->child->parent);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1719
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1720 combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1721 gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1722 combo_box->priv->arrow);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1723 gtk_widget_show_all (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1724 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1725
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1726 g_signal_connect (combo_box->priv->button, "button_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1727 G_CALLBACK (gtk_combo_box_menu_button_press),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1728 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1729
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1730 /* create our funky menu */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1731 menu = gtk_menu_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1732 g_signal_connect (menu, "key_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1733 G_CALLBACK (gtk_combo_box_menu_key_press), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1734 gtk_combo_box_set_popup_widget (combo_box, menu);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1735
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1736 /* add items */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1737 if (add_children)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1738 gtk_combo_box_menu_fill (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1739
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1740 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1741
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1742 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1743 gtk_combo_box_menu_fill (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1744 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1745 gint i, items;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1746 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1747 GtkWidget *tmp;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1748
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1749 if (!combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1750 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1751
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1752 items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1753 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1754
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1755 for (i = 0; i < items; i++)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1756 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1757 GtkTreePath *path;
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1758 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1759 path = gtk_tree_path_new_from_indices (i, -1);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1760 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1761 char buf[32];
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1762 g_snprintf(buf, sizeof(buf), "%d", i);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1763 path = gtk_tree_path_new_from_string(buf);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
1764 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1765 tmp = gtk_cell_view_menu_item_new_from_model (combo_box->priv->model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1766 path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1767 g_signal_connect (tmp, "activate",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1768 G_CALLBACK (gtk_combo_box_menu_item_activate),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1769 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1770
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1771 cell_view_sync_cells (combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1772 GTK_CELL_VIEW (GTK_BIN (tmp)->child));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1773
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1774 gtk_menu_shell_append (GTK_MENU_SHELL (menu), tmp);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1775
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1776 if (combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1777 gtk_combo_box_relayout_item (combo_box, i);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1778
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1779 gtk_widget_show (tmp);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1780
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1781 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1782 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1783 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1784
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1785 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1786 gtk_combo_box_menu_destroy (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1787 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1788 g_signal_handlers_disconnect_matched (combo_box->priv->button,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1789 G_SIGNAL_MATCH_DATA,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1790 0, 0, NULL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1791 gtk_combo_box_menu_button_press, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1792
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1793 /* unparent will remove our latest ref */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1794 gtk_widget_unparent (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1795
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1796 combo_box->priv->box = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1797 combo_box->priv->button = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1798 combo_box->priv->arrow = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1799 combo_box->priv->separator = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1800
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1801 /* changing the popup window will unref the menu and the children */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1802 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1803
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1804 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1805 * grid
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1806 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1807
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1808 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1809 gtk_combo_box_item_get_size (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1810 gint index_,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1811 gint *cols,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1812 gint *rows)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1813 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1814 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1815
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1816 gtk_tree_model_iter_nth_child (combo_box->priv->model, &iter, NULL, index_);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1817
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1818 if (cols)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1819 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1820 if (combo_box->priv->col_column == -1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1821 *cols = 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1822 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1823 gtk_tree_model_get (combo_box->priv->model, &iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1824 combo_box->priv->col_column, cols,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1825 -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1826 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1827
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1828 if (rows)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1829 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1830 if (combo_box->priv->row_column == -1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1831 *rows = 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1832 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1833 gtk_tree_model_get (combo_box->priv->model, &iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1834 combo_box->priv->row_column, rows,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1835 -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1836 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1837 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1838
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1839 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1840 menu_occupied (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1841 guint left_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1842 guint right_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1843 guint top_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1844 guint bottom_attach)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1845 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1846 GList *i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1847
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1848 g_return_val_if_fail (GTK_IS_MENU (menu), TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1849 g_return_val_if_fail (left_attach < right_attach, TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1850 g_return_val_if_fail (top_attach < bottom_attach, TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1851
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1852 for (i = GTK_MENU_SHELL (menu)->children; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1853 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1854 guint l, r, b, t;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1855 gboolean h_intersect = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1856 gboolean v_intersect = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1857
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1858 gtk_container_child_get (GTK_CONTAINER (menu), i->data,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1859 "left_attach", &l,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1860 "right_attach", &r,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1861 "bottom_attach", &b,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1862 "top_attach", &t,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1863 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1864
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1865 /* look if this item intersects with the given coordinates */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1866 h_intersect = left_attach <= l && l <= right_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1867 h_intersect &= left_attach <= r && r <= right_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1868
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1869 v_intersect = top_attach <= t && t <= bottom_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1870 v_intersect &= top_attach <= b && b <= bottom_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1871
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1872 if (h_intersect && v_intersect)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1873 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1874 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1875
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1876 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1877 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1878
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1879 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1880 gtk_combo_box_relayout_item (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1881 gint index)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1882 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1883 gint current_col = 0, current_row = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1884 gint rows, cols;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1885 GList *list, *nth;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1886 GtkWidget *item, *last;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1887 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1888
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1889 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1890 if (!GTK_IS_MENU_SHELL (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1891 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1892
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1893 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1894 nth = g_list_nth (list, index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1895 item = nth->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1896 if (nth->prev)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1897 last = nth->prev->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1898 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1899 last = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1900 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1901
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1902 gtk_combo_box_item_get_size (combo_box, index, &cols, &rows);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1903
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1904 if (combo_box->priv->col_column == -1 &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1905 combo_box->priv->row_column == -1 &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1906 last)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1907 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1908 gtk_container_child_get (GTK_CONTAINER (menu),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1909 last,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1910 "right_attach", &current_col,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1911 "top_attach", &current_row,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1912 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1913 if (current_col + cols > combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1914 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1915 current_col = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1916 current_row++;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1917 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1918 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1919 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1920 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1921 /* look for a good spot */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1922 while (1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1923 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1924 if (current_col + cols > combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1925 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1926 current_col = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1927 current_row++;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1928 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1929
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1930 if (!menu_occupied (GTK_MENU (menu),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1931 current_col, current_col + cols,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1932 current_row, current_row + rows))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1933 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1934
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1935 current_col++;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1936 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1937 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1938
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1939 /* set attach props */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1940 gtk_menu_attach (GTK_MENU (menu), item,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1941 current_col, current_col + cols,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1942 current_row, current_row + rows);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1943 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1944
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1945 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1946 gtk_combo_box_relayout (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1947 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1948 GList *list, *j;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1949 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1950
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1951 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1952
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1953 /* do nothing unless we are in menu style and realized */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1954 if (combo_box->priv->tree_view || !GTK_IS_MENU_SHELL (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1955 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1956
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1957 /* get rid of all children */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1958 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1959
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1960 for (j = g_list_last (list); j; j = j->prev)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1961 gtk_container_remove (GTK_CONTAINER (menu), j->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1962
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1963 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1964
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1965 /* and relayout */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1966 gtk_combo_box_menu_fill (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1967 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1968
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1969 /* callbacks */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1970 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1971 gtk_combo_box_menu_button_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1972 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1973 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1974 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1975 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1976
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1977 if (! GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1978 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1979
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1980 if (event->type == GDK_BUTTON_PRESS && event->button == 1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1981 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1982 combo_box->priv->popup_in_progress = TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1983
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1984 gtk_menu_set_active (GTK_MENU (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1985 combo_box->priv->active_item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1986
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1987 if (combo_box->priv->wrap_width == 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1988 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1989 GtkRequisition requisition;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1990 gint width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1991
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1992 width = GTK_WIDGET (combo_box)->allocation.width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1993 gtk_widget_size_request (combo_box->priv->popup_widget, &requisition);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1994
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1995 gtk_widget_set_size_request (combo_box->priv->popup_widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1996 MAX (width, requisition.width), -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1997 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1998
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
1999 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2000 NULL, NULL,
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2001 #if GTK_CHECK_VERSION(2,2,0)
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2002 gtk_combo_box_menu_position,
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2003 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2004 NULL,
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2005 #endif
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2006 combo_box, event->button, event->time);
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2007
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2008 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2009 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2010
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2011 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2012 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2013
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2014 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2015 gtk_combo_box_menu_item_activate (GtkWidget *item,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2016 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2017 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2018 gint index;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2019 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2020 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2021
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2022 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2023 g_return_if_fail (GTK_IS_MENU (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2024
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2025 index = g_list_index (GTK_MENU_SHELL (menu)->children, item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2026
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2027 gtk_combo_box_set_active (combo_box, index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2028 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2029
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2030 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2031 gtk_combo_box_model_row_inserted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2032 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2033 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2034 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2035 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2036 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2037 gint index = gtk_tree_path_get_indices (path)[0];
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2038
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2039 if (combo_box->priv->active_item >= index)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2040 combo_box->priv->active_item++;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2041
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2042 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2043 gtk_combo_box_menu_row_inserted (model, path, iter, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2044 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2045
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2046 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2047 gtk_combo_box_model_row_deleted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2048 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2049 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2050 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2051 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2052 gint index = gtk_tree_path_get_indices (path)[0];
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2053
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2054 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2055 gtk_combo_box_menu_row_deleted (model, path, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2056
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2057 if (index == combo_box->priv->active_item)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2058 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2059 gint items = gtk_tree_model_iter_n_children (model, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2060
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2061 if (items == 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2062 gtk_combo_box_set_active_internal (combo_box, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2063 else if (index == items)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2064 gtk_combo_box_set_active_internal (combo_box, index - 1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2065 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2066 gtk_combo_box_set_active_internal (combo_box, index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2067 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2068 else if (combo_box->priv->active_item > index)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2069 combo_box->priv->active_item--;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2070 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2071
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2072 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2073 gtk_combo_box_model_rows_reordered (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2074 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2075 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2076 gint *new_order,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2077 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2078 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2079 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2080 gint items = gtk_tree_model_iter_n_children (model, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2081 gint i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2082
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2083 for (i = 0; i < items; i++)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2084 if (new_order[i] == combo_box->priv->active_item)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2085 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2086 combo_box->priv->active_item = i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2087 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2088 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2089
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2090 if (!combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2091 gtk_combo_box_menu_rows_reordered (model, path, iter, new_order, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2092 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2093
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2094 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2095 gtk_combo_box_model_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2096 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2097 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2098 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2099 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2100 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2101 gint index = gtk_tree_path_get_indices (path)[0];
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2102
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2103 if (index == combo_box->priv->active_item &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2104 combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2105 gtk_widget_queue_resize (GTK_WIDGET (combo_box->priv->cell_view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2106
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2107 if (combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2108 gtk_combo_box_list_row_changed (model, path, iter, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2109 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2110 gtk_combo_box_menu_row_changed (model, path, iter, user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2111 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2112
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2113
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2114 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2115 gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2116 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2117 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2118 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2119 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2120 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2121 GtkWidget *item;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2122 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2123
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2124 if (!combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2125 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2126
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2127 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2128 g_return_if_fail (GTK_IS_MENU (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2129
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2130 item = gtk_cell_view_menu_item_new_from_model (model, path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2131 g_signal_connect (item, "activate",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2132 G_CALLBACK (gtk_combo_box_menu_item_activate),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2133 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2134
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2135 cell_view_sync_cells (combo_box, GTK_CELL_VIEW (GTK_BIN (item)->child));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2136
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2137 gtk_menu_shell_insert (GTK_MENU_SHELL (menu), item,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2138 gtk_tree_path_get_indices (path)[0]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2139 gtk_widget_show (item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2140 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2141
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2142 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2143 gtk_combo_box_menu_row_deleted (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2144 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2145 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2146 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2147 gint index;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2148 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2149 GtkWidget *item;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2150 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2151
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2152 if (!combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2153 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2154
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2155 index = gtk_tree_path_get_indices (path)[0];
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2156
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2157 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2158 g_return_if_fail (GTK_IS_MENU (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2159
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2160 item = g_list_nth_data (GTK_MENU_SHELL (menu)->children, index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2161 g_return_if_fail (GTK_IS_MENU_ITEM (item));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2162
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2163 gtk_container_remove (GTK_CONTAINER (menu), item);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2164 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2165
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2166 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2167 gtk_combo_box_menu_rows_reordered (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2168 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2169 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2170 gint *new_order,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2171 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2172 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2173 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2174
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2175 gtk_combo_box_relayout (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2176 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2177
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2178 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2179 gtk_combo_box_menu_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2180 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2181 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2182 gpointer user_data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2183 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2184 GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2185 gint width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2186
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2187 if (!combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2188 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2189
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2190 if (combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2191 gtk_combo_box_relayout_item (combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2192 gtk_tree_path_get_indices (path)[0]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2193
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2194 width = gtk_combo_box_calc_requested_width (combo_box, path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2195
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2196 if (width > combo_box->priv->width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2197 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2198 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2199 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2200 gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2201 gtk_widget_queue_resize (combo_box->priv->cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2202 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2203 combo_box->priv->width = width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2204 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2205 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2206
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2207 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2208 * list style
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2209 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2210
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2211 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2212 gtk_combo_box_list_setup (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2213 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2214 GSList *i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2215 GtkTreeSelection *sel;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2216
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2217 combo_box->priv->button = gtk_toggle_button_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2218 gtk_widget_set_parent (combo_box->priv->button,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2219 GTK_BIN (combo_box)->child->parent);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2220 g_signal_connect (combo_box->priv->button, "button_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2221 G_CALLBACK (gtk_combo_box_list_button_pressed), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2222 g_signal_connect (combo_box->priv->button, "toggled",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2223 G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2224 g_signal_connect_after (combo_box, "key_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2225 G_CALLBACK (gtk_combo_box_key_press), combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2226
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2227 combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2228 gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2229 combo_box->priv->arrow);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2230 combo_box->priv->separator = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2231 gtk_widget_show_all (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2232
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2233 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2234 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2235 combo_box->priv->cell_view_frame = gtk_frame_new (NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2236 gtk_widget_set_parent (combo_box->priv->cell_view_frame,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2237 GTK_BIN (combo_box)->child->parent);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2238 gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->cell_view_frame),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2239 GTK_SHADOW_IN);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2240
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2241 gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2242 &GTK_WIDGET (combo_box)->style->base[GTK_WIDGET_STATE (combo_box)]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2243
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2244 combo_box->priv->box = gtk_event_box_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2245 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2246 gtk_event_box_set_visible_window (GTK_EVENT_BOX (combo_box->priv->box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2247 FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2248 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2249
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2250 gtk_container_add (GTK_CONTAINER (combo_box->priv->cell_view_frame),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2251 combo_box->priv->box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2252
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2253 gtk_widget_show_all (combo_box->priv->cell_view_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2254
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2255 g_signal_connect (combo_box->priv->box, "button_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2256 G_CALLBACK (gtk_combo_box_list_button_pressed),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2257 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2258 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2259
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2260 combo_box->priv->tree_view = gtk_tree_view_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2261 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2262 gtk_tree_selection_set_mode (sel, GTK_SELECTION_BROWSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2263 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2264 FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2265 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2266 _gtk_tree_view_set_hover_selection (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2267 TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2268 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2269 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2270 gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2271 combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2272
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2273 g_signal_connect (combo_box->priv->tree_view, "button_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2274 G_CALLBACK (gtk_combo_box_list_button_pressed),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2275 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2276 g_signal_connect (combo_box->priv->tree_view, "button_release_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2277 G_CALLBACK (gtk_combo_box_list_button_released),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2278 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2279 g_signal_connect (combo_box->priv->tree_view, "key_press_event",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2280 G_CALLBACK (gtk_combo_box_list_key_press),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2281 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2282
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2283 combo_box->priv->column = gtk_tree_view_column_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2284 gtk_tree_view_append_column (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2285 combo_box->priv->column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2286
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2287 /* sync up */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2288 for (i = combo_box->priv->cells; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2289 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2290 GSList *j;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2291 ComboCellInfo *info = (ComboCellInfo *)i->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2292
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2293 if (info->pack == GTK_PACK_START)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2294 gtk_tree_view_column_pack_start (combo_box->priv->column,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2295 info->cell, info->expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2296 else if (info->pack == GTK_PACK_END)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2297 gtk_tree_view_column_pack_end (combo_box->priv->column,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2298 info->cell, info->expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2299
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2300 for (j = info->attributes; j; j = j->next->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2301 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2302 gtk_tree_view_column_add_attribute (combo_box->priv->column,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2303 info->cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2304 j->data,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2305 GPOINTER_TO_INT (j->next->data));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2306 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2307 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2308
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2309 if (combo_box->priv->active_item != -1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2310 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2311 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2312
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2313 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2314 path = gtk_tree_path_new_from_indices (combo_box->priv->active_item, -1);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2315 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2316 char buf[32];
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2317 g_snprintf(buf, sizeof(buf), "%d", combo_box->priv->active_item);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2318 path = gtk_tree_path_new_from_string(buf);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
2319 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2320 if (path)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2321 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2322 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2323 path, NULL, FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2324 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2325 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2326 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2327
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2328 /* set sample/popup widgets */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2329 gtk_combo_box_set_popup_widget (combo_box, combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2330
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2331 gtk_widget_show (combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2332 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2333
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2334 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2335 gtk_combo_box_list_destroy (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2336 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2337 /* disconnect signals */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2338 g_signal_handlers_disconnect_matched (combo_box->priv->tree_view,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2339 G_SIGNAL_MATCH_DATA,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2340 0, 0, NULL, NULL, combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2341 g_signal_handlers_disconnect_matched (combo_box->priv->button,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2342 G_SIGNAL_MATCH_DATA,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2343 0, 0, NULL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2344 gtk_combo_box_list_button_pressed,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2345 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2346 if (combo_box->priv->box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2347 g_signal_handlers_disconnect_matched (combo_box->priv->box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2348 G_SIGNAL_MATCH_DATA,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2349 0, 0, NULL,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2350 gtk_combo_box_list_button_pressed,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2351 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2352
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2353 /* destroy things (unparent will kill the latest ref from us)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2354 * last unref on button will destroy the arrow
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2355 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2356 gtk_widget_unparent (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2357 combo_box->priv->button = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2358 combo_box->priv->arrow = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2359
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2360 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2361 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2362 g_object_set (G_OBJECT (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2363 "background_set", FALSE,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2364 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2365 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2366
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2367 if (combo_box->priv->cell_view_frame)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2368 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2369 gtk_widget_unparent (combo_box->priv->cell_view_frame);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2370 combo_box->priv->cell_view_frame = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2371 combo_box->priv->box = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2372 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2373
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2374 gtk_widget_destroy (combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2375
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2376 combo_box->priv->tree_view = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2377 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2378 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2379
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2380 /* callbacks */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2381 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2382 gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2383 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2384 if (combo_box->priv->tree_view &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2385 GTK_WIDGET_HAS_GRAB (combo_box->priv->tree_view))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2386 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2387 gtk_grab_remove (combo_box->priv->tree_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2388 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2389
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2390 if (combo_box->priv->popup_window &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2391 GTK_WIDGET_HAS_GRAB (combo_box->priv->popup_window))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2392 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2393 gtk_grab_remove (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2394 gdk_keyboard_ungrab (GDK_CURRENT_TIME);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2395 gdk_pointer_ungrab (GDK_CURRENT_TIME);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2396 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2397 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2398
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2399 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2400 gtk_combo_box_list_button_pressed (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2401 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2402 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2403 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2404 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2405
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2406 GtkWidget *ewidget = gtk_get_event_widget ((GdkEvent *)event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2407
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2408 if (ewidget == combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2409 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2410
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2411 if ((ewidget != combo_box->priv->button && ewidget != combo_box->priv->box) ||
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2412 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (combo_box->priv->button)))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2413 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2414
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2415 gtk_combo_box_popup (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2416
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2417 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2418 TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2419
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2420 combo_box->priv->popup_in_progress = TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2421
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2422 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2423 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2424
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2425 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2426 gtk_combo_box_list_button_released (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2427 GdkEventButton *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2428 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2429 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2430 gboolean ret;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2431 GtkTreePath *path = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2432
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2433 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2434
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2435 gboolean popup_in_progress = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2436
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2437 GtkWidget *ewidget = gtk_get_event_widget ((GdkEvent *)event);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2438
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2439 if (combo_box->priv->popup_in_progress)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2440 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2441 popup_in_progress = TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2442 combo_box->priv->popup_in_progress = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2443 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2444
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2445 if (ewidget != combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2446 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2447 if (ewidget == combo_box->priv->button &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2448 !popup_in_progress &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2449 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (combo_box->priv->button)))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2450 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2451 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2452 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2453 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2454
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2455 /* released outside treeview */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2456 if (ewidget != combo_box->priv->button)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2457 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2458 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2459
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2460 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2461 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2462
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2463 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2464 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2465
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2466 /* select something cool */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2467 ret = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2468 event->x, event->y,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2469 &path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2470 NULL, NULL, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2471
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2472 if (!ret)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2473 return TRUE; /* clicked outside window? */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2474
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2475 gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2476 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2477
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2478 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2479
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2480 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2481 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2482
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2483 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2484 gtk_combo_box_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2485 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2486 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2487 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2488 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2489 guint state = event->state & gtk_accelerator_get_default_mod_mask ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2490 gint items = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2491 gint index = gtk_combo_box_get_active (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2492 gint new_index;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2493
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2494 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2495 items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2496
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2497 if ((event->keyval == GDK_Down || event->keyval == GDK_KP_Down) &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2498 state == GDK_MOD1_MASK)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2499 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2500 gtk_combo_box_popup (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2501
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2502 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2503 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2504
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2505 switch (event->keyval)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2506 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2507 case GDK_Down:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2508 case GDK_KP_Down:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2509 new_index = index + 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2510 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2511 case GDK_Up:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2512 case GDK_KP_Up:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2513 new_index = index - 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2514 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2515 case GDK_Page_Up:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2516 case GDK_KP_Page_Up:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2517 case GDK_Home:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2518 case GDK_KP_Home:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2519 new_index = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2520 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2521 case GDK_Page_Down:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2522 case GDK_KP_Page_Down:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2523 case GDK_End:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2524 case GDK_KP_End:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2525 new_index = items - 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2526 break;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2527 default:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2528 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2529 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2530
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2531 if (items > 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2532 gtk_combo_box_set_active (combo_box, CLAMP (new_index, 0, items - 1));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2533
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2534 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2535 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2536
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2537 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2538 gtk_combo_box_menu_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2539 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2540 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2541 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2542 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2543 guint state = event->state & gtk_accelerator_get_default_mod_mask ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2544
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2545 if ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2546 state == GDK_MOD1_MASK)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2547 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2548 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2549
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2550 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2551 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2552
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2553 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2554 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2555
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2556 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2557 gtk_combo_box_list_key_press (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2558 GdkEventKey *event,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2559 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2560 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2561 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2562 guint state = event->state & gtk_accelerator_get_default_mod_mask ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2563
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2564 if (event->keyval == GDK_Escape ||
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2565 ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) &&
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2566 state == GDK_MOD1_MASK))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2567 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2568 /* reset active item -- this is incredibly lame and ugly */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2569 gtk_combo_box_set_active (combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2570 gtk_combo_box_get_active (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2571
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2572 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2573
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2574 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2575 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2576
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2577 if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter ||
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2578 event->keyval == GDK_space || event->keyval == GDK_KP_Space)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2579 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2580 gboolean ret = FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2581 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2582 GtkTreeModel *model = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2583
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2584 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2585 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2586 GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2587
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2588 ret = gtk_tree_selection_get_selected (sel, &model, &iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2589 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2590 if (ret)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2591 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2592 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2593
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2594 path = gtk_tree_model_get_path (model, &iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2595 if (path)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2596 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2597 gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2598 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2599 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2600 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2601
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2602 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2603
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2604 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2605 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2606
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2607 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2608 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2609
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2610 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2611 gtk_combo_box_list_row_changed (GtkTreeModel *model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2612 GtkTreePath *path,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2613 GtkTreeIter *iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2614 gpointer data)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2615 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2616 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2617 gint width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2618
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2619 width = gtk_combo_box_calc_requested_width (combo_box, path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2620
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2621 if (width > combo_box->priv->width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2622 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2623 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2624 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2625 gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2626 gtk_widget_queue_resize (combo_box->priv->cell_view);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2627 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2628 combo_box->priv->width = width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2629 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2630 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2631
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2632 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2633 * GtkCellLayout implementation
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2634 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2635 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2636 gtk_combo_box_cell_layout_pack_start (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2637 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2638 gboolean expand)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2639 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2640 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2641 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2642 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2643
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2644 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2645 g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2646
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2647 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2648
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2649 g_object_ref (G_OBJECT (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2650 gtk_object_sink (GTK_OBJECT (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2651
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2652 info = g_new0 (ComboCellInfo, 1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2653 info->cell = cell;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2654 info->expand = expand;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2655 info->pack = GTK_PACK_START;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2656
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2657 combo_box->priv->cells = g_slist_append (combo_box->priv->cells, info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2658
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2659 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2660 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2661 cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2662
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2663 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2664 gtk_tree_view_column_pack_start (combo_box->priv->column, cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2665
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2666 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2667 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2668 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2669 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2670
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2671 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2672 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2673 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2674 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2675
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2676 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2677 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2678 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2679 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2680
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2681 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (view), cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2682 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2683 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2684 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2685 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2686
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2687 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2688 gtk_combo_box_cell_layout_pack_end (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2689 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2690 gboolean expand)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2691 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2692 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2693 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2694 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2695
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2696 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2697 g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2698
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2699 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2700
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2701 g_object_ref (G_OBJECT (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2702 gtk_object_sink (GTK_OBJECT (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2703
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2704 info = g_new0 (ComboCellInfo, 1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2705 info->cell = cell;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2706 info->expand = expand;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2707 info->pack = GTK_PACK_END;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2709 combo_box->priv->cells = g_slist_append (combo_box->priv->cells, info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2710
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2711 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2712 gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2713 cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2714
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2715 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2716 gtk_tree_view_column_pack_end (combo_box->priv->column, cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2717
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2718 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2719 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2720 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2721 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2722
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2723 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2724 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2725 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2726 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2727
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2728 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2729 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2730 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2731 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2732
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2733 gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (view), cell, expand);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2734 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2735 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2736 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2737 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2738
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2739 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2740 gtk_combo_box_cell_layout_clear (GtkCellLayout *layout)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2741 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2742 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2743 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2744 GSList *i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2745
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2746 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2747
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2748 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2749
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2750 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2751 gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo_box->priv->cell_view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2752
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2753 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2754 gtk_tree_view_column_clear (combo_box->priv->column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2755
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2756 for (i = combo_box->priv->cells; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2757 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2758 ComboCellInfo *info = (ComboCellInfo *)i->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2759
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2760 gtk_combo_box_cell_layout_clear_attributes (layout, info->cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2761 g_object_unref (G_OBJECT (info->cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2762 g_free (info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2763 i->data = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2764 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2765 g_slist_free (combo_box->priv->cells);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2766 combo_box->priv->cells = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2767
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2768 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2769 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2770 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2771 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2772
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2773 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2774 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2775 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2776 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2777
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2778 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2779 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2780 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2781 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2782
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2783 gtk_cell_layout_clear (GTK_CELL_LAYOUT (view));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2784 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2785 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2786 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2787 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2788
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2789 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2790 gtk_combo_box_cell_layout_add_attribute (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2791 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2792 const gchar *attribute,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2793 gint column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2794 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2795 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2796 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2797 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2798
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2799 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2800 g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2801
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2802 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2803
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2804 info = gtk_combo_box_get_cell_info (combo_box, cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2805
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2806 info->attributes = g_slist_prepend (info->attributes,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2807 GINT_TO_POINTER (column));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2808 info->attributes = g_slist_prepend (info->attributes,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2809 g_strdup (attribute));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2810
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2811 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2812 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2813 cell, attribute, column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2814
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2815 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2816 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box->priv->column),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2817 cell, attribute, column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2818
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2819 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2820 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2821 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2822 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2823
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2824 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2825 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2826 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2827 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2828
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2829 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2830 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2831 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2832 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2833
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2834 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (view), cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2835 attribute, column);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2836 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2837 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2838 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2839
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2840 gtk_widget_queue_resize (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2841 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2842
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2843 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2844 gtk_combo_box_cell_layout_set_cell_data_func (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2845 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2846 GtkCellLayoutDataFunc func,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2847 gpointer func_data,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2848 GDestroyNotify destroy)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2849 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2850 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2851 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2852 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2853
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2854 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2855
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2856 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2857
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2858 info = gtk_combo_box_get_cell_info (combo_box, cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2859 g_return_if_fail (info != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2860
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2861 if (info->destroy)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2862 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2863 GDestroyNotify d = info->destroy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2864
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2865 info->destroy = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2866 d (info->func_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2867 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2868
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2869 info->func = func;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2870 info->func_data = func_data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2871 info->destroy = destroy;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2872
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2873 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2874 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo_box->priv->cell_view), cell, func, func_data, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2875
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2876 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2877 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo_box->priv->column), cell, func, func_data, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2878
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2879 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2880 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2881 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2882 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2883
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2884 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2885 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2886 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2887 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2888
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2889 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2890 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2891 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2892 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2893
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2894 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (view), cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2895 func, func_data, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2896 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2897 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2898 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2899
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2900 gtk_widget_queue_resize (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2901 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2902
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2903 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2904 gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2905 GtkCellRenderer *cell)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2906 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2907 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2908 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2909 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2910 GSList *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2911
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2912 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2913 g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2914
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2915 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2916
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2917 info = gtk_combo_box_get_cell_info (combo_box, cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2918 if (info)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2919 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2920 list = info->attributes;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2921 while (list && list->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2922 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2923 g_free (list->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2924 list = list->next->next;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2925 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2926 g_slist_free (info->attributes);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2927 info->attributes = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2928 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2929
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2930 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2931 gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (combo_box->priv->cell_view), cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2932
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2933 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2934 gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (combo_box->priv->column), cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2935
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2936 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2937 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2938 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2939 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2940
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2941 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2942 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2943 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2944 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2945
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2946 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2947 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2948 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2949 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2950
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2951 gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (view), cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2952 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2953 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2954 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2955
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2956 gtk_widget_queue_resize (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2957 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2958
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2959 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2960 gtk_combo_box_cell_layout_reorder (GtkCellLayout *layout,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2961 GtkCellRenderer *cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2962 gint position)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2963 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2964 ComboCellInfo *info;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2965 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2966 GtkWidget *menu;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2967 GSList *link;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2968
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2969 g_return_if_fail (GTK_IS_COMBO_BOX (layout));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2970 g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2971
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2972 combo_box = GTK_COMBO_BOX (layout);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2973
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2974 info = gtk_combo_box_get_cell_info (combo_box, cell);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2975
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2976 g_return_if_fail (info != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2977 g_return_if_fail (position >= 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2978
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2979 link = g_slist_find (combo_box->priv->cells, info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2980
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2981 g_return_if_fail (link != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2982
22046
fac856b76384 Plug a small leak.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
2983 combo_box->priv->cells = g_slist_delete_link (combo_box->priv->cells, link);
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2984 combo_box->priv->cells = g_slist_insert (combo_box->priv->cells, info,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2985 position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2986
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2987 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2988 gtk_cell_layout_reorder (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2989 cell, position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2990
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2991 if (combo_box->priv->column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2992 gtk_cell_layout_reorder (GTK_CELL_LAYOUT (combo_box->priv->column),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2993 cell, position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2994
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2995 menu = combo_box->priv->popup_widget;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2996 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2997 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2998 GList *i, *list;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
2999
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3000 list = gtk_container_get_children (GTK_CONTAINER (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3001 for (i = list; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3002 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3003 GtkCellView *view;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3004
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3005 if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3006 view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3007 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3008 view = GTK_CELL_VIEW (i->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3009
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3010 gtk_cell_layout_reorder (GTK_CELL_LAYOUT (view), cell, position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3011 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3012 g_list_free (list);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3013 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3014
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3015 gtk_widget_queue_draw (GTK_WIDGET (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3016 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3017
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3018 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3019 * public API
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3020 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3021
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3022 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3023 * gtk_combo_box_new:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3024 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3025 * Creates a new empty #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3026 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3027 * Return value: A new #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3028 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3029 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3030 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3031 GtkWidget *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3032 gtk_combo_box_new (void)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3033 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3034 return GTK_WIDGET (g_object_new (GTK_TYPE_COMBO_BOX, NULL));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3035 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3036
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3037 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3038 * gtk_combo_box_new_with_model:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3039 * @model: A #GtkTreeModel.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3040 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3041 * Creates a new #GtkComboBox with the model initialized to @model.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3042 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3043 * Return value: A new #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3044 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3045 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3046 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3047 GtkWidget *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3048 gtk_combo_box_new_with_model (GtkTreeModel *model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3049 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3050 GtkComboBox *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3051
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3052 g_return_val_if_fail (GTK_IS_TREE_MODEL (model), NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3053
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3054 combo_box = GTK_COMBO_BOX (g_object_new (GTK_TYPE_COMBO_BOX,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3055 "model", model,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3056 NULL));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3057
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3058 return GTK_WIDGET (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3059 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3060
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3061 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3062 * gtk_combo_box_set_wrap_width:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3063 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3064 * @width: Preferred number of columns.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3065 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3066 * Sets the wrap width of @combo_box to be @width. The wrap width is basically
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3067 * the preferred number of columns when you want to the popup to be layed out
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3068 * in a table.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3069 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3070 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3071 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3072 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3073 gtk_combo_box_set_wrap_width (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3074 gint width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3075 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3076 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3077 g_return_if_fail (width >= 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3078
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3079 if (width != combo_box->priv->wrap_width)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3080 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3081 combo_box->priv->wrap_width = width;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3082
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3083 gtk_combo_box_check_appearance (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3084 gtk_combo_box_relayout (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3085
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3086 g_object_notify (G_OBJECT (combo_box), "wrap_width");
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3087 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3088 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3089
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3090 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3091 * gtk_combo_box_set_row_span_column:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3092 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3093 * @row_span: A column in the model passed during construction.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3094 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3095 * Sets the column with row span information for @combo_box to be @row_span.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3096 * The row span column contains integers which indicate how many rows
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3097 * an item should span.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3098 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3099 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3100 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3101 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3102 gtk_combo_box_set_row_span_column (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3103 gint row_span)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3104 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3105 gint col;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3106
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3107 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3108
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3109 col = gtk_tree_model_get_n_columns (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3110 g_return_if_fail (row_span >= 0 && row_span < col);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3111
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3112 if (row_span != combo_box->priv->row_column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3113 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3114 combo_box->priv->row_column = row_span;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3115
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3116 gtk_combo_box_relayout (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3117
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3118 g_object_notify (G_OBJECT (combo_box), "row_span_column");
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3119 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3120 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3121
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3122 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3123 * gtk_combo_box_set_column_span_column:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3124 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3125 * @column_span: A column in the model passed during construction.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3126 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3127 * Sets the column with column span information for @combo_box to be
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3128 * @column_span. The column span column contains integers which indicate
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3129 * how many columns an item should span.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3130 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3131 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3132 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3133 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3134 gtk_combo_box_set_column_span_column (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3135 gint column_span)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3136 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3137 gint col;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3138
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3139 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3140
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3141 col = gtk_tree_model_get_n_columns (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3142 g_return_if_fail (column_span >= 0 && column_span < col);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3143
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3144 if (column_span != combo_box->priv->col_column)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3145 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3146 combo_box->priv->col_column = column_span;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3147
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3148 gtk_combo_box_relayout (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3149
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3150 g_object_notify (G_OBJECT (combo_box), "column_span_column");
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3151 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3152 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3153
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3154 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3155 * gtk_combo_box_get_active:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3156 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3157 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3158 * Returns the index of the currently active item, or -1 if there's no
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3159 * active item.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3160 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3161 * Return value: An integer which is the index of the currently active item, or
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3162 * -1 if there's no active item.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3163 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3164 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3165 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3166 gint
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3167 gtk_combo_box_get_active (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3168 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3169 g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3170
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3171 return combo_box->priv->active_item;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3172 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3173
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3174 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3175 * gtk_combo_box_set_active:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3176 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3177 * @index_: An index in the model passed during construction, or -1 to have
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3178 * no active item.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3179 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3180 * Sets the active item of @combo_box to be the item at @index.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3181 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3182 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3183 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3184 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3185 gtk_combo_box_set_active (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3186 gint index_)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3187 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3188 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3189 /* -1 means "no item selected" */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3190 g_return_if_fail (index_ >= -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3191
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3192 if (combo_box->priv->active_item == index_)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3193 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3194
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3195 gtk_combo_box_set_active_internal (combo_box, index_);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3196 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3197
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3198 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3199 gtk_combo_box_set_active_internal (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3200 gint index)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3201 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3202 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3203
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3204 combo_box->priv->active_item = index;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3205
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3206 if (index == -1)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3207 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3208 if (combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3209 gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view)));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3210 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3211 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3212 GtkMenu *menu = GTK_MENU (combo_box->priv->popup_widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3213
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3214 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3215 gtk_menu_set_active (menu, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3216 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3217
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3218 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3219 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3220 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3221 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3222 {
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3223 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3224 path = gtk_tree_path_new_from_indices (index, -1);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3225 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3226 char buf[32];
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3227 g_snprintf(buf, sizeof(buf), "%d", index);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3228 path = gtk_tree_path_new_from_string(buf);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3229 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3230
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3231 if (combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3232 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view), path, NULL, FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3233 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3234 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3235 GtkMenu *menu = GTK_MENU (combo_box->priv->popup_widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3236
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3237 if (GTK_IS_MENU (menu))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3238 gtk_menu_set_active (GTK_MENU (menu), index);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3239 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3240
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3241 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3242 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3243
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3244 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3245 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3246
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3247 g_signal_emit_by_name (combo_box, "changed", NULL, NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3248 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3249
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3250
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3251 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3252 * gtk_combo_box_get_active_iter:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3253 * @combo_box: A #GtkComboBox
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3254 * @iter: The uninitialized #GtkTreeIter.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3255 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3256 * Sets @iter to point to the current active item, if it exists.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3257 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3258 * Return value: %TRUE, if @iter was set
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3259 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3260 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3261 **/
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3262 gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3263 gtk_combo_box_get_active_iter (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3264 GtkTreeIter *iter)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3265 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3266 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3267 gint active;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3268 gboolean retval;
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3269 #if !GTK_CHECK_VERSION(2,2,0)
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3270 char buf[32];
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3271 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3272
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3273 g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), FALSE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3274
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3275 active = gtk_combo_box_get_active (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3276 if (active < 0)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3277 return FALSE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3278
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3279 #if GTK_CHECK_VERSION(2,2,0)
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3280 path = gtk_tree_path_new_from_indices (active, -1);
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3281 #else
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3282 g_snprintf(buf, sizeof(buf), "%d", active);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3283 path = gtk_tree_path_new_from_string(buf);
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10708
diff changeset
3284 #endif
10708
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3285 retval = gtk_tree_model_get_iter (gtk_combo_box_get_model (combo_box),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3286 iter, path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3287 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3288
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3289 return retval;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3290 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3291
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3292 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3293 * gtk_combo_box_set_active_iter:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3294 * @combo_box: A #GtkComboBox
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3295 * @iter: The #GtkTreeIter.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3296 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3297 * Sets the current active item to be the one referenced by @iter.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3298 * @iter must correspond to a path of depth one.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3299 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3300 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3301 **/
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3302 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3303 gtk_combo_box_set_active_iter (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3304 GtkTreeIter *iter)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3305 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3306 GtkTreePath *path;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3307
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3308 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3309
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3310 path = gtk_tree_model_get_path (gtk_combo_box_get_model (combo_box), iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3311 g_return_if_fail (path != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3312 g_return_if_fail (gtk_tree_path_get_depth (path) == 1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3313
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3314 gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3315 gtk_tree_path_free (path);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3316 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3317
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3318 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3319 * gtk_combo_box_set_model:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3320 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3321 * @model: A #GtkTreeModel.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3322 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3323 * Sets the model used by @combo_box to be @model. Will unset a previously set
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3324 * model (if applicable). If @model is %NULL, then it will unset the model.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3325 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3326 * Note that this function does not clear the cell renderers, you have to
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3327 * call gtk_combo_box_cell_layout_clear() yourself if you need to set up
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3328 * different cell renderers for the new model.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3329 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3330 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3331 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3332 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3333 gtk_combo_box_set_model (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3334 GtkTreeModel *model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3335 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3336 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3337
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3338 if (!model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3339 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3340 gtk_combo_box_unset_model (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3341 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3342 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3343
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3344 g_return_if_fail (GTK_IS_TREE_MODEL (model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3345
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3346 if (model == combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3347 return;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3348
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3349 if (combo_box->priv->model)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3350 gtk_combo_box_unset_model (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3351
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3352 combo_box->priv->model = model;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3353 g_object_ref (G_OBJECT (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3354
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3355 combo_box->priv->inserted_id =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3356 g_signal_connect (combo_box->priv->model, "row_inserted",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3357 G_CALLBACK (gtk_combo_box_model_row_inserted),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3358 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3359 combo_box->priv->deleted_id =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3360 g_signal_connect (combo_box->priv->model, "row_deleted",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3361 G_CALLBACK (gtk_combo_box_model_row_deleted),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3362 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3363 combo_box->priv->reordered_id =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3364 g_signal_connect (combo_box->priv->model, "rows_reordered",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3365 G_CALLBACK (gtk_combo_box_model_rows_reordered),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3366 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3367 combo_box->priv->changed_id =
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3368 g_signal_connect (combo_box->priv->model, "row_changed",
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3369 G_CALLBACK (gtk_combo_box_model_row_changed),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3370 combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3371
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3372 if (combo_box->priv->tree_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3373 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3374 /* list mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3375 gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3376 combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3377 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3378 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3379 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3380 /* menu mode */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3381 if (combo_box->priv->popup_widget)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3382 gtk_combo_box_menu_fill (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3383
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3384 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3385
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3386 if (combo_box->priv->cell_view)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3387 gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3388 combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3389 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3390
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3391 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3392 * gtk_combo_box_get_model
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3393 * @combo_box: A #GtkComboBox.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3394 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3395 * Returns the #GtkTreeModel which is acting as data source for @combo_box.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3396 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3397 * Return value: A #GtkTreeModel which was passed during construction.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3398 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3399 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3400 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3401 GtkTreeModel *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3402 gtk_combo_box_get_model (GtkComboBox *combo_box)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3403 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3404 g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3405
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3406 return combo_box->priv->model;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3407 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3408
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3409
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3410 /* convenience API for simple text combos */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3411
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3412 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3413 * gtk_combo_box_new_text:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3414 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3415 * Convenience function which constructs a new text combo box, which is a
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3416 * #GtkComboBox just displaying strings. If you use this function to create
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3417 * a text combo box, you should only manipulate its data source with the
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3418 * following convenience functions: gtk_combo_box_append_text(),
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3419 * gtk_combo_box_insert_text(), gtk_combo_box_prepend_text() and
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3420 * gtk_combo_box_remove_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3421 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3422 * Return value: A new text combo box.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3423 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3424 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3425 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3426 GtkWidget *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3427 gtk_combo_box_new_text (void)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3428 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3429 GtkWidget *combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3430 GtkCellRenderer *cell;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3431 GtkListStore *store;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3432
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3433 store = gtk_list_store_new (1, G_TYPE_STRING);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3434 combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3435 g_object_unref (store);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3436
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3437 cell = gtk_cell_renderer_text_new ();
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3438 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3439 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3440 "text", 0,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3441 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3442
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3443 return combo_box;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3444 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3445
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3446 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3447 * gtk_combo_box_append_text:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3448 * @combo_box: A #GtkComboBox constructed using gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3449 * @text: A string.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3450 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3451 * Appends @string to the list of strings stored in @combo_box. Note that
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3452 * you can only use this function with combo boxes constructed with
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3453 * gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3454 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3455 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3456 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3457 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3458 gtk_combo_box_append_text (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3459 const gchar *text)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3460 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3461 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3462 GtkListStore *store;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3463
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3464 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3465 g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3466 g_return_if_fail (text != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3467
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3468 store = GTK_LIST_STORE (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3469
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3470 gtk_list_store_append (store, &iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3471 gtk_list_store_set (store, &iter, 0, text, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3472 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3473
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3474 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3475 * gtk_combo_box_insert_text:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3476 * @combo_box: A #GtkComboBox constructed using gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3477 * @position: An index to insert @text.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3478 * @text: A string.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3479 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3480 * Inserts @string at @position in the list of strings stored in @combo_box.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3481 * Note that you can only use this function with combo boxes constructed
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3482 * with gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3483 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3484 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3485 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3486 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3487 gtk_combo_box_insert_text (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3488 gint position,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3489 const gchar *text)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3490 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3491 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3492 GtkListStore *store;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3493
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3494 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3495 g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3496 g_return_if_fail (position >= 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3497 g_return_if_fail (text != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3498
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3499 store = GTK_LIST_STORE (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3500
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3501 gtk_list_store_insert (store, &iter, position);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3502 gtk_list_store_set (store, &iter, 0, text, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3503 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3504
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3505 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3506 * gtk_combo_box_prepend_text:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3507 * @combo_box: A #GtkComboBox constructed with gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3508 * @text: A string.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3509 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3510 * Prepends @string to the list of strings stored in @combo_box. Note that
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3511 * you can only use this function with combo boxes constructed with
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3512 * gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3513 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3514 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3515 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3516 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3517 gtk_combo_box_prepend_text (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3518 const gchar *text)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3519 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3520 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3521 GtkListStore *store;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3522
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3523 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3524 g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3525 g_return_if_fail (text != NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3526
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3527 store = GTK_LIST_STORE (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3528
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3529 gtk_list_store_prepend (store, &iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3530 gtk_list_store_set (store, &iter, 0, text, -1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3531 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3532
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3533 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3534 * gtk_combo_box_remove_text:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3535 * @combo_box: A #GtkComboBox constructed with gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3536 * @position: Index of the item to remove.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3537 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3538 * Removes the string at @position from @combo_box. Note that you can only use
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3539 * this function with combo boxes constructed with gtk_combo_box_new_text().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3540 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3541 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3542 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3543 void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3544 gtk_combo_box_remove_text (GtkComboBox *combo_box,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3545 gint position)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3546 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3547 GtkTreeIter iter;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3548 GtkListStore *store;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3549
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3550 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3551 g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3552 g_return_if_fail (position >= 0);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3553
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3554 store = GTK_LIST_STORE (combo_box->priv->model);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3555
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3556 if (gtk_tree_model_iter_nth_child (combo_box->priv->model, &iter,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3557 NULL, position))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3558 gtk_list_store_remove (store, &iter);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3559 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3560
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3561 static gboolean
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3562 gtk_combo_box_mnemonic_activate (GtkWidget *widget,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3563 gboolean group_cycling)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3564 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3565 GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3566
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3567 gtk_widget_grab_focus (combo_box->priv->button);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3568
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3569 return TRUE;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3570 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3571
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3572 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3573 gtk_combo_box_destroy (GtkObject *object)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3574 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3575 GtkComboBox *combo_box = GTK_COMBO_BOX (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3576
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3577 gtk_combo_box_popdown (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3578
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3579 combo_box->priv->destroying = 1;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3580
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3581 GTK_OBJECT_CLASS (parent_class)->destroy (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3582 combo_box->priv->cell_view = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3583
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3584 combo_box->priv->destroying = 0;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3585 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3586
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3587 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3588 gtk_combo_box_finalize (GObject *object)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3589 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3590 GtkComboBox *combo_box = GTK_COMBO_BOX (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3591 GSList *i;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3592
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3593 if (GTK_IS_MENU (combo_box->priv->popup_widget))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3594 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3595 gtk_combo_box_menu_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3596 gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3597 combo_box->priv->popup_widget = NULL;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3598 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3599
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3600 if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3601 gtk_combo_box_list_destroy (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3602
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3603 if (combo_box->priv->popup_window)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3604 gtk_widget_destroy (combo_box->priv->popup_window);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3605
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3606 gtk_combo_box_unset_model (combo_box);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3607
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3608 for (i = combo_box->priv->cells; i; i = i->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3609 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3610 ComboCellInfo *info = (ComboCellInfo *)i->data;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3611 GSList *list = info->attributes;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3612
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3613 if (info->destroy)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3614 info->destroy (info->func_data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3615
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3616 while (list && list->next)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3617 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3618 g_free (list->data);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3619 list = list->next->next;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3620 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3621 g_slist_free (info->attributes);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3622
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3623 g_object_unref (G_OBJECT (info->cell));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3624 g_free (info);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3625 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3626 g_slist_free (combo_box->priv->cells);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3627
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3628 g_free (combo_box->priv);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3629
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3630 G_OBJECT_CLASS (parent_class)->finalize (object);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3631 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3632
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3633
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3634 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3635 * Code below this point has been pulled in from gtkmenu.c in 2.4.14
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3636 * and is needed to provide gtk_menu_attach()
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3637 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3638
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3639 typedef struct
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3640 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3641 gint left_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3642 gint right_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3643 gint top_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3644 gint bottom_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3645 gint effective_left_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3646 gint effective_right_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3647 gint effective_top_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3648 gint effective_bottom_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3649 } AttachInfo;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3650
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3651 #define ATTACH_INFO_KEY "gtk-menu-child-attach-info-key"
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3652
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3653 static AttachInfo *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3654 get_attach_info (GtkWidget *child)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3655 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3656 GObject *object = G_OBJECT (child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3657 AttachInfo *ai = g_object_get_data (object, ATTACH_INFO_KEY);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3658
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3659 if (!ai)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3660 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3661 ai = g_new0 (AttachInfo, 1);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3662 g_object_set_data_full (object, ATTACH_INFO_KEY, ai, g_free);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3663 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3664
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3665 return ai;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3666 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3667
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3668 /**
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3669 * gtk_menu_attach:
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3670 * @menu: a #GtkMenu.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3671 * @child: a #GtkMenuItem.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3672 * @left_attach: The column number to attach the left side of the item to.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3673 * @right_attach: The column number to attach the right side of the item to.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3674 * @top_attach: The row number to attach the top of the item to.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3675 * @bottom_attach: The row number to attach the bottom of the item to.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3676 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3677 * Adds a new #GtkMenuItem to a (table) menu. The number of 'cells' that
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3678 * an item will occupy is specified by @left_attach, @right_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3679 * @top_attach and @bottom_attach. These each represent the leftmost,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3680 * rightmost, uppermost and lower column and row numbers of the table.
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3681 * (Columns and rows are indexed from zero).
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3682 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3683 * Note that this function is not related to gtk_menu_detach().
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3684 *
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3685 * Since: 2.4
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3686 **/
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3687 static void
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3688 gtk_menu_attach (GtkMenu *menu,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3689 GtkWidget *child,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3690 guint left_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3691 guint right_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3692 guint top_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3693 guint bottom_attach)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3694 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3695 GtkMenuShell *menu_shell;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3696
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3697 g_return_if_fail (GTK_IS_MENU (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3698 g_return_if_fail (GTK_IS_MENU_ITEM (child));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3699 g_return_if_fail (child->parent == NULL ||
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3700 child->parent == GTK_WIDGET (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3701 g_return_if_fail (left_attach < right_attach);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3702 g_return_if_fail (top_attach < bottom_attach);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3703
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3704 menu_shell = GTK_MENU_SHELL (menu);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3705
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3706 if (!child->parent)
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3707 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3708 AttachInfo *ai = get_attach_info (child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3709
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3710 ai->left_attach = left_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3711 ai->right_attach = right_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3712 ai->top_attach = top_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3713 ai->bottom_attach = bottom_attach;
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3714
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3715 menu_shell->children = g_list_append (menu_shell->children, child);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3716
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3717 gtk_widget_set_parent (child, GTK_WIDGET (menu));
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3718
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3719 /*
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3720 menu_queue_resize (menu);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3721 */
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3722 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3723 else
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3724 {
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3725 gtk_container_child_set (GTK_CONTAINER (child->parent), child,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3726 "left_attach", left_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3727 "right_attach", right_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3728 "top_attach", top_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3729 "bottom_attach", bottom_attach,
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3730 NULL);
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3731 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3732 }
a32e607690ca [gaim-migrate @ 12297]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
diff changeset
3733 #endif /* Gtk 2.4 */
15600
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3734
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3735 gchar *
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3736 gtk_combo_box_get_active_text (GtkComboBox *combo_box)
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3737 {
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3738 GtkTreeIter iter;
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3739 gchar *text = NULL;
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3740
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3741 /* g_return_val_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model), NULL); */
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3742
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3743 if (gtk_combo_box_get_active_iter (combo_box, &iter))
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3744 gtk_tree_model_get (gtk_combo_box_get_model(combo_box), &iter,
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3745 0, &text, -1);
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3746 return text;
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3747 }
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3748
393bc032b053 sf patch #1640011, from Celso Pinto
Mark Doliner <markdoliner@pidgin.im>
parents: 15562
diff changeset
3749 #endif

mercurial