1 /* GTK - The GIMP Toolkit 2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 3 * 4 * GtkBindingSet: Keybinding manager for GObjects. 5 * Copyright (C) 1998 Tim Janik 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 /* 22 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS 23 * file for a list of people on the GTK+ Team. See the ChangeLog 24 * files for a list of changes. These files are distributed with 25 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 26 */ 27 28 #ifndef __GTK_BINDINGS_H__ 29 #define __GTK_BINDINGS_H__ 30 31 32 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) 33 #error "Only <gtk/gtk.h> can be included directly." 34 #endif 35 36 #include <gdk/gdk.h> 37 #include <gtk/gtkenums.h> 38 39 G_BEGIN_DECLS 40 41 typedef struct _GtkBindingSet GtkBindingSet; 42 typedef struct _GtkBindingEntry GtkBindingEntry; 43 typedef struct _GtkBindingSignal GtkBindingSignal; 44 typedef struct _GtkBindingArg GtkBindingArg; 45 46 /** 47 * GtkBindingSet: 48 * @set_name: unique name of this binding set 49 * @priority: unused 50 * @widget_path_pspecs: unused 51 * @widget_class_pspecs: unused 52 * @class_branch_pspecs: unused 53 * @entries: the key binding entries in this binding set 54 * @current: implementation detail 55 * @parsed: whether this binding set stems from a CSS file and is reset upon theme changes 56 * 57 * A binding set maintains a list of activatable key bindings. 58 * A single binding set can match multiple types of widgets. 59 * Similar to style contexts, can be matched by any information contained 60 * in a widgets #GtkWidgetPath. When a binding within a set is matched upon 61 * activation, an action signal is emitted on the target widget to carry out 62 * the actual activation. 63 */ 64 struct _GtkBindingSet 65 { 66 gchar *set_name; 67 gint priority; 68 GSList *widget_path_pspecs; 69 GSList *widget_class_pspecs; 70 GSList *class_branch_pspecs; 71 GtkBindingEntry *entries; 72 GtkBindingEntry *current; 73 guint parsed : 1; 74 }; 75 76 /** 77 * GtkBindingEntry: 78 * @keyval: key value to match 79 * @modifiers: key modifiers to match 80 * @binding_set: binding set this entry belongs to 81 * @destroyed: implementation detail 82 * @in_emission: implementation detail 83 * @marks_unbound: implementation detail 84 * @set_next: linked list of entries maintained by binding set 85 * @hash_next: implementation detail 86 * @signals: action signals of this entry 87 * 88 * Each key binding element of a binding sets binding list is 89 * represented by a GtkBindingEntry. 90 */ 91 struct _GtkBindingEntry 92 { 93 /* key portion */ 94 guint keyval; 95 GdkModifierType modifiers; 96 97 GtkBindingSet *binding_set; 98 guint destroyed : 1; 99 guint in_emission : 1; 100 guint marks_unbound : 1; 101 GtkBindingEntry *set_next; 102 GtkBindingEntry *hash_next; 103 GtkBindingSignal *signals; 104 }; 105 106 /** 107 * GtkBindingArg: 108 * @arg_type: implementation detail 109 * 110 * A #GtkBindingArg holds the data associated with 111 * an argument for a key binding signal emission as 112 * stored in #GtkBindingSignal. 113 */ 114 struct _GtkBindingArg 115 { 116 GType arg_type; 117 union { 118 glong long_data; 119 gdouble double_data; 120 gchar *string_data; 121 } d; 122 }; 123 124 /** 125 * GtkBindingSignal: 126 * @next: implementation detail 127 * @signal_name: the action signal to be emitted 128 * @n_args: number of arguments specified for the signal 129 * @args: (array length=n_args): the arguments specified for the signal 130 * 131 * A GtkBindingSignal stores the necessary information to 132 * activate a widget in response to a key press via a signal 133 * emission. 134 */ 135 struct _GtkBindingSignal 136 { 137 GtkBindingSignal *next; 138 gchar *signal_name; 139 guint n_args; 140 GtkBindingArg *args; 141 }; 142 143 GDK_AVAILABLE_IN_ALL 144 GtkBindingSet *gtk_binding_set_new (const gchar *set_name); 145 GDK_AVAILABLE_IN_ALL 146 GtkBindingSet *gtk_binding_set_by_class (gpointer object_class); 147 GDK_AVAILABLE_IN_ALL 148 GtkBindingSet *gtk_binding_set_find (const gchar *set_name); 149 150 GDK_AVAILABLE_IN_ALL 151 gboolean gtk_bindings_activate (GObject *object, 152 guint keyval, 153 GdkModifierType modifiers); 154 GDK_AVAILABLE_IN_ALL 155 gboolean gtk_bindings_activate_event (GObject *object, 156 GdkEventKey *event); 157 GDK_AVAILABLE_IN_ALL 158 gboolean gtk_binding_set_activate (GtkBindingSet *binding_set, 159 guint keyval, 160 GdkModifierType modifiers, 161 GObject *object); 162 163 GDK_AVAILABLE_IN_ALL 164 void gtk_binding_entry_skip (GtkBindingSet *binding_set, 165 guint keyval, 166 GdkModifierType modifiers); 167 GDK_AVAILABLE_IN_ALL 168 void gtk_binding_entry_add_signal (GtkBindingSet *binding_set, 169 guint keyval, 170 GdkModifierType modifiers, 171 const gchar *signal_name, 172 guint n_args, 173 ...); 174 GDK_AVAILABLE_IN_ALL 175 void gtk_binding_entry_add_signall (GtkBindingSet *binding_set, 176 guint keyval, 177 GdkModifierType modifiers, 178 const gchar *signal_name, 179 GSList *binding_args); 180 181 GDK_AVAILABLE_IN_ALL 182 GTokenType gtk_binding_entry_add_signal_from_string 183 (GtkBindingSet *binding_set, 184 const gchar *signal_desc); 185 186 GDK_AVAILABLE_IN_ALL 187 void gtk_binding_entry_remove (GtkBindingSet *binding_set, 188 guint keyval, 189 GdkModifierType modifiers); 190 191 G_END_DECLS 192 193 #endif /* __GTK_BINDINGS_H__ */ 194