Mercurial > pidgin.yaz
annotate finch/libgnt/gntbindable.c @ 27005:cf373257effb
Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
this machine.
From the getaddrinfo() man page:
"If hints.ai_flags includes the AI_ADDRCONFIG flag, then IPv4 addresses
are returned in the list pointed to by result only if the local system
has at least one IPv4 address configured, and IPv6 addresses are only
returned if the local system has at least one IPv6 address configured."
It's my understanding that this flag is non-standard (a GNUism perhaps),
which is why it's surrounded in #ifdefs.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Wed, 20 May 2009 17:24:52 +0000 |
parents | e2e57d3c0578 |
children | a8cc50c2279f |
rev | line source |
---|---|
17718
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
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:
15818
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:
15818
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
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:
15818
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:
15818
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:
15818
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
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:
15818
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
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:
15818
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19680
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 |
17718
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15818
diff
changeset
|
22 |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
23 #include <string.h> |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
24 |
24503
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22871
diff
changeset
|
25 #include "gntinternal.h" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22871
diff
changeset
|
26 #undef GNT_LOG_DOMAIN |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22871
diff
changeset
|
27 #define GNT_LOG_DOMAIN "Bindable" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22871
diff
changeset
|
28 |
15818 | 29 #include "gntbindable.h" |
30 #include "gntstyle.h" | |
31 #include "gnt.h" | |
32 #include "gntutils.h" | |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
33 #include "gnttextview.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
34 #include "gnttree.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
35 #include "gntbox.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
36 #include "gntbutton.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
37 #include "gntwindow.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
38 #include "gntlabel.h" |
15818 | 39 |
40 static GObjectClass *parent_class = NULL; | |
41 | |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
42 static struct |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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 */ |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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; |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
50 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
19680
diff
changeset
|
52 gnt_bindable_free_rebind_info(void) |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
53 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
54 g_free(rebind_info.name); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
55 g_free(rebind_info.keys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
56 g_free(rebind_info.okeys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
57 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
58 |
19130
d5a0b09470ee
Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents:
17724
diff
changeset
|
59 static void |
d5a0b09470ee
Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents:
17724
diff
changeset
|
60 gnt_bindable_rebinding_cancel(GntWidget *button, gpointer data) |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
61 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
62 gnt_bindable_free_rebind_info(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
63 gnt_widget_destroy(GNT_WIDGET(data)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
64 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
65 |
19130
d5a0b09470ee
Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents:
17724
diff
changeset
|
66 static void |
d5a0b09470ee
Cleaned up a few poorly written "activate" callbacks.
Eric Polino <aluink@pidgin.im>
parents:
17724
diff
changeset
|
67 gnt_bindable_rebinding_rebind(GntWidget *button, gpointer data) |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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) { |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
70 gnt_bindable_register_binding(rebind_info.klass, |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
71 NULL, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
72 rebind_info.okeys, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
73 rebind_info.params); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
74 gnt_bindable_register_binding(rebind_info.klass, |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
75 rebind_info.name, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
76 rebind_info.keys, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
77 rebind_info.params); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
78 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
79 gnt_bindable_free_rebind_info(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
80 gnt_widget_destroy(GNT_WIDGET(data)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
81 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
82 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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) |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
87 char *new_text; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
88 const char *tmp; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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)) { |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
93 return FALSE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
94 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
95 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
100 g_free(new_text); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
101 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
102 g_free(rebind_info.keys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
103 rebind_info.keys = g_strdup(text); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
104 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
105 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
106 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
107 return FALSE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
108 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
109 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
110 gnt_bindable_rebinding_activate(GntBindable *data, gpointer bindable) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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; |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
115 GntWidget *label; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
116 GntWidget *bind_button, *cancel_button; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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; |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
123 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
124 rebind_info.klass = GNT_BINDABLE_GET_CLASS(bindable); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
125 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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)); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
128 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
129 keys = gnt_tree_get_selection_data(tree); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
130 rebind_info.okeys = g_strdup(gnt_key_translate(keys)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
131 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
132 rebind_info.params = NULL; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
135 g_list_free(current_row_data); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
136 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
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"); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
142 label = gnt_label_new(tmp); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
157 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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"); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
160 gnt_box_add_widget(GNT_BOX(button_box), bind_button); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
161 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
33201366bcd4
Fix some white-space and other similar issues. Preparing for a merge.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19130
diff
changeset
|
168 |
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
172 gnt_widget_show(win); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
173 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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 { |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
177 GHashTable *hash; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
178 GntTree *tree; |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
179 } BindingView; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
180 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
181 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
182 add_binding(gpointer key, gpointer value, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
183 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
184 BindingView *bv = data; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
185 GntBindableActionParam *act = value; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
diff
changeset
|
187 if (name && *name) { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
188 const char *k = gnt_key_lookup(key); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
189 if (!k) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
190 k = key; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
191 gnt_tree_add_row_after(bv->tree, (gpointer)k, |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
diff
changeset
|
193 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
194 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
195 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
196 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
197 add_action(gpointer key, gpointer value, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
198 { |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
199 BindingView *bv = data; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
200 g_hash_table_insert(bv->hash, value, key); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
201 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
202 |
15818 | 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) { |
15818 | 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); | |
323 | |
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 | |
22871
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 |
15818 | 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) { | |
24503
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22871
diff
changeset
|
367 gnt_warning("Invalid action name %s for %s", |
15818 | 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 | |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
434 GntBindable * gnt_bindable_bindings_view(GntBindable *bind) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
435 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
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:
17718
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:
17718
diff
changeset
|
439 BindingView bv = {hash, GNT_TREE(tree)}; |
15818 | 440 |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
diff
changeset
|
442 g_hash_table_foreach(klass->actions, add_action, &bv); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
443 g_hash_table_foreach(klass->bindings, add_binding, &bv); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
444 if (GNT_TREE(tree)->list == NULL) { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
445 gnt_widget_destroy(GNT_WIDGET(tree)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
446 tree = NULL; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
447 } else |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
448 gnt_tree_adjust_columns(bv.tree); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
449 g_hash_table_destroy(hash); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
450 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
451 return tree; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
452 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
453 |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
454 static void |
17724
d7cd0afd3c36
FIX: The help_window pointer wasn't being set to null properly in the destroy callback.
Eric Polino <aluink@pidgin.im>
parents:
17722
diff
changeset
|
455 reset_binding_window(GntBindableClass *window, gpointer k) |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
456 { |
17724
d7cd0afd3c36
FIX: The help_window pointer wasn't being set to null properly in the destroy callback.
Eric Polino <aluink@pidgin.im>
parents:
17722
diff
changeset
|
457 GntBindableClass *klass = GNT_BINDABLE_CLASS(k); |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
458 klass->help_window = NULL; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
459 } |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
460 |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
461 gboolean |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
462 gnt_bindable_build_help_window(GntBindable *bindable) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
463 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
464 GntWidget *tree; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
465 GntBindableClass *klass = GNT_BINDABLE_GET_CLASS(bindable); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
466 char *title; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
467 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
468 tree = GNT_WIDGET(gnt_bindable_bindings_view(bindable)); |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
469 |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
470 klass->help_window = GNT_BINDABLE(gnt_window_new()); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
diff
changeset
|
472 gnt_box_set_title(GNT_BOX(klass->help_window), title); |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
473 if (tree) { |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
474 g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(gnt_bindable_rebinding_activate), bindable); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
475 gnt_box_add_widget(GNT_BOX(klass->help_window), tree); |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
476 } else |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
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:
17718
diff
changeset
|
478 |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
479 g_signal_connect(G_OBJECT(klass->help_window), "destroy", G_CALLBACK(reset_binding_window), klass); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
480 gnt_widget_show(GNT_WIDGET(klass->help_window)); |
17722
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17721
diff
changeset
|
481 g_free(title); |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
482 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
483 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
484 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
485 |