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