finch/libgnt/gntmenu.c

Sun, 01 Jul 2007 12:21:30 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Sun, 01 Jul 2007 12:21:30 +0000
changeset 18558
1a90a2b56443
parent 18132
6a8cc9df9fdc
child 18615
e93a1eb0fad7
child 18624
03d4eb6b6684
permissions
-rw-r--r--

Resize tree-columns nicely when the tree is resized. We can tell it to
set a fixed with for a column, or maintain the width-ratio when resizing.

18114
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
1 /**
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
2 * GNT - The GLib Ncurses Toolkit
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
3 *
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
4 * GNT is the legal property of its developers, whose names are too numerous
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
6 * source distribution.
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
7 *
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
8 * This library is free software; you can redistribute it and/or modify
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
9 * it under the terms of the GNU General Public License as published by
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
11 * (at your option) any later version.
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
12 *
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
13 * This program is distributed in the hope that it will be useful,
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
16 * GNU General Public License for more details.
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
17 *
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
18 * You should have received a copy of the GNU General Public License
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
19 * along with this program; if not, write to the Free Software
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
21 */
adb3cfadc125 Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15991
diff changeset
22
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 #include "gntmenu.h"
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
24 #include "gntmenuitemcheck.h"
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 #include <string.h>
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28 enum
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
30 SIGS = 1,
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31 };
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33 static GntTreeClass *parent_class = NULL;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34
14678
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
35 static void (*org_draw)(GntWidget *wid);
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
36 static void (*org_destroy)(GntWidget *wid);
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
37 static void (*org_map)(GntWidget *wid);
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
38 static gboolean (*org_key_pressed)(GntWidget *w, const char *t);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41 gnt_menu_draw(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
42 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
43 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
44 GList *iter;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
45 chtype type;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
46 int i;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
47
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
48 if (menu->type == GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 werase(widget->window);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
52 for (i = 0, iter = menu->list; iter; iter = iter->next, i++) {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
53 GntMenuItem *item = GNT_MENU_ITEM(iter->data);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54 type = ' ' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 if (i == menu->selected)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56 type |= A_REVERSE;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 item->priv.x = getcurx(widget->window) + widget->priv.x;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58 item->priv.y = getcury(widget->window) + widget->priv.y + 1;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
59 wbkgdset(widget->window, type);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60 wprintw(widget->window, " %s ", item->text);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
61 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 org_draw(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
64 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
65
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
66 GNTDEBUG;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
67 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
68
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
69 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 gnt_menu_size_request(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
71 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
73
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
74 if (menu->type == GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75 widget->priv.height = 1;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
76 widget->priv.width = getmaxx(stdscr);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
77 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78 widget->priv.height = g_list_length(menu->list) + 2;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 widget->priv.width = 25; /* XXX: */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
82
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
83 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
84 menu_tree_add(GntMenu *menu, GntMenuItem *item, GntMenuItem *parent)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
85 {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
86 if (GNT_IS_MENU_ITEM_CHECK(item)) {
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
87 gnt_tree_add_choice(GNT_TREE(menu), item,
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
88 gnt_tree_create_row(GNT_TREE(menu), item->text, " "), parent, NULL);
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
89 gnt_tree_set_choice(GNT_TREE(menu), item, gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)));
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
90 } else
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
91 gnt_tree_add_row_last(GNT_TREE(menu), item,
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
92 gnt_tree_create_row(GNT_TREE(menu), item->text, item->submenu ? ">" : " "), parent);
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
93
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
94 if (0 && item->submenu) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
95 GntMenu *sub = GNT_MENU(item->submenu);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
96 GList *iter;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
97 for (iter = sub->list; iter; iter = iter->next) {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
98 GntMenuItem *it = GNT_MENU_ITEM(iter->data);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
99 menu_tree_add(menu, it, item);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
100 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
101 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
102 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105 gnt_menu_map(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
106 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
107 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
108
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
109 if (menu->type == GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
110 gnt_widget_size_request(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
111 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
112 /* Populate the tree */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
113 GList *iter;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
114 gnt_tree_remove_all(GNT_TREE(widget));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
115 for (iter = menu->list; iter; iter = iter->next) {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
116 GntMenuItem *item = GNT_MENU_ITEM(iter->data);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
117 menu_tree_add(menu, item, NULL);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
118 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
119 org_map(widget);
14678
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
120 gnt_tree_adjust_columns(GNT_TREE(widget));
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
121 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
122 GNTDEBUG;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
123 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
124
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
125 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
126 menuitem_activate(GntMenu *menu, GntMenuItem *item)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
127 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
128 if (item) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
129 if (item->submenu) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
130 GntMenu *sub = GNT_MENU(item->submenu);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
131 menu->submenu = sub;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
132 sub->type = GNT_MENU_POPUP; /* Submenus are *never* toplevel */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
133 sub->parentmenu = menu;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
134 if (menu->type != GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
135 GntWidget *widget = GNT_WIDGET(menu);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
136 item->priv.x = widget->priv.x + widget->priv.width - 1;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
137 item->priv.y = widget->priv.y + gnt_tree_get_selection_visible_line(GNT_TREE(menu));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
138 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
139 gnt_widget_set_position(GNT_WIDGET(sub), item->priv.x, item->priv.y);
14968
2b1ed06a4773 [gaim-migrate @ 17678]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
140 GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(sub), GNT_WIDGET_INVISIBLE);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
141 gnt_widget_draw(GNT_WIDGET(sub));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
142 } else if (item->callback) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
143 item->callback(item, item->callbackdata);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
144 while (menu) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145 gnt_widget_hide(GNT_WIDGET(menu));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
146 menu = menu->parentmenu;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
147 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
148 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
149 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
150 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
151
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
152 static gboolean
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
153 gnt_menu_key_pressed(GntWidget *widget, const char *text)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
154 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
155 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
156 int current = menu->selected;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
157
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
158 if (menu->submenu) {
15862
895c0f69faa0 Make sure unbound key-combinations are handled properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14968
diff changeset
159 do menu = menu->submenu; while (menu->submenu);
895c0f69faa0 Make sure unbound key-combinations are handled properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14968
diff changeset
160 return (gnt_widget_key_pressed(GNT_WIDGET(menu), text));
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
161 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
163 if (text[0] == 27 && text[1] == 0) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
164 /* Escape closes menu */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 GntMenu *par = menu->parentmenu;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166 if (par != NULL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 par->submenu = NULL;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
168 gnt_widget_hide(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
169 } else
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
170 gnt_widget_hide(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
171 return TRUE;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
172 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
173
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
174 if (menu->type == GNT_MENU_TOPLEVEL) {
14938
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
175 if (strcmp(text, GNT_KEY_LEFT) == 0) {
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
176 menu->selected--;
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
177 if (menu->selected < 0)
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
178 menu->selected = g_list_length(menu->list) - 1;
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
179 } else if (strcmp(text, GNT_KEY_RIGHT) == 0) {
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
180 menu->selected++;
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
181 if (menu->selected >= g_list_length(menu->list))
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
182 menu->selected = 0;
ee27e45919ef [gaim-migrate @ 17645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14907
diff changeset
183 } else if (strcmp(text, GNT_KEY_ENTER) == 0) {
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 gnt_widget_activate(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
187 if (current != menu->selected) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188 gnt_widget_draw(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 return TRUE;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
192 return org_key_pressed(widget, text);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 return FALSE;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
196 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
197
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
199 gnt_menu_destroy(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
201 GntMenu *menu = GNT_MENU(widget);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
202 g_list_foreach(menu->list, (GFunc)g_object_unref, NULL);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 g_list_free(menu->list);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 org_destroy(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207 static void
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
208 gnt_menu_toggled(GntTree *tree, gpointer key)
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
209 {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
210 GntMenuItem *item = GNT_MENU_ITEM(key);
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
211 GntMenu *menu = GNT_MENU(tree);
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
212 gboolean check = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item));
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
213 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), !check);
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
214 if (item->callback)
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
215 item->callback(item, item->callbackdata);
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
216 while (menu) {
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
217 gnt_widget_hide(GNT_WIDGET(menu));
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
218 menu = menu->parentmenu;
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
219 }
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
220 }
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
221
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
222 static void
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223 gnt_menu_activate(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226 GntMenuItem *item;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228 if (menu->type == GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229 item = g_list_nth_data(menu->list, menu->selected);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
231 item = gnt_tree_get_selection_data(GNT_TREE(menu));
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
234 if (item) {
15991
1efb6bd8ba3f Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15906
diff changeset
235 if (GNT_IS_MENU_ITEM_CHECK(item))
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
236 gnt_menu_toggled(GNT_TREE(widget), item);
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
237 else
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
238 menuitem_activate(menu, item);
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
239 }
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
241
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
242 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243 gnt_menu_hide(GntWidget *widget)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244 {
16779
006f50afb7a6 Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents: 15991
diff changeset
245 GntMenu *sub, *menu = GNT_MENU(widget);
006f50afb7a6 Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents: 15991
diff changeset
246
006f50afb7a6 Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents: 15991
diff changeset
247 while ((sub = menu->submenu))
006f50afb7a6 Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents: 15991
diff changeset
248 gnt_widget_hide(GNT_WIDGET(sub));
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
249 if (menu->parentmenu)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
250 menu->parentmenu->submenu = NULL;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
251 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
252
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
253 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
254 gnt_menu_class_init(GntMenuClass *klass)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
256 GntWidgetClass *wid_class = GNT_WIDGET_CLASS(klass);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
257 parent_class = GNT_TREE_CLASS(klass);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
259 org_destroy = wid_class->destroy;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
260 org_map = wid_class->map;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
261 org_draw = wid_class->draw;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 org_key_pressed = wid_class->key_pressed;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
263
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
264 wid_class->destroy = gnt_menu_destroy;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
265 wid_class->draw = gnt_menu_draw;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266 wid_class->map = gnt_menu_map;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
267 wid_class->size_request = gnt_menu_size_request;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
268 wid_class->key_pressed = gnt_menu_key_pressed;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 wid_class->activate = gnt_menu_activate;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 wid_class->hide = gnt_menu_hide;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
271
14905
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
272 parent_class->toggled = gnt_menu_toggled;
23f31a7acc73 [gaim-migrate @ 17612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14791
diff changeset
273
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274 GNTDEBUG;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
275 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
276
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
277 static void
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
278 gnt_menu_init(GTypeInstance *instance, gpointer class)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
279 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
280 GntWidget *widget = GNT_WIDGET(instance);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
281 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_SHADOW | GNT_WIDGET_NO_BORDER |
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14938
diff changeset
282 GNT_WIDGET_CAN_TAKE_FOCUS | GNT_WIDGET_TRANSIENT);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
283 GNTDEBUG;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
284 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
285
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
286 /******************************************************************************
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287 * GntMenu API
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288 *****************************************************************************/
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 GType
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 gnt_menu_get_gtype(void)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292 static GType type = 0;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
293
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
294 if(type == 0)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
295 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
296 static const GTypeInfo info = {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
297 sizeof(GntMenuClass),
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298 NULL, /* base_init */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 NULL, /* base_finalize */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
300 (GClassInitFunc)gnt_menu_class_init,
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301 NULL, /* class_finalize */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
302 NULL, /* class_data */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
303 sizeof(GntMenu),
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
304 0, /* n_preallocs */
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305 gnt_menu_init, /* instance_init */
15874
46df7421a1b5 Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15862
diff changeset
306 NULL /* value_table */
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 };
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
308
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309 type = g_type_register_static(GNT_TYPE_TREE,
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310 "GntMenu",
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 &info, 0);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
314 return type;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
317 GntWidget *gnt_menu_new(GntMenuType type)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
318 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
319 GntWidget *widget = g_object_new(GNT_TYPE_MENU, NULL);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
320 GntMenu *menu = GNT_MENU(widget);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
321 menu->list = NULL;
14678
97f57691faab [gaim-migrate @ 17344]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14675
diff changeset
322 menu->selected = 0;
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
323 menu->type = type;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
324
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325 if (type == GNT_MENU_TOPLEVEL) {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
326 widget->priv.x = 0;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
327 widget->priv.y = 0;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328 } else {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
329 GNT_TREE(widget)->show_separator = FALSE;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
330 _gnt_tree_init_internals(GNT_TREE(widget), 2);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
331 gnt_tree_set_col_width(GNT_TREE(widget), 1, 1); /* The second column is to indicate that it has a submenu */
18558
1a90a2b56443 Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18132
diff changeset
332 gnt_tree_set_column_resizable(GNT_TREE(widget), 1, FALSE);
14675
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
333 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_NO_BORDER);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
334 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
335
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
336 return widget;
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
337 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
338
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
339 void gnt_menu_add_item(GntMenu *menu, GntMenuItem *item)
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
340 {
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
341 menu->list = g_list_append(menu->list, item);
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
342 }
be8af28d1980 [gaim-migrate @ 17341]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
343

mercurial