gtkbindings.h 6.87 KB
Newer Older
Cody Russell's avatar
Cody Russell committed
1
/* GTK - The GIMP Toolkit
Tim Janik's avatar
Tim Janik committed
2 3
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
4
 * GtkBindingSet: Keybinding manager for GObjects.
Tim Janik's avatar
Tim Janik committed
5 6 7
 * Copyright (C) 1998 Tim Janik
 *
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
Tim Janik's avatar
Tim Janik committed
9 10 11 12 13
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * 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.
Tim Janik's avatar
Tim Janik committed
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
Javier Jardón's avatar
Javier Jardón committed
18
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Tim Janik's avatar
Tim Janik committed
19
 */
20 21

/*
22
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
23 24
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
25
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
26 27
 */

Tim Janik's avatar
Tim Janik committed
28 29 30 31
#ifndef __GTK_BINDINGS_H__
#define __GTK_BINDINGS_H__


32 33 34 35
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

Tim Janik's avatar
Tim Janik committed
36
#include <gdk/gdk.h>
37
#include <gtk/gtkenums.h>
Tim Janik's avatar
Tim Janik committed
38

39
G_BEGIN_DECLS
Tim Janik's avatar
Tim Janik committed
40

41 42 43 44
typedef struct _GtkBindingSet    GtkBindingSet;
typedef struct _GtkBindingEntry  GtkBindingEntry;
typedef struct _GtkBindingSignal GtkBindingSignal;
typedef struct _GtkBindingArg    GtkBindingArg;
Tim Janik's avatar
Tim Janik committed
45

46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
/**
 * GtkBindingSet:
 * @set_name: unique name of this binding set
 * @priority: unused
 * @widget_path_pspecs: unused
 * @widget_class_pspecs: unused
 * @class_branch_pspecs: unused
 * @entries: the key binding entries in this binding set
 * @current: implementation detail
 * @parsed: whether this binding set stems from a CSS file and is reset upon theme changes
 *
 * A binding set maintains a list of activatable key bindings.
 * A single binding set can match multiple types of widgets.
 * Similar to style contexts, can be matched by any information contained
 * in a widgets #GtkWidgetPath. When a binding within a set is matched upon
 * activation, an action signal is emitted on the target widget to carry out
 * the actual activation.
 */
Tim Janik's avatar
Tim Janik committed
64 65
struct _GtkBindingSet
{
66 67 68 69 70 71 72 73
  gchar           *set_name;
  gint             priority;
  GSList          *widget_path_pspecs;
  GSList          *widget_class_pspecs;
  GSList          *class_branch_pspecs;
  GtkBindingEntry *entries;
  GtkBindingEntry *current;
  guint            parsed : 1;
Tim Janik's avatar
Tim Janik committed
74 75
};

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
/**
 * GtkBindingEntry:
 * @keyval: key value to match
 * @modifiers: key modifiers to match
 * @binding_set: binding set this entry belongs to
 * @destroyed: implementation detail
 * @in_emission: implementation detail
 * @marks_unbound: implementation detail
 * @set_next: linked list of entries maintained by binding set
 * @hash_next: implementation detail
 * @signals: action signals of this entry
 *
 * Each key binding element of a binding sets binding list is
 * represented by a GtkBindingEntry.
 */
Tim Janik's avatar
Tim Janik committed
91 92
struct _GtkBindingEntry
{
93 94 95 96 97 98 99 100 101 102 103
  /* key portion */
  guint             keyval;
  GdkModifierType   modifiers;

  GtkBindingSet    *binding_set;
  guint             destroyed     : 1;
  guint             in_emission   : 1;
  guint             marks_unbound : 1;
  GtkBindingEntry  *set_next;
  GtkBindingEntry  *hash_next;
  GtkBindingSignal *signals;
Tim Janik's avatar
Tim Janik committed
104 105
};

106 107 108 109 110 111 112 113
/**
 * GtkBindingArg:
 * @arg_type: implementation detail
 *
 * A #GtkBindingArg holds the data associated with
 * an argument for a key binding signal emission as
 * stored in #GtkBindingSignal.
 */
Tim Janik's avatar
Tim Janik committed
114 115
struct _GtkBindingArg
{
116
  GType      arg_type;
Tim Janik's avatar
Tim Janik committed
117
  union {
118 119 120
    glong    long_data;
    gdouble  double_data;
    gchar   *string_data;
Tim Janik's avatar
Tim Janik committed
121 122 123
  } d;
};

124 125 126 127 128
/**
 * GtkBindingSignal:
 * @next: implementation detail
 * @signal_name: the action signal to be emitted
 * @n_args: number of arguments specified for the signal
129
 * @args: (array length=n_args): the arguments specified for the signal
130 131 132 133 134
 *
 * A GtkBindingSignal stores the necessary information to
 * activate a widget in response to a key press via a signal
 * emission.
 */
135 136
struct _GtkBindingSignal
{
137 138 139 140
  GtkBindingSignal *next;
  gchar            *signal_name;
  guint             n_args;
  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 149
GtkBindingSet *gtk_binding_set_find          (const gchar         *set_name);

150
GDK_AVAILABLE_IN_ALL
151 152 153
gboolean       gtk_bindings_activate         (GObject             *object,
                                              guint                keyval,
                                              GdkModifierType      modifiers);
154
GDK_AVAILABLE_IN_ALL
155 156
gboolean       gtk_bindings_activate_event   (GObject             *object,
                                              GdkEventKey         *event);
157
GDK_AVAILABLE_IN_ALL
158 159 160 161 162
gboolean       gtk_binding_set_activate      (GtkBindingSet       *binding_set,
                                              guint                keyval,
                                              GdkModifierType      modifiers,
                                              GObject             *object);

163
GDK_AVAILABLE_IN_ALL
164 165 166
void           gtk_binding_entry_skip        (GtkBindingSet       *binding_set,
                                              guint                keyval,
                                              GdkModifierType      modifiers);
167
GDK_AVAILABLE_IN_ALL
168 169 170 171 172 173
void           gtk_binding_entry_add_signal  (GtkBindingSet       *binding_set,
                                              guint                keyval,
                                              GdkModifierType      modifiers,
                                              const gchar         *signal_name,
                                              guint                n_args,
                                              ...);
174
GDK_AVAILABLE_IN_ALL
175 176 177 178 179 180
void           gtk_binding_entry_add_signall (GtkBindingSet       *binding_set,
                                              guint                keyval,
                                              GdkModifierType      modifiers,
                                              const gchar         *signal_name,
                                              GSList              *binding_args);

181
GDK_AVAILABLE_IN_ALL
182 183 184 185
GTokenType     gtk_binding_entry_add_signal_from_string
                                             (GtkBindingSet       *binding_set,
                                              const gchar         *signal_desc);

186
GDK_AVAILABLE_IN_ALL
187 188 189 190
void           gtk_binding_entry_remove      (GtkBindingSet       *binding_set,
                                              guint                keyval,
                                              GdkModifierType      modifiers);

191
G_END_DECLS
Tim Janik's avatar
Tim Janik committed
192 193

#endif /* __GTK_BINDINGS_H__ */