X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=gtk%2Fgtkaccelgroup.h;h=7e89ddf98aae16564730c8a3a246a0649f40be4d;hb=a21deb2d2fe18c4abcd40e8e4aea0ebfa04a5a64;hp=13fdf5bef65169a65e3d9d366a0c3e11b229ac05;hpb=10ba4fd066042b4335ae45e7560565872f71ba9b;p=~andy%2Fgtk diff --git a/gtk/gtkaccelgroup.h b/gtk/gtkaccelgroup.h index 13fdf5bef..7e89ddf98 100644 --- a/gtk/gtkaccelgroup.h +++ b/gtk/gtkaccelgroup.h @@ -1,27 +1,24 @@ /* 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 Library General Public + * modify it under the terms of the GNU Lesser General Public * 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 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public + * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. @@ -32,143 +29,154 @@ #include -#include #include +G_BEGIN_DECLS -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +/* --- 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)) +#define GTK_IS_ACCEL_GROUP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_ACCEL_GROUP)) +#define GTK_IS_ACCEL_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ACCEL_GROUP)) +#define GTK_ACCEL_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ACCEL_GROUP, GtkAccelGroupClass)) -typedef struct _GtkAccelGroup GtkAccelGroup; -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); + +typedef gboolean (*GtkAccelGroupFindFunc) (GtkAccelKey *key, + GClosure *closure, + gpointer data); + struct _GtkAccelGroup { - guint ref_count; - 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 _GtkAccelEntry +struct _GtkAccelGroupClass { - /* key portion - */ - GtkAccelGroup *accel_group; - guint accelerator_key; - GdkModifierType accelerator_mods; + GObjectClass parent_class; + + void (*accel_changed) (GtkAccelGroup *accel_group, + guint keyval, + GdkModifierType modifier, + GClosure *accel_closure); - GtkAccelFlags accel_flags; - GtkObject *object; - guint signal_id; + /* Padding for future expansion */ + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + void (*_gtk_reserved4) (void); }; +struct _GtkAccelKey +{ + guint accel_key; + GdkModifierType accel_mods; + guint accel_flags : 16; +}; -/* Accelerators - */ + +/* -- Accelerator Groups --- */ +GType gtk_accel_group_get_type (void) G_GNUC_CONST; +GtkAccelGroup* gtk_accel_group_new (void); +void gtk_accel_group_lock (GtkAccelGroup *accel_group); +void gtk_accel_group_unlock (GtkAccelGroup *accel_group); +void gtk_accel_group_connect (GtkAccelGroup *accel_group, + guint accel_key, + GdkModifierType accel_mods, + GtkAccelFlags accel_flags, + GClosure *closure); +void gtk_accel_group_connect_by_path (GtkAccelGroup *accel_group, + const gchar *accel_path, + GClosure *closure); +gboolean gtk_accel_group_disconnect (GtkAccelGroup *accel_group, + GClosure *closure); +gboolean gtk_accel_group_disconnect_key (GtkAccelGroup *accel_group, + guint accel_key, + GdkModifierType accel_mods); +gboolean gtk_accel_group_activate (GtkAccelGroup *accel_group, + GQuark accel_quark, + GObject *acceleratable, + guint accel_key, + GdkModifierType accel_mods); + + +/* --- GtkActivatable glue --- */ +void _gtk_accel_group_attach (GtkAccelGroup *accel_group, + GObject *object); +void _gtk_accel_group_detach (GtkAccelGroup *accel_group, + GObject *object); +gboolean gtk_accel_groups_activate (GObject *object, + guint accel_key, + GdkModifierType accel_mods); +GSList* gtk_accel_groups_from_object (GObject *object); +GtkAccelKey* gtk_accel_group_find (GtkAccelGroup *accel_group, + GtkAccelGroupFindFunc find_func, + gpointer data); +GtkAccelGroup* gtk_accel_group_from_accel_closure (GClosure *closure); + + +/* --- Accelerators--- */ gboolean gtk_accelerator_valid (guint keyval, - GdkModifierType modifiers); + 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); +gchar* gtk_accelerator_get_label (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 - */ -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 (GtkObject *object, - guint accel_key, - GdkModifierType accel_mods); - -/* internal functions - */ -gboolean gtk_accel_group_activate (GtkAccelGroup *accel_group, - guint accel_key, - GdkModifierType accel_mods); -void gtk_accel_group_attach (GtkAccelGroup *accel_group, - GtkObject *object); -void gtk_accel_group_detach (GtkAccelGroup *accel_group, - GtkObject *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, - guint accel_key, - GdkModifierType accel_mods); -void gtk_accel_group_add (GtkAccelGroup *accel_group, - guint accel_key, - GdkModifierType accel_mods, - GtkAccelFlags accel_flags, - GtkObject *object, - const gchar *accel_signal); -void gtk_accel_group_remove (GtkAccelGroup *accel_group, +/* --- internal --- */ +GtkAccelGroupEntry* gtk_accel_group_query (GtkAccelGroup *accel_group, guint accel_key, GdkModifierType accel_mods, - GtkObject *object); + guint *n_entries); -/* Accelerator Signals (internal) - */ -void gtk_accel_group_handle_add (GtkObject *object, - guint accel_signal_id, - GtkAccelGroup *accel_group, - guint accel_key, - GdkModifierType accel_mods, - GtkAccelFlags accel_flags); -void gtk_accel_group_handle_remove (GtkObject *object, - GtkAccelGroup *accel_group, - guint accel_key, - GdkModifierType accel_mods); -guint gtk_accel_group_create_add (GtkType class_type, - GtkSignalRunType signal_flags, - guint handler_offset); -guint gtk_accel_group_create_remove (GtkType class_type, - GtkSignalRunType signal_flags, - guint handler_offset); - -/* Miscellaneous (internal) - */ -GSList* gtk_accel_groups_from_object (GtkObject *object); -GSList* gtk_accel_group_entries_from_object (GtkObject *object); +void _gtk_accel_group_reconnect (GtkAccelGroup *accel_group, + GQuark accel_path_quark); + +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 */ -#ifdef __cplusplus -} -#endif /* __cplusplus */ +G_END_DECLS #endif /* __GTK_ACCEL_GROUP_H__ */