diff options
author | Tim Janik <timj@gtk.org> | 2001-11-13 00:53:47 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 2001-11-13 00:53:47 +0000 |
commit | d07573c090f8ca8c3fdb8f4d3f63b32be96ea7d6 (patch) | |
tree | ea660dfa3bec08f14714db1b2e9699bf5f126394 /gtk/gtkaccelgroup.h | |
parent | aebe24f2bba1a41b23ab62b7adfc867e28adb3fc (diff) | |
download | gtk+-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.h | 183 |
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 |