summaryrefslogtreecommitdiff
path: root/gtk/gtkaccelgroup.h
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>2001-11-13 00:53:47 +0000
committerTim Janik <timj@src.gnome.org>2001-11-13 00:53:47 +0000
commitd07573c090f8ca8c3fdb8f4d3f63b32be96ea7d6 (patch)
treeea660dfa3bec08f14714db1b2e9699bf5f126394 /gtk/gtkaccelgroup.h
parentaebe24f2bba1a41b23ab62b7adfc867e28adb3fc (diff)
downloadgtk+-d07573c090f8ca8c3fdb8f4d3f63b32be96ea7d6.tar.gz
added gtkaccelmap.sgml. other updates.
Mon Nov 12 23:06:38 2001 Tim Janik <timj@gtk.org> * added gtkaccelmap.sgml. other updates. Mon Nov 12 23:08:37 2001 Tim Janik <timj@gtk.org> * gtk/maketypes.awk: fix type utils generation on unix. * gtk/gtkaccelmap.[hc]: new files, implementing a global accelerator registry. * gtk/gtkaccelgroup.[hc]: major API/implementation revamp: removed GTK_ACCEL_SIGNAL_VISIBLE, gtk_accel_group_get_default, gtk_accel_group_get_entry, gtk_accel_group_(un)lock_entry, gtk_accel_group_add/remove, gtk_accel_group_handle_add/remove, gtk_accel_group_create_add/remove, gtk_accel_group_entries_from_object. introduced ::accel_changed signal for change notification, and gtk_accel_group_connect/disconnect to connect closures to accel groups. made gtk_accel_group_attach/detach and gtk_accel_group_activate private functions. deprecated gtk_accel_group_ref/unref. * gtk/gtkaccellabel.[hc]: changes to make accellabels pay attention to accel group changed notification and basically operate on closures. removed gtk_accel_label_get_accel_object and gtk_accel_label_set_accel_object. introduced gtk_accel_label_set_accel_closure, and for convenience, gtk_accel_label_set_accel_widget. * gtk/gtkitemfactory.[hc]: removed accelerator propagation code which mostly moved into gtkaccelmap.[hc]. removed gtk_item_factory_parse_rc*, gtk_item_factory_dump_* and gtk_item_factory_print_func. * gtk/gtkmain.c: call _gtk_accel_map_init(). * gtk/gtkmenuitem.[hc]: introduced gtk_menu_item_set_accel_path(), that associates an accelerator path with menu items, through which persistent accelerator settings on menu items are enabled. * gtk/gtkmenu.[hc]: added gtk_menu_set_accel_path() so accelerator paths of menu item can be default constructed to allow installation of accelerators on menu items that don't come with an accelerator binding by default. * gtk/gtksettings.c: fix STRING type rc settings by special casing them appropriately in the parser. * gtk/gtksignal.[hc]: allow a class function offset of 0 for gtk_signal_newv(). * gtk/gtkwidget.[hc]: accelerator API revamp. removed ::accelerator_add/remove signals, gtk_widget_accelerator_signal, gtk_widget_accelerators_locked, gtk_widget_remove_accelerators and gtk_widget_(un)lock_accelerators. accelerators maintained through gtk_widget_add/remove_accelerator() are not runtime changable now, the correct sequence to setup a widget for runtime changable accelerators is now: gtk_accel_map_add_entry(accel_path, key, mods); _gtk_widget_set_accel_path(widget, accel_path, accel_group); * gtk/gtkwindow.[hc]: accelerator changes, proxy and coalesce accel group changes (as well as mnemonic changes) through the new signal ::accels_changed. Sat Nov 10 12:08:56 2001 Tim Janik <timj@gtk.org> * gtk/gtksettings.c (_gtk_settings_parse_convert): properly handle GString->string conversions.
Diffstat (limited to 'gtk/gtkaccelgroup.h')
-rw-r--r--gtk/gtkaccelgroup.h183
1 files changed, 78 insertions, 105 deletions
diff --git a/gtk/gtkaccelgroup.h b/gtk/gtkaccelgroup.h
index d3e8d1fb48..5fca1a33b3 100644
--- a/gtk/gtkaccelgroup.h
+++ b/gtk/gtkaccelgroup.h
@@ -1,8 +1,5 @@
/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * GtkAccelGroup: Accelerator manager for GtkObjects.
- * Copyright (C) 1998 Tim Janik
+ * Copyright (C) 1998, 2001 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -32,13 +29,12 @@
#include <gdk/gdk.h>
-#include <gtk/gtkobject.h>
#include <gtk/gtkenums.h>
-
G_BEGIN_DECLS
+/* --- type macros --- */
#define GTK_TYPE_ACCEL_GROUP (gtk_accel_group_get_type ())
#define GTK_ACCEL_GROUP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_ACCEL_GROUP, GtkAccelGroup))
#define GTK_ACCEL_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ACCEL_GROUP, GtkAccelGroupClass))
@@ -47,136 +43,113 @@ G_BEGIN_DECLS
#define GTK_ACCEL_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ACCEL_GROUP, GtkAccelGroupClass))
-typedef struct _GtkAccelGroup GtkAccelGroup;
-typedef struct _GtkAccelGroupClass GtkAccelGroupClass;
-typedef struct _GtkAccelEntry GtkAccelEntry;
-
+/* --- accel flags --- */
typedef enum
{
- /* should the accelerator appear in
- * the widget's display?
- */
- GTK_ACCEL_VISIBLE = 1 << 0,
- /* should the signal associated with
- * this accelerator be also visible?
- */
- GTK_ACCEL_SIGNAL_VISIBLE = 1 << 1,
- /* may the accelerator be removed
- * again?
- */
- GTK_ACCEL_LOCKED = 1 << 2,
+ GTK_ACCEL_VISIBLE = 1 << 0, /* display in GtkAccelLabel? */
+ GTK_ACCEL_LOCKED = 1 << 1, /* is it removable? */
GTK_ACCEL_MASK = 0x07
} GtkAccelFlags;
+
+/* --- typedefs & structures --- */
+typedef struct _GtkAccelGroup GtkAccelGroup;
+typedef struct _GtkAccelGroupClass GtkAccelGroupClass;
+typedef struct _GtkAccelKey GtkAccelKey;
+typedef struct _GtkAccelGroupEntry GtkAccelGroupEntry;
+typedef gboolean (*GtkAccelGroupActivate) (GtkAccelGroup *accel_group,
+ GObject *acceleratable,
+ guint keyval,
+ GdkModifierType modifier);
struct _GtkAccelGroup
{
- GObject parent;
- guint lock_count;
- GdkModifierType modifier_mask;
- GSList *attach_objects;
+ GObject parent;
+ guint lock_count;
+ GdkModifierType modifier_mask;
+ GSList *acceleratables;
+ guint n_accels;
+ GtkAccelGroupEntry *priv_accels;
};
-
struct _GtkAccelGroupClass
{
GObjectClass parent_class;
-};
-struct _GtkAccelEntry
+ void (*accel_changed) (GtkAccelGroup *accel_group,
+ guint keyval,
+ GdkModifierType modifier,
+ GClosure *accel_closure);
+};
+struct _GtkAccelKey
{
- /* key portion
- */
- GtkAccelGroup *accel_group;
- guint accelerator_key;
- GdkModifierType accelerator_mods;
-
- GtkAccelFlags accel_flags;
- GObject *object;
- guint signal_id;
+ guint accel_key;
+ GdkModifierType accel_mods;
+ guint accel_flags : 16;
};
-/* Accelerators
- */
-gboolean gtk_accelerator_valid (guint keyval,
- GdkModifierType modifiers) G_GNUC_CONST;
-void gtk_accelerator_parse (const gchar *accelerator,
- guint *accelerator_key,
- GdkModifierType *accelerator_mods);
-gchar* gtk_accelerator_name (guint accelerator_key,
- GdkModifierType accelerator_mods);
-void gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask);
-guint gtk_accelerator_get_default_mod_mask (void);
-
-
-/* Accelerator Groups
- */
+/* -- Accelerator Groups --- */
GType gtk_accel_group_get_type (void);
GtkAccelGroup* gtk_accel_group_new (void);
-GtkAccelGroup* gtk_accel_group_get_default (void);
-GtkAccelGroup* gtk_accel_group_ref (GtkAccelGroup *accel_group);
-void gtk_accel_group_unref (GtkAccelGroup *accel_group);
void gtk_accel_group_lock (GtkAccelGroup *accel_group);
void gtk_accel_group_unlock (GtkAccelGroup *accel_group);
-gboolean gtk_accel_groups_activate (GObject *object,
+void gtk_accel_group_connect (GtkAccelGroup *accel_group,
guint accel_key,
- GdkModifierType accel_mods);
-
-/* internal functions
- */
-gboolean gtk_accel_group_activate (GtkAccelGroup *accel_group,
+ GdkModifierType accel_mods,
+ GtkAccelFlags accel_flags,
+ GClosure *closure,
+ GQuark accel_path_quark);
+gboolean gtk_accel_group_disconnect (GtkAccelGroup *accel_group,
guint accel_key,
GdkModifierType accel_mods);
-void gtk_accel_group_attach (GtkAccelGroup *accel_group,
+gboolean gtk_accel_groups_disconnect_closure (GClosure *closure);
+
+
+/* --- GtkActivatable glue --- */
+void _gtk_accel_group_attach (GtkAccelGroup *accel_group,
GObject *object);
-void gtk_accel_group_detach (GtkAccelGroup *accel_group,
+void _gtk_accel_group_detach (GtkAccelGroup *accel_group,
GObject *object);
-
-/* Accelerator Group Entries (internal)
- */
-GtkAccelEntry* gtk_accel_group_get_entry (GtkAccelGroup *accel_group,
- guint accel_key,
- GdkModifierType accel_mods);
-void gtk_accel_group_lock_entry (GtkAccelGroup *accel_group,
- guint accel_key,
- GdkModifierType accel_mods);
-void gtk_accel_group_unlock_entry (GtkAccelGroup *accel_group,
+gboolean gtk_accel_groups_activate (GObject *acceleratable,
guint accel_key,
GdkModifierType accel_mods);
-void gtk_accel_group_add (GtkAccelGroup *accel_group,
- guint accel_key,
- GdkModifierType accel_mods,
- GtkAccelFlags accel_flags,
- GObject *object,
- const gchar *accel_signal);
-void gtk_accel_group_remove (GtkAccelGroup *accel_group,
- guint accel_key,
- GdkModifierType accel_mods,
- GObject *object);
+GSList* gtk_accel_groups_from_acceleratable (GObject *object);
+GtkAccelKey* gtk_accel_group_find (GtkAccelGroup *accel_group,
+ gboolean (*find_func) (GtkAccelKey *key,
+ GClosure *closure,
+ gpointer data),
+ gpointer data);
+GtkAccelGroup* gtk_accel_group_from_accel_closure (GClosure *closure);
-/* Accelerator Signals (internal)
- */
-void gtk_accel_group_handle_add (GObject *object,
- guint accel_signal_id,
- GtkAccelGroup *accel_group,
+
+/* --- Accelerators--- */
+gboolean gtk_accelerator_valid (guint keyval,
+ GdkModifierType modifiers) G_GNUC_CONST;
+void gtk_accelerator_parse (const gchar *accelerator,
+ guint *accelerator_key,
+ GdkModifierType *accelerator_mods);
+gchar* gtk_accelerator_name (guint accelerator_key,
+ GdkModifierType accelerator_mods);
+void gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask);
+guint gtk_accelerator_get_default_mod_mask (void);
+
+
+/* --- internal --- */
+GtkAccelGroupEntry* gtk_accel_group_query (GtkAccelGroup *accel_group,
guint accel_key,
GdkModifierType accel_mods,
- GtkAccelFlags accel_flags);
-void gtk_accel_group_handle_remove (GObject *object,
- GtkAccelGroup *accel_group,
- guint accel_key,
- GdkModifierType accel_mods);
-guint gtk_accel_group_create_add (GType class_type,
- GSignalFlags signal_flags,
- guint handler_offset);
-guint gtk_accel_group_create_remove (GType class_type,
- GSignalFlags signal_flags,
- guint handler_offset);
-
-/* Miscellaneous (internal)
- */
-GSList* gtk_accel_groups_from_object (GObject *object);
-GSList* gtk_accel_group_entries_from_object (GObject *object);
+ guint *n_entries);
+struct _GtkAccelGroupEntry
+{
+ GtkAccelKey key;
+ GClosure *closure;
+ GQuark accel_path_quark;
+};
+
+#ifndef GTK_DISABLE_DEPRECATED
+#define gtk_accel_group_ref g_object_ref
+#define gtk_accel_group_unref g_object_unref
+#endif /* GTK_DISABLE_DEPRECATED */
G_END_DECLS