Mercurial > pidgin
annotate finch/libgnt/gntbindable.c @ 19110:60c6090c0e29
Workspace window placement now supports substring checking in window-names
author | Eric Polino <aluink@pidgin.im> |
---|---|
date | Fri, 22 Jun 2007 22:20:39 +0000 |
parents | d7cd0afd3c36 |
children | d5a0b09470ee |
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 |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
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 |
15817 | 25 #include "gntbindable.h" |
26 #include "gntstyle.h" | |
27 #include "gnt.h" | |
28 #include "gntutils.h" | |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
29 #include "gnttextview.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
30 #include "gnttree.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
31 #include "gntbox.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
32 #include "gntbutton.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
33 #include "gntwindow.h" |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
34 #include "gntlabel.h" |
15817 | 35 |
36 static GObjectClass *parent_class = NULL; | |
37 | |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
38 static struct |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
39 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
40 char * okeys; /* Old keystrokes */ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
41 char * keys; /* New Keystrokes being bound to the action */ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
42 GntBindableClass * klass; /* Class of the object that's getting keys rebound */ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
43 char * name; /* The name of the action */ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
44 GList * params; /* The list of paramaters */ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
45 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
46 } rebind_info = {NULL,NULL,NULL,NULL,NULL}; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
47 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
48 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
49 gnt_bindable_free_rebind_info() |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
50 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
51 g_free(rebind_info.name); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
52 g_free(rebind_info.keys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
53 g_free(rebind_info.okeys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
54 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
55 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
56 static gboolean |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
57 gnt_bindable_rebinding_cancel(GntBindable *bindable, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
58 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
59 gnt_bindable_free_rebind_info(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
60 gnt_widget_destroy(GNT_WIDGET(data)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
61 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
62 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
63 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
64 static gboolean |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
65 gnt_bindable_rebinding_rebind(GntBindable *bindable, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
66 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
67 |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
68 if(rebind_info.keys) { |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
69 gnt_bindable_register_binding(rebind_info.klass, |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
70 NULL, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
71 rebind_info.okeys, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
72 rebind_info.params); |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
73 gnt_bindable_register_binding(rebind_info.klass, |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
74 rebind_info.name, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
75 rebind_info.keys, |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
76 rebind_info.params); |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
77 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
78 gnt_bindable_free_rebind_info(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
79 |
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 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
83 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
84 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
85 static gboolean |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
86 gnt_bindable_rebinding_grab_key(GntBindable *bindable, const char *text, gpointer *data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
87 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
88 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
89 GntTextView *textview= GNT_TEXT_VIEW(data); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
90 char *new_text; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
91 const char *tmp; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
92 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
93 if(text && *text){ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
94 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
95 if(!strcmp(text, GNT_KEY_CTRL_I) || !strcmp(text, GNT_KEY_ENTER)){ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
96 return FALSE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
97 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
98 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
99 tmp = gnt_key_lookup(text); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
100 new_text = g_strdup_printf("KEY: \"%s\"",tmp); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
101 gnt_text_view_clear(textview); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
102 gnt_text_view_append_text_with_flags(textview,new_text,GNT_TEXT_FLAG_NORMAL); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
103 g_free(new_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 g_free(rebind_info.keys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
106 rebind_info.keys = g_strdup(text); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
107 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
108 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
109 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
110 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
111 return FALSE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
112 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
113 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
114 gnt_bindable_rebinding_activate(GntBindable *data, gpointer bindable) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
115 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
116 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
117 GntTree * tree = GNT_TREE(data); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
118 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
119 GntWidget *vbox = gnt_box_new(FALSE,TRUE); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
120 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
121 GntWidget *label; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
122 const char * widget_name = g_type_name(G_OBJECT_TYPE(bindable)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
123 char * keys; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
124 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
125 GntWidget *key_textview; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
126 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
127 GntWidget *bind_button, *cancel_button; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
128 GntWidget *button_box; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
129 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
130 GntWidget *win = gnt_window_new(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
131 GList * current_row_data,*itr; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
132 char * tmp; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
133 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
134 rebind_info.klass = GNT_BINDABLE_GET_CLASS(bindable); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
135 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
136 current_row_data = gnt_tree_get_selection_text_list(tree); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
137 rebind_info.name = g_strdup(g_list_nth_data(current_row_data,1)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
138 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
139 keys = gnt_tree_get_selection_data(tree); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
140 rebind_info.okeys = g_strdup(gnt_key_translate(keys)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
141 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
142 rebind_info.params = NULL; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
143 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
144 itr = current_row_data; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
145 while(itr){ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
146 g_free(itr->data); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
147 itr = itr->next; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
148 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
149 g_list_free(current_row_data); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
150 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
151 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
|
152 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
153 gnt_box_set_title(GNT_BOX(win),"Key Capture"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
154 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
155 tmp = g_strdup_printf("Type the new bindings for %s in a %s.",rebind_info.name,widget_name); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
156 label = gnt_label_new(tmp); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
157 g_free(tmp); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
158 gnt_box_add_widget(GNT_BOX(vbox),label); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
159 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
160 tmp = g_strdup_printf("KEY: \"%s\"",keys); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
161 key_textview = gnt_text_view_new(); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
162 gnt_widget_set_size(key_textview,key_textview->priv.x,2); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
163 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(key_textview),tmp,GNT_TEXT_FLAG_NORMAL); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
164 g_free(tmp); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
165 gnt_widget_set_name(key_textview,"keystroke"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
166 gnt_box_add_widget(GNT_BOX(vbox),key_textview); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
167 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
168 g_signal_connect(G_OBJECT(win), "key_pressed", G_CALLBACK(gnt_bindable_rebinding_grab_key),key_textview); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
169 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
170 button_box = gnt_box_new(FALSE,FALSE); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
171 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
172 bind_button = gnt_button_new("BIND"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
173 gnt_widget_set_name(bind_button,"bind"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
174 gnt_box_add_widget(GNT_BOX(button_box), bind_button); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
175 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
176 cancel_button = gnt_button_new("Cancel"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
177 gnt_widget_set_name(cancel_button,"cancel"); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
178 gnt_box_add_widget(GNT_BOX(button_box),cancel_button); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
179 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
180 g_signal_connect(G_OBJECT(bind_button), "activate", G_CALLBACK(gnt_bindable_rebinding_rebind),win); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
181 g_signal_connect(G_OBJECT(cancel_button), "activate", G_CALLBACK(gnt_bindable_rebinding_cancel),win); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
182 |
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 gnt_box_add_widget(GNT_BOX(vbox),button_box); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
185 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
186 gnt_box_add_widget(GNT_BOX(win),vbox); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
187 gnt_widget_show(win); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
188 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
189 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
190 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
191 typedef struct { |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
192 GHashTable *hash; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
193 GntTree *tree; |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
194 } BindingView; |
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_binding(gpointer key, gpointer value, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
198 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
199 BindingView *bv = data; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
200 GntBindableActionParam *act = value; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
201 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
|
202 if (name && *name) { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
203 const char *k = gnt_key_lookup(key); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
204 if (!k) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
205 k = key; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
206 gnt_tree_add_row_after(bv->tree, (gpointer)k, |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
207 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
|
208 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
209 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
210 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
211 static void |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
212 add_action(gpointer key, gpointer value, gpointer data) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
213 { |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
214 BindingView *bv = data; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
215 g_hash_table_insert(bv->hash, value, key); |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
216 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
217 |
15817 | 218 static void |
219 gnt_bindable_class_init(GntBindableClass *klass) | |
220 { | |
221 parent_class = g_type_class_peek_parent(klass); | |
222 | |
223 klass->actions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
224 (GDestroyNotify)gnt_bindable_action_free); | |
225 klass->bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
226 (GDestroyNotify)gnt_bindable_action_param_free); | |
227 | |
228 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); | |
229 GNTDEBUG; | |
230 } | |
231 | |
232 static gpointer | |
233 bindable_clone(GntBindableAction *action) | |
234 { | |
235 GntBindableAction *ret = g_new0(GntBindableAction, 1); | |
236 ret->name = g_strdup(action->name); | |
237 ret->u = action->u; | |
238 return ret; | |
239 } | |
240 | |
241 static gpointer | |
242 binding_clone(GntBindableActionParam *param) | |
243 { | |
244 GntBindableActionParam *p = g_new0(GntBindableActionParam, 1); | |
245 p->list = g_list_copy(param->list); | |
246 p->action = param->action; | |
247 return p; | |
248 } | |
249 | |
250 static void | |
251 duplicate_hashes(GntBindableClass *klass) | |
252 { | |
253 /* Duplicate the bindings from parent class */ | |
254 if (klass->actions) { | |
255 klass->actions = g_hash_table_duplicate(klass->actions, g_str_hash, | |
256 g_str_equal, g_free, (GDestroyNotify)gnt_bindable_action_free, | |
257 (GDupFunc)g_strdup, (GDupFunc)bindable_clone); | |
258 klass->bindings = g_hash_table_duplicate(klass->bindings, g_str_hash, | |
259 g_str_equal, g_free, (GDestroyNotify)gnt_bindable_action_param_free, | |
260 (GDupFunc)g_strdup, (GDupFunc)binding_clone); | |
261 } else { | |
262 klass->actions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
263 (GDestroyNotify)gnt_bindable_action_free); | |
264 klass->bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
265 (GDestroyNotify)gnt_bindable_action_param_free); | |
266 } | |
267 | |
268 GNTDEBUG; | |
269 } | |
270 | |
271 /****************************************************************************** | |
272 * GntBindable API | |
273 *****************************************************************************/ | |
274 GType | |
275 gnt_bindable_get_gtype(void) | |
276 { | |
277 static GType type = 0; | |
278 | |
279 if(type == 0) { | |
280 static const GTypeInfo info = { | |
281 sizeof(GntBindableClass), | |
282 (GBaseInitFunc)duplicate_hashes, /* base_init */ | |
283 NULL, /* base_finalize */ | |
284 (GClassInitFunc)gnt_bindable_class_init, | |
285 NULL, | |
286 NULL, /* class_data */ | |
287 sizeof(GntBindable), | |
288 0, /* n_preallocs */ | |
289 NULL, /* instance_init */ | |
290 NULL /* value_table */ | |
291 }; | |
292 | |
293 type = g_type_register_static(G_TYPE_OBJECT, | |
294 "GntBindable", | |
295 &info, G_TYPE_FLAG_ABSTRACT); | |
296 } | |
297 | |
298 return type; | |
299 } | |
300 | |
301 /** | |
302 * Key Remaps | |
303 */ | |
304 const char * | |
305 gnt_bindable_remap_keys(GntBindable *bindable, const char *text) | |
306 { | |
307 const char *remap = NULL; | |
308 GType type = G_OBJECT_TYPE(bindable); | |
309 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable)); | |
310 | |
311 if (klass->remaps == NULL) | |
312 { | |
313 klass->remaps = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); | |
314 gnt_styles_get_keyremaps(type, klass->remaps); | |
315 } | |
316 | |
317 remap = g_hash_table_lookup(klass->remaps, text); | |
318 | |
319 return (remap ? remap : text); | |
320 } | |
321 | |
322 /** | |
323 * Actions and Bindings | |
324 */ | |
325 gboolean | |
326 gnt_bindable_perform_action_named(GntBindable *bindable, const char *name, ...) | |
327 { | |
328 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable)); | |
329 GList *list = NULL; | |
330 va_list args; | |
331 GntBindableAction *action; | |
332 void *p; | |
333 | |
334 va_start(args, name); | |
335 while ((p = va_arg(args, void *)) != NULL) | |
336 list = g_list_append(list, p); | |
337 va_end(args); | |
338 | |
339 action = g_hash_table_lookup(klass->actions, name); | |
340 if (action && action->u.action) { | |
341 return action->u.action(bindable, list); | |
342 } | |
343 return FALSE; | |
344 } | |
345 | |
346 gboolean | |
347 gnt_bindable_perform_action_key(GntBindable *bindable, const char *keys) | |
348 { | |
349 GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable)); | |
350 GntBindableActionParam *param = g_hash_table_lookup(klass->bindings, keys); | |
351 | |
352 if (param && param->action) { | |
353 if (param->list) | |
354 return param->action->u.action(bindable, param->list); | |
355 else | |
356 return param->action->u.action_noparam(bindable); | |
357 } | |
358 return FALSE; | |
359 } | |
360 | |
361 static void | |
362 register_binding(GntBindableClass *klass, const char *name, const char *trigger, GList *list) | |
363 { | |
364 GntBindableActionParam *param; | |
365 GntBindableAction *action; | |
366 | |
367 if (name == NULL || *name == '\0') { | |
368 g_hash_table_remove(klass->bindings, (char*)trigger); | |
369 gnt_keys_del_combination(trigger); | |
370 return; | |
371 } | |
372 | |
373 action = g_hash_table_lookup(klass->actions, name); | |
374 if (!action) { | |
375 g_printerr("GntWidget: Invalid action name %s for %s\n", | |
376 name, g_type_name(G_OBJECT_CLASS_TYPE(klass))); | |
377 if (list) | |
378 g_list_free(list); | |
379 return; | |
380 } | |
381 | |
382 param = g_new0(GntBindableActionParam, 1); | |
383 param->action = action; | |
384 param->list = list; | |
385 g_hash_table_replace(klass->bindings, g_strdup(trigger), param); | |
386 gnt_keys_add_combination(trigger); | |
387 } | |
388 | |
389 void gnt_bindable_register_binding(GntBindableClass *klass, const char *name, | |
390 const char *trigger, ...) | |
391 { | |
392 GList *list = NULL; | |
393 va_list args; | |
394 void *data; | |
395 | |
396 va_start(args, trigger); | |
397 while ((data = va_arg(args, void *))) { | |
398 list = g_list_append(list, data); | |
399 } | |
400 va_end(args); | |
401 | |
402 register_binding(klass, name, trigger, list); | |
403 } | |
404 | |
405 void gnt_bindable_class_register_action(GntBindableClass *klass, const char *name, | |
406 GntBindableActionCallback callback, const char *trigger, ...) | |
407 { | |
408 void *data; | |
409 va_list args; | |
410 GntBindableAction *action = g_new0(GntBindableAction, 1); | |
411 GList *list; | |
412 | |
413 action->name = g_strdup(name); | |
414 action->u.action = callback; | |
415 | |
416 g_hash_table_replace(klass->actions, g_strdup(name), action); | |
417 | |
418 if (trigger && *trigger) { | |
419 list = NULL; | |
420 va_start(args, trigger); | |
421 while ((data = va_arg(args, void *))) { | |
422 list = g_list_append(list, data); | |
423 } | |
424 va_end(args); | |
425 | |
426 register_binding(klass, name, trigger, list); | |
427 } | |
428 } | |
429 | |
430 void gnt_bindable_action_free(GntBindableAction *action) | |
431 { | |
432 g_free(action->name); | |
433 g_free(action); | |
434 } | |
435 | |
436 void gnt_bindable_action_param_free(GntBindableActionParam *param) | |
437 { | |
438 g_list_free(param->list); /* XXX: There may be a leak here for string parameters */ | |
439 g_free(param); | |
440 } | |
441 | |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
442 GntBindable * gnt_bindable_bindings_view(GntBindable *bind) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
443 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
444 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
|
445 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
|
446 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
|
447 BindingView bv = {hash, GNT_TREE(tree)}; |
15817 | 448 |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
449 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
|
450 g_hash_table_foreach(klass->actions, add_action, &bv); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
451 g_hash_table_foreach(klass->bindings, add_binding, &bv); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
452 if (GNT_TREE(tree)->list == NULL) { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
453 gnt_widget_destroy(GNT_WIDGET(tree)); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
454 tree = NULL; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
455 } else |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
456 gnt_tree_adjust_columns(bv.tree); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
457 g_hash_table_destroy(hash); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
458 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
459 return tree; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
460 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
461 |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
462 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
|
463 reset_binding_window(GntBindableClass *window, gpointer k) |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
464 { |
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
|
465 GntBindableClass *klass = GNT_BINDABLE_CLASS(k); |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
466 klass->help_window = NULL; |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
467 } |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
468 |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
469 gboolean |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
470 gnt_bindable_build_help_window(GntBindable *bindable) |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
471 { |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
472 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
473 GntWidget *tree; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
474 GntBindableClass *klass = GNT_BINDABLE_GET_CLASS(bindable); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
475 char *title; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
476 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
477 tree = GNT_WIDGET(gnt_bindable_bindings_view(bindable)); |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
478 |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
479 klass->help_window = GNT_BINDABLE(gnt_window_new()); |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
480 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
|
481 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
|
482 if (tree) { |
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
483 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
|
484 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
|
485 } else |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
486 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
|
487 |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
488 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
|
489 gnt_widget_show(GNT_WIDGET(klass->help_window)); |
17932
15988e2bd270
Mostly whitespace changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17931
diff
changeset
|
490 g_free(title); |
17931
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
491 |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
492 return TRUE; |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
493 } |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17928
diff
changeset
|
494 |