summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <maclas@gmx.de>2004-02-06 23:37:00 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-02-06 23:37:00 +0000
commitc03700734ee4fe5caa0e602bfe261acad96511db (patch)
treef55c0d56f15d38027660e87851bcb472e8bfd31c
parent55468e90bdf91cc7f0dc4dde57af184e8d35d938 (diff)
downloadgtk+-c03700734ee4fe5caa0e602bfe261acad96511db.tar.gz
Add change notification for GtkAccelMap, by on-demand instantiating a
Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap, by on-demand instantiating a singleton object with a "changed" signal. * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller for GtkAccelMap::changed.
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.pre-2-109
-rw-r--r--ChangeLog.pre-2-49
-rw-r--r--ChangeLog.pre-2-69
-rw-r--r--ChangeLog.pre-2-89
-rw-r--r--docs/reference/ChangeLog9
-rw-r--r--docs/reference/gtk/gtk-sections.txt11
-rw-r--r--docs/reference/gtk/gtk.types1
-rw-r--r--gtk/gtkaccelmap.c101
-rw-r--r--gtk/gtkaccelmap.h14
-rw-r--r--gtk/gtkmarshalers.list1
11 files changed, 179 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 170ea80b4f..6da0977d3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap,
+ by on-demand instantiating a singleton object with a "changed"
+ signal.
+
+ * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller
+ for GtkAccelMap::changed.
+
Fri Feb 6 23:08:29 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtktextbtree.c (_gtk_text_btree_check):
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 170ea80b4f..6da0977d3b 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,12 @@
+Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap,
+ by on-demand instantiating a singleton object with a "changed"
+ signal.
+
+ * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller
+ for GtkAccelMap::changed.
+
Fri Feb 6 23:08:29 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtktextbtree.c (_gtk_text_btree_check):
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 170ea80b4f..6da0977d3b 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,12 @@
+Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap,
+ by on-demand instantiating a singleton object with a "changed"
+ signal.
+
+ * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller
+ for GtkAccelMap::changed.
+
Fri Feb 6 23:08:29 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtktextbtree.c (_gtk_text_btree_check):
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 170ea80b4f..6da0977d3b 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,12 @@
+Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap,
+ by on-demand instantiating a singleton object with a "changed"
+ signal.
+
+ * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller
+ for GtkAccelMap::changed.
+
Fri Feb 6 23:08:29 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtktextbtree.c (_gtk_text_btree_check):
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 170ea80b4f..6da0977d3b 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,12 @@
+Sat Feb 7 00:06:44 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtkaccelmap.[hc]: Add change notification for GtkAccelMap,
+ by on-demand instantiating a singleton object with a "changed"
+ signal.
+
+ * gtk/gtkmarshalers.list (VOID:STRING,UINT,FLAGS): Add marshaller
+ for GtkAccelMap::changed.
+
Fri Feb 6 23:08:29 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtktextbtree.c (_gtk_text_btree_check):
diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog
index f874c5358a..cf17da0d93 100644
--- a/docs/reference/ChangeLog
+++ b/docs/reference/ChangeLog
@@ -1,3 +1,12 @@
+Sat Feb 7 00:38:23 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtk-sections.txt: Add GtkAccelMap, gtk_accel_map_get,
+ and a bunch of standard and private accel map symbols.
+
+Sat Feb 7 00:38:03 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gtk/gtk.types: Add gtk_accel_map_get_type.
+
Sun Feb 1 00:37:44 2004 Matthias Clasen <maclas@gmx.de>
* gtk/tmpl/gtkobject.sgml: Remove misleading documentation for
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index e7fcd110b1..ea0902f9f6 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -45,6 +45,7 @@ GTK_ACCEL_GROUP_GET_CLASS
<SECTION>
<FILE>gtkaccelmap</FILE>
<TITLE>Accelerator Maps</TITLE>
+GtkAccelMap
GtkAccelMapForeach
gtk_accel_map_add_entry
gtk_accel_map_lookup_entry
@@ -57,6 +58,16 @@ gtk_accel_map_save_fd
gtk_accel_map_load_scanner
gtk_accel_map_add_filter
gtk_accel_map_foreach_unfiltered
+gtk_accel_map_get
+<SUBSECTION Standard>
+GTK_TYPE_ACCEL_MAP
+GTK_IS_ACCEL_MAP
+GTK_ACCEL_MAP_CLASS
+GTK_IS_ACCEL_MAP_CLASS
+GTK_ACCEL_MAP_GET_CLASS
+GtkAccelMapClass
+<SUBSECTION Private>
+gtk_accel_map_get_type
</SECTION>
<SECTION>
diff --git a/docs/reference/gtk/gtk.types b/docs/reference/gtk/gtk.types
index f9305e53ef..29c23751d3 100644
--- a/docs/reference/gtk/gtk.types
+++ b/docs/reference/gtk/gtk.types
@@ -1,6 +1,7 @@
#include <gtk/gtk.h>
gtk_accel_group_get_type
+gtk_accel_map_get_type
gtk_accel_label_get_type
gtk_accessible_get_type
gtk_action_get_type
diff --git a/gtk/gtkaccelmap.c b/gtk/gtkaccelmap.c
index e385447b0d..80c8fdd7d6 100644
--- a/gtk/gtkaccelmap.c
+++ b/gtk/gtkaccelmap.c
@@ -21,6 +21,7 @@
#include "gtkaccelmap.h"
+#include "gtkmarshalers.h"
#include "gtkwindow.h" /* in lack of GtkAcceleratable */
#include <string.h>
@@ -36,6 +37,16 @@
/* --- structures --- */
+struct _GtkAccelMap
+{
+ GObject parent_instance;
+};
+
+struct _GtkAccelMapClass
+{
+ GObjectClass parent_class;
+};
+
typedef struct {
const gchar *accel_path;
guint accel_key;
@@ -47,11 +58,21 @@ typedef struct {
GSList *groups;
} AccelEntry;
+/* --- signals --- */
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
/* --- variables --- */
-static GHashTable *accel_entry_ht = NULL; /* accel_path -> AccelEntry */
-static GSList *accel_filters = NULL;
-static GHookList *change_hooks = NULL;
+
+static GHashTable *accel_entry_ht = NULL; /* accel_path -> AccelEntry */
+static GSList *accel_filters = NULL;
+static gulong accel_map_signals[LAST_SIGNAL] = { 0, };
+static GtkAccelMap *accel_map;
+
+/* --- prototypes --- */
+static void do_accel_map_changed (AccelEntry *entry);
/* --- functions --- */
static guint
@@ -163,6 +184,8 @@ gtk_accel_map_add_entry (const gchar *accel_path,
entry->changed = FALSE;
entry->lock_count = 0;
g_hash_table_insert (accel_entry_ht, entry, entry);
+
+ do_accel_map_changed (entry);
}
}
@@ -242,6 +265,8 @@ internal_change_entry (const gchar *accel_path,
entry->accel_key = accel_key;
entry->accel_mods = accel_mods;
entry->changed = TRUE;
+
+ do_accel_map_changed (entry);
}
return TRUE;
}
@@ -268,6 +293,8 @@ internal_change_entry (const gchar *accel_path,
entry->accel_key = accel_key;
entry->accel_mods = accel_mods;
entry->changed = TRUE;
+
+ do_accel_map_changed (entry);
}
return TRUE;
}
@@ -379,6 +406,8 @@ internal_change_entry (const gchar *accel_path,
/* unref accel groups */
for (slist = group_list; slist; slist = slist->next)
g_object_unref (slist->data);
+
+ do_accel_map_changed (entry);
}
g_slist_free (replace_list);
g_slist_free (group_list);
@@ -900,3 +929,69 @@ gtk_accel_map_unlock_path (const gchar *accel_path)
entry->lock_count -= 1;
}
+G_DEFINE_TYPE (GtkAccelMap, gtk_accel_map, G_TYPE_OBJECT);
+
+static void
+gtk_accel_map_class_init (GtkAccelMapClass *accel_map_class)
+{
+ /**
+ * GtkAccelMap::changed:
+ * @object: the global accel map object
+ * @accel_path: the path of the accelerator that changed
+ * @accel_key: the key value for the new accelerator
+ * @accel_mods: the modifier mask for the new accelerator
+ *
+ * Notifies of a change in the global accelerator map.
+ * The path is also used as the detail for the signal,
+ * so it is possible to connect to
+ * changed::<replaceable>accel_path</replaceable>.
+ *
+ * Since: 2.4
+ */
+ accel_map_signals[CHANGED] = g_signal_new ("changed",
+ G_TYPE_FROM_CLASS (accel_map_class),
+ G_SIGNAL_DETAILED|G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _gtk_marshal_VOID__STRING_UINT_FLAGS,
+ G_TYPE_NONE, 3,
+ G_TYPE_STRING, G_TYPE_UINT, GDK_TYPE_MODIFIER_TYPE);
+}
+
+static void
+gtk_accel_map_init (GtkAccelMap *accel_map)
+{
+}
+
+/**
+ * gtk_accel_map_get:
+ *
+ * Gets the singleton global #GtkAccelMap object. This object
+ * is useful only for notification of changes to the accelerator
+ * map via the ::changed signal; it isn't a parameter to the
+ * other accelerator map functions.
+ *
+ * Return value: the global #GtkAccelMap object
+ *
+ * Since: 2.4
+ **/
+GtkAccelMap *
+gtk_accel_map_get (void)
+{
+ if (!accel_map)
+ accel_map = g_object_new (GTK_TYPE_ACCEL_MAP, NULL);
+
+ return accel_map;
+}
+
+static void
+do_accel_map_changed (AccelEntry *entry)
+{
+ if (accel_map)
+ g_signal_emit (accel_map,
+ accel_map_signals[CHANGED],
+ g_quark_from_string (entry->accel_path),
+ entry->accel_path,
+ entry->accel_key,
+ entry->accel_mods);
+}
diff --git a/gtk/gtkaccelmap.h b/gtk/gtkaccelmap.h
index 9601b4bc4b..bec1b9f748 100644
--- a/gtk/gtkaccelmap.h
+++ b/gtk/gtkaccelmap.h
@@ -24,6 +24,16 @@
G_BEGIN_DECLS
+/* --- global GtkAccelMap object --- */
+#define GTK_TYPE_ACCEL_MAP (gtk_accel_map_get_type ())
+#define GTK_ACCEL_MAP(accel_map) (G_TYPE_CHECK_INSTANCE_CAST ((accel_map), GTK_TYPE_ACCEL_MAP, GtkAccelMap))
+#define GTK_ACCEL_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ACCEL_MAP, GtkAccelMapClass))
+#define GTK_IS_ACCEL_MAP(accel_map) (G_TYPE_CHECK_INSTANCE_TYPE ((accel_map), GTK_TYPE_ACCEL_MAP))
+#define GTK_IS_ACCEL_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ACCEL_MAP))
+#define GTK_ACCEL_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ACCEL_MAP, GtkAccelMapClass))
+
+typedef struct _GtkAccelMap GtkAccelMap;
+typedef struct _GtkAccelMapClass GtkAccelMapClass;
/* --- notifier --- */
typedef void (*GtkAccelMapForeach) (gpointer data,
@@ -59,6 +69,10 @@ void gtk_accel_map_add_filter (const gchar *filter_pattern);
void gtk_accel_map_foreach_unfiltered (gpointer data,
GtkAccelMapForeach foreach_func);
+/* --- notification --- */
+GType gtk_accel_map_get_type (void);
+GtkAccelMap *gtk_accel_map_get (void);
+
/* --- internal API --- */
void _gtk_accel_map_init (void);
diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list
index f897caef29..9d5bc9be66 100644
--- a/gtk/gtkmarshalers.list
+++ b/gtk/gtkmarshalers.list
@@ -87,6 +87,7 @@ VOID:POINTER,UINT
VOID:STRING
VOID:STRING,STRING
VOID:STRING,INT,POINTER
+VOID:STRING,UINT,FLAGS
VOID:UINT,FLAGS,BOXED
VOID:UINT,UINT
VOID:UINT,STRING