finch/libgnt/gntbindable.c

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

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

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

17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
1 /**
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
2 * GNT - The GLib Ncurses Toolkit
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
3 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
4 * GNT is the legal property of its developers, whose names are too numerous
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
6 * source distribution.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
7 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
8 * This library is free software; you can redistribute it and/or modify
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
9 * it under the terms of the GNU General Public License as published by
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
11 * (at your option) any later version.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
12 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
13 * This program is distributed in the hope that it will be useful,
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
16 * GNU General Public License for more details.
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
17 *
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
18 * You should have received a copy of the GNU General Public License
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19317
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17586
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
21 */
5beb8d987e84 applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents: 15886
diff changeset
22
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
23 #include <string.h>
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
24
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23064
diff changeset
25 #include "gntinternal.h"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23064
diff changeset
26 #undef GNT_LOG_DOMAIN
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23064
diff changeset
27 #define GNT_LOG_DOMAIN "Bindable"
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23064
diff changeset
28
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 #include "gntbindable.h"
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
30 #include "gntstyle.h"
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31 #include "gnt.h"
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32 #include "gntutils.h"
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
33 #include "gnttextview.h"
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
34 #include "gnttree.h"
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
35 #include "gntbox.h"
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
36 #include "gntbutton.h"
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
37 #include "gntwindow.h"
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
38 #include "gntlabel.h"
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 static GObjectClass *parent_class = NULL;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
42 static struct
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
43 {
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
44 char * okeys; /* Old keystrokes */
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
45 char * keys; /* New Keystrokes being bound to the action */
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
46 GntBindableClass * klass; /* Class of the object that's getting keys rebound */
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
47 char * name; /* The name of the action */
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
48 GList * params; /* The list of paramaters */
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
49 } rebind_info;
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
50
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
51 static void
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
52 gnt_bindable_free_rebind_info(void)
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
53 {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
54 g_free(rebind_info.name);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
55 g_free(rebind_info.keys);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
56 g_free(rebind_info.okeys);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
57 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
58
18438
972b13b06ba0 Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents: 17592
diff changeset
59 static void
972b13b06ba0 Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents: 17592
diff changeset
60 gnt_bindable_rebinding_cancel(GntWidget *button, gpointer data)
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
61 {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
62 gnt_bindable_free_rebind_info();
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
63 gnt_widget_destroy(GNT_WIDGET(data));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
64 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
65
18438
972b13b06ba0 Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents: 17592
diff changeset
66 static void
972b13b06ba0 Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents: 17592
diff changeset
67 gnt_bindable_rebinding_rebind(GntWidget *button, gpointer data)
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
68 {
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
69 if (rebind_info.keys) {
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
70 gnt_bindable_register_binding(rebind_info.klass,
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
71 NULL,
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
72 rebind_info.okeys,
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
73 rebind_info.params);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
74 gnt_bindable_register_binding(rebind_info.klass,
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
75 rebind_info.name,
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
76 rebind_info.keys,
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
77 rebind_info.params);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
78 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
79 gnt_bindable_free_rebind_info();
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
80 gnt_widget_destroy(GNT_WIDGET(data));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
81 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
82
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
83 static gboolean
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
84 gnt_bindable_rebinding_grab_key(GntBindable *bindable, const char *text, gpointer data)
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
85 {
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
86 GntTextView *textview = GNT_TEXT_VIEW(data);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
87 char *new_text;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
88 const char *tmp;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
89
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
90 if (text && *text) {
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
91 /* Rebinding tab or enter for something is probably not that great an idea */
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
92 if (!strcmp(text, GNT_KEY_CTRL_I) || !strcmp(text, GNT_KEY_ENTER)) {
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
93 return FALSE;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
94 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
95
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
96 tmp = gnt_key_lookup(text);
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
97 new_text = g_strdup_printf("KEY: \"%s\"", tmp);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
98 gnt_text_view_clear(textview);
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
99 gnt_text_view_append_text_with_flags(textview, new_text, GNT_TEXT_FLAG_NORMAL);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
100 g_free(new_text);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
101
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
102 g_free(rebind_info.keys);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
103 rebind_info.keys = g_strdup(text);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
104
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
105 return TRUE;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
106 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
107 return FALSE;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
108 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
109 static void
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
110 gnt_bindable_rebinding_activate(GntBindable *data, gpointer bindable)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
111 {
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
112 const char *widget_name = g_type_name(G_OBJECT_TYPE(bindable));
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
113 char *keys;
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
114 GntWidget *key_textview;
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
115 GntWidget *label;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
116 GntWidget *bind_button, *cancel_button;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
117 GntWidget *button_box;
19315
0bc6119bbf7b Fix a memory leak.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19314
diff changeset
118 GList *current_row_data;
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
119 char *tmp;
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
120 GntWidget *win = gnt_window_new();
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
121 GntTree *tree = GNT_TREE(data);
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
122 GntWidget *vbox = gnt_box_new(FALSE, TRUE);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
123
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
124 rebind_info.klass = GNT_BINDABLE_GET_CLASS(bindable);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
125
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
126 current_row_data = gnt_tree_get_selection_text_list(tree);
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
127 rebind_info.name = g_strdup(g_list_nth_data(current_row_data, 1));
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
128
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
129 keys = gnt_tree_get_selection_data(tree);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
130 rebind_info.okeys = g_strdup(gnt_key_translate(keys));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
131
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
132 rebind_info.params = NULL;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
133
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
134 g_list_foreach(current_row_data, (GFunc)g_free, NULL);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
135 g_list_free(current_row_data);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
136
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
137 gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_MID);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
138
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
139 gnt_box_set_title(GNT_BOX(win), "Key Capture");
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
140
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
141 tmp = g_strdup_printf("Type the new bindings for %s in a %s.", rebind_info.name, widget_name);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
142 label = gnt_label_new(tmp);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
143 g_free(tmp);
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
144 gnt_box_add_widget(GNT_BOX(vbox), label);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
145
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
146 tmp = g_strdup_printf("KEY: \"%s\"", keys);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
147 key_textview = gnt_text_view_new();
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
148 gnt_widget_set_size(key_textview, key_textview->priv.x, 2);
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
149 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(key_textview), tmp, GNT_TEXT_FLAG_NORMAL);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
150 g_free(tmp);
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
151 gnt_widget_set_name(key_textview, "keystroke");
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
152 gnt_box_add_widget(GNT_BOX(vbox), key_textview);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
153
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
154 g_signal_connect(G_OBJECT(win), "key_pressed", G_CALLBACK(gnt_bindable_rebinding_grab_key), key_textview);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
155
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
156 button_box = gnt_box_new(FALSE, FALSE);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
157
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
158 bind_button = gnt_button_new("BIND");
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
159 gnt_widget_set_name(bind_button, "bind");
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
160 gnt_box_add_widget(GNT_BOX(button_box), bind_button);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
161
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
162 cancel_button = gnt_button_new("Cancel");
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
163 gnt_widget_set_name(cancel_button, "cancel");
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
164 gnt_box_add_widget(GNT_BOX(button_box), cancel_button);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
165
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
166 g_signal_connect(G_OBJECT(bind_button), "activate", G_CALLBACK(gnt_bindable_rebinding_rebind), win);
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
167 g_signal_connect(G_OBJECT(cancel_button), "activate", G_CALLBACK(gnt_bindable_rebinding_cancel), win);
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
168
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
169 gnt_box_add_widget(GNT_BOX(vbox), button_box);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
170
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
171 gnt_box_add_widget(GNT_BOX(win), vbox);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
172 gnt_widget_show(win);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
173 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
174
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
175 typedef struct
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
176 {
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
177 GHashTable *hash;
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
178 GntTree *tree;
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
179 } BindingView;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
180
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
181 static void
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
182 add_binding(gpointer key, gpointer value, gpointer data)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
183 {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
184 BindingView *bv = data;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
185 GntBindableActionParam *act = value;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
186 const char *name = g_hash_table_lookup(bv->hash, act->action);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
187 if (name && *name) {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
188 const char *k = gnt_key_lookup(key);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
189 if (!k)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
190 k = key;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
191 gnt_tree_add_row_after(bv->tree, (gpointer)k,
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
192 gnt_tree_create_row(bv->tree, k, name), NULL, NULL);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
193 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
194 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
195
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
196 static void
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
197 add_action(gpointer key, gpointer value, gpointer data)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
198 {
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
199 BindingView *bv = data;
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
200 g_hash_table_insert(bv->hash, value, key);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
201 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
202
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 static void
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 gnt_bindable_class_init(GntBindableClass *klass)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206 parent_class = g_type_class_peek_parent(klass);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
208 klass->actions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
209 (GDestroyNotify)gnt_bindable_action_free);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
210 klass->bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
211 (GDestroyNotify)gnt_bindable_action_param_free);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 GNTDEBUG;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
217 static gpointer
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
218 bindable_clone(GntBindableAction *action)
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
219 {
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
220 GntBindableAction *ret = g_new0(GntBindableAction, 1);
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
221 ret->name = g_strdup(action->name);
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
222 ret->u = action->u;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
223 return ret;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
224 }
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
225
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
226 static gpointer
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
227 binding_clone(GntBindableActionParam *param)
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
228 {
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
229 GntBindableActionParam *p = g_new0(GntBindableActionParam, 1);
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
230 p->list = g_list_copy(param->list);
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
231 p->action = param->action;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
232 return p;
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
233 }
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
234
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235 static void
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 duplicate_hashes(GntBindableClass *klass)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
238 /* Duplicate the bindings from parent class */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
239 if (klass->actions) {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 klass->actions = g_hash_table_duplicate(klass->actions, g_str_hash,
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
241 g_str_equal, g_free, (GDestroyNotify)gnt_bindable_action_free,
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
242 (GDupFunc)g_strdup, (GDupFunc)bindable_clone);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243 klass->bindings = g_hash_table_duplicate(klass->bindings, g_str_hash,
15365
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
244 g_str_equal, g_free, (GDestroyNotify)gnt_bindable_action_param_free,
5a83efd6955d [gaim-migrate @ 18094]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15272
diff changeset
245 (GDupFunc)g_strdup, (GDupFunc)binding_clone);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
246 } else {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
247 klass->actions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
248 (GDestroyNotify)gnt_bindable_action_free);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
249 klass->bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
250 (GDestroyNotify)gnt_bindable_action_param_free);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
251 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
252
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
253 GNTDEBUG;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
254 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
256 /******************************************************************************
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
257 * GntBindable API
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258 *****************************************************************************/
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
259 GType
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
260 gnt_bindable_get_gtype(void)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
261 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 static GType type = 0;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
263
19314
472ad9489d68 Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18438
diff changeset
264 if (type == 0) {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
265 static const GTypeInfo info = {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266 sizeof(GntBindableClass),
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
267 (GBaseInitFunc)duplicate_hashes, /* base_init */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
268 NULL, /* base_finalize */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 (GClassInitFunc)gnt_bindable_class_init,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 NULL,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
271 NULL, /* class_data */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
272 sizeof(GntBindable),
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
273 0, /* n_preallocs */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274 NULL, /* instance_init */
15874
46df7421a1b5 Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15839
diff changeset
275 NULL /* value_table */
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
276 };
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
277
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
278 type = g_type_register_static(G_TYPE_OBJECT,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
279 "GntBindable",
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
280 &info, G_TYPE_FLAG_ABSTRACT);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
281 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
282
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
283 return type;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
284 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
285
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
286 /**
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287 * Key Remaps
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288 */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 const char *
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 gnt_bindable_remap_keys(GntBindable *bindable, const char *text)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292 const char *remap = NULL;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
293 GType type = G_OBJECT_TYPE(bindable);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
294 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable));
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
295
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
296 if (klass->remaps == NULL)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
297 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298 klass->remaps = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 gnt_styles_get_keyremaps(type, klass->remaps);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
300 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
302 remap = g_hash_table_lookup(klass->remaps, text);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
303
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
304 return (remap ? remap : text);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
306
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 /**
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
308 * Actions and Bindings
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309 */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310 gboolean
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 gnt_bindable_perform_action_named(GntBindable *bindable, const char *name, ...)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable));
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
314 GList *list = NULL;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 va_list args;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316 GntBindableAction *action;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
317 void *p;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
318
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
319 va_start(args, name);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
320 while ((p = va_arg(args, void *)) != NULL)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
321 list = g_list_append(list, p);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
322 va_end(args);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
323
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
324 action = g_hash_table_lookup(klass->actions, name);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325 if (action && action->u.action) {
15272
c6e322c9c9b2 [gaim-migrate @ 18000]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15038
diff changeset
326 return action->u.action(bindable, list);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
327 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328 return FALSE;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
329 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
330
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
331 gboolean
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
332 gnt_bindable_perform_action_key(GntBindable *bindable, const char *keys)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
333 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
334 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable));
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
335 GntBindableActionParam *param = g_hash_table_lookup(klass->bindings, keys);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
336
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
337 if (param && param->action) {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
338 if (param->list)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
339 return param->action->u.action(bindable, param->list);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
340 else
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
341 return param->action->u.action_noparam(bindable);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
342 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
343 return FALSE;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
344 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
345
23064
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
346 gboolean
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
347 gnt_bindable_check_key(GntBindable *bindable, const char *keys) {
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
348 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable));
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
349 GntBindableActionParam *param = g_hash_table_lookup(klass->bindings, keys);
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
350 return (param && param->action);
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
351 }
1a35c6029964 Check if a key is already bound before assigning a menu trigger
Richard Nelson <wabz@pidgin.im>
parents: 22104
diff changeset
352
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
353 static void
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
354 register_binding(GntBindableClass *klass, const char *name, const char *trigger, GList *list)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
355 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
356 GntBindableActionParam *param;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
357 GntBindableAction *action;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
358
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
359 if (name == NULL || *name == '\0') {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
360 g_hash_table_remove(klass->bindings, (char*)trigger);
15839
e2b7b5f4f9aa Change a bit how the keystrokes are processed. When a lot of keystrokes come in at the same time, the shortest key-combination is processed first. This should make typing fast over a very slow connection work properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15365
diff changeset
361 gnt_keys_del_combination(trigger);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
362 return;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
363 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
364
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
365 action = g_hash_table_lookup(klass->actions, name);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
366 if (!action) {
24822
d7774462f2ba Use glib log functions to show error messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23064
diff changeset
367 gnt_warning("Invalid action name %s for %s",
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
368 name, g_type_name(G_OBJECT_CLASS_TYPE(klass)));
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
369 if (list)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
370 g_list_free(list);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
371 return;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
372 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
373
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
374 param = g_new0(GntBindableActionParam, 1);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
375 param->action = action;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
376 param->list = list;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
377 g_hash_table_replace(klass->bindings, g_strdup(trigger), param);
15839
e2b7b5f4f9aa Change a bit how the keystrokes are processed. When a lot of keystrokes come in at the same time, the shortest key-combination is processed first. This should make typing fast over a very slow connection work properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15365
diff changeset
378 gnt_keys_add_combination(trigger);
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
379 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
380
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
381 void gnt_bindable_register_binding(GntBindableClass *klass, const char *name,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
382 const char *trigger, ...)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
383 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
384 GList *list = NULL;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
385 va_list args;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
386 void *data;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
387
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
388 va_start(args, trigger);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
389 while ((data = va_arg(args, void *))) {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
390 list = g_list_append(list, data);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
391 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
392 va_end(args);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
393
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
394 register_binding(klass, name, trigger, list);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
395 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
396
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
397 void gnt_bindable_class_register_action(GntBindableClass *klass, const char *name,
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
398 GntBindableActionCallback callback, const char *trigger, ...)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
399 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
400 void *data;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
401 va_list args;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
402 GntBindableAction *action = g_new0(GntBindableAction, 1);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
403 GList *list;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
404
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
405 action->name = g_strdup(name);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
406 action->u.action = callback;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
407
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
408 g_hash_table_replace(klass->actions, g_strdup(name), action);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
409
15038
e57ca0ff0489 [gaim-migrate @ 17755]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14962
diff changeset
410 if (trigger && *trigger) {
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
411 list = NULL;
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
412 va_start(args, trigger);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
413 while ((data = va_arg(args, void *))) {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
414 list = g_list_append(list, data);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
415 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
416 va_end(args);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
417
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
418 register_binding(klass, name, trigger, list);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
419 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
420 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
421
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
422 void gnt_bindable_action_free(GntBindableAction *action)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
423 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
424 g_free(action->name);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
425 g_free(action);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
426 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
427
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
428 void gnt_bindable_action_param_free(GntBindableActionParam *param)
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
429 {
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
430 g_list_free(param->list); /* XXX: There may be a leak here for string parameters */
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
431 g_free(param);
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
432 }
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
433
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
434 GntBindable * gnt_bindable_bindings_view(GntBindable *bind)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
435 {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
436 GntBindable *tree = GNT_BINDABLE(gnt_tree_new_with_columns(2));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
437 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bind));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
438 GHashTable *hash = g_hash_table_new(g_direct_hash, g_direct_equal);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
439 BindingView bv = {hash, GNT_TREE(tree)};
14962
abfaa2e03ac7 [gaim-migrate @ 17672]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
440
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
441 gnt_tree_set_compare_func(bv.tree, (GCompareFunc)g_utf8_collate);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
442 g_hash_table_foreach(klass->actions, add_action, &bv);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
443 g_hash_table_foreach(klass->bindings, add_binding, &bv);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
444 if (GNT_TREE(tree)->list == NULL) {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
445 gnt_widget_destroy(GNT_WIDGET(tree));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
446 tree = NULL;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
447 } else
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
448 gnt_tree_adjust_columns(bv.tree);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
449 g_hash_table_destroy(hash);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
450
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
451 return tree;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
452 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
453
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
454 static void
17592
066b1786516f FIX: The help_window pointer wasn't being set to null properly in the destroy callback.
Eric Polino <aluink@pidgin.im>
parents: 17590
diff changeset
455 reset_binding_window(GntBindableClass *window, gpointer k)
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
456 {
17592
066b1786516f FIX: The help_window pointer wasn't being set to null properly in the destroy callback.
Eric Polino <aluink@pidgin.im>
parents: 17590
diff changeset
457 GntBindableClass *klass = GNT_BINDABLE_CLASS(k);
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
458 klass->help_window = NULL;
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
459 }
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
460
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
461 gboolean
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
462 gnt_bindable_build_help_window(GntBindable *bindable)
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
463 {
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
464 GntWidget *tree;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
465 GntBindableClass *klass = GNT_BINDABLE_GET_CLASS(bindable);
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
466 char *title;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
467
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
468 tree = GNT_WIDGET(gnt_bindable_bindings_view(bindable));
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
469
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
470 klass->help_window = GNT_BINDABLE(gnt_window_new());
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
471 title = g_strdup_printf("Bindings for %s", g_type_name(G_OBJECT_TYPE(bindable)));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
472 gnt_box_set_title(GNT_BOX(klass->help_window), title);
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
473 if (tree) {
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
474 g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(gnt_bindable_rebinding_activate), bindable);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
475 gnt_box_add_widget(GNT_BOX(klass->help_window), tree);
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
476 } else
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
477 gnt_box_add_widget(GNT_BOX(klass->help_window), gnt_label_new("This widget has no customizable bindings."));
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
478
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
479 g_signal_connect(G_OBJECT(klass->help_window), "destroy", G_CALLBACK(reset_binding_window), klass);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
480 gnt_widget_show(GNT_WIDGET(klass->help_window));
17590
b6e8c396671a Mostly whitespace changes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17589
diff changeset
481 g_free(title);
17589
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
482
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
483 return TRUE;
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
484 }
193d380e5261 Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents: 17586
diff changeset
485

mercurial