From a5c30a3aca926780645f3cfb72e85e68785b2c8b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 29 Dec 2003 00:38:50 +0000 Subject: [PATCH] Add a way to lock individual accelerator paths. (#73207, reported by Havoc Mon Dec 29 01:36:22 2003 Matthias Clasen * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, gtk_accel_map_unlock_path): Add a way to lock individual accelerator paths. (#73207, reported by Havoc Pennington) --- ChangeLog | 6 ++++ ChangeLog.pre-2-10 | 6 ++++ ChangeLog.pre-2-4 | 6 ++++ ChangeLog.pre-2-6 | 6 ++++ ChangeLog.pre-2-8 | 6 ++++ docs/reference/ChangeLog | 4 +++ gtk/gtkaccelmap.c | 60 ++++++++++++++++++++++++++++++++++++++++ gtk/gtkaccelmap.h | 2 ++ 8 files changed, 96 insertions(+) diff --git a/ChangeLog b/ChangeLog index afc77d9851..6f80a4bfc9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Dec 29 01:36:22 2003 Matthias Clasen + + * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, + gtk_accel_map_unlock_path): Add a way to lock individual accelerator + paths. (#73207, reported by Havoc Pennington) + Sat Dec 27 23:17:56 2003 Soeren Sandmann * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index afc77d9851..6f80a4bfc9 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Mon Dec 29 01:36:22 2003 Matthias Clasen + + * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, + gtk_accel_map_unlock_path): Add a way to lock individual accelerator + paths. (#73207, reported by Havoc Pennington) + Sat Dec 27 23:17:56 2003 Soeren Sandmann * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index afc77d9851..6f80a4bfc9 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Mon Dec 29 01:36:22 2003 Matthias Clasen + + * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, + gtk_accel_map_unlock_path): Add a way to lock individual accelerator + paths. (#73207, reported by Havoc Pennington) + Sat Dec 27 23:17:56 2003 Soeren Sandmann * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index afc77d9851..6f80a4bfc9 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Mon Dec 29 01:36:22 2003 Matthias Clasen + + * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, + gtk_accel_map_unlock_path): Add a way to lock individual accelerator + paths. (#73207, reported by Havoc Pennington) + Sat Dec 27 23:17:56 2003 Soeren Sandmann * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index afc77d9851..6f80a4bfc9 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Mon Dec 29 01:36:22 2003 Matthias Clasen + + * gtk/gtkaccelmap.[hc]: (gtk_accel_map_lock_path, + gtk_accel_map_unlock_path): Add a way to lock individual accelerator + paths. (#73207, reported by Havoc Pennington) + Sat Dec 27 23:17:56 2003 Soeren Sandmann * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 3c319711f2..a3370019d4 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,7 @@ +Mon Dec 29 01:40:20 2003 Matthias Clasen + + * gtk/gtk-sections.txt: Add gtk_accel_map_{un,}lock_path. + Wed Dec 24 01:12:12 2003 Matthias Clasen * gtk/gtk-sections.txt: Add GtkClipboardTargetReceivedFunc, diff --git a/gtk/gtkaccelmap.c b/gtk/gtkaccelmap.c index 709b7115b5..4fcce87dce 100644 --- a/gtk/gtkaccelmap.c +++ b/gtk/gtkaccelmap.c @@ -43,6 +43,7 @@ typedef struct { guint std_accel_key; guint std_accel_mods; guint changed : 1; + guint locked : 1; GSList *groups; } AccelEntry; @@ -160,6 +161,7 @@ gtk_accel_map_add_entry (const gchar *accel_path, entry->accel_key = accel_key; entry->accel_mods = accel_mods; entry->changed = FALSE; + entry->locked = FALSE; g_hash_table_insert (accel_entry_ht, entry, entry); } } @@ -240,6 +242,7 @@ internal_change_entry (const gchar *accel_path, entry->accel_key = accel_key; entry->accel_mods = accel_mods; entry->changed = TRUE; + entry->locked = FALSE; } return TRUE; } @@ -251,6 +254,9 @@ internal_change_entry (const gchar *accel_path, entry->changed = TRUE; return simulate ? TRUE : FALSE; } + + if (entry->locked) + return FALSE; /* nobody's interested, easy going */ if (!entry->groups) @@ -825,3 +831,57 @@ _gtk_accel_map_remove_group (const gchar *accel_path, entry->groups = g_slist_remove (entry->groups, accel_group); } + + +/** + * gtk_accel_map_lock_path: + * @accel_path: a valid accelerator path + * + * Locks the given accelerator path. + * + * Locking an accelerator path prevents its accelerator to be changed + * during runtime. A locked accelerator path can be unlocked by + * gtk_accel_map_unlock_path(). Refer to gtk_accel_map_change_entry() + * about runtime accelerator changes. + * + * Note that locking of individual accelerator paths is independent from + * locking the #GtkAccelGroup containing them. For runtime accelerator + * changes to be possible both the accelerator path and its #GtkAccelGroup + * have to be unlocked. + * + * Since: 2.4 + **/ +void +gtk_accel_map_lock_path (const gchar *accel_path) +{ + AccelEntry *entry; + + g_return_if_fail (_gtk_accel_path_is_valid (accel_path)); + + entry = accel_path_lookup (accel_path); + + if (entry) + entry->locked = TRUE; +} + +/** + * gtk_accel_map_unlock_path: + * @accel_path: a valid accelerator path + * + * Unlocks the given accelerator path. Refer to gtk_accel_map_lock_path() + * about accelerator path locking. + * + * Since: 2.4 + **/ +void +gtk_accel_map_unlock_path (const gchar *accel_path) +{ + AccelEntry *entry; + + g_return_if_fail (_gtk_accel_path_is_valid (accel_path)); + + entry = accel_path_lookup (accel_path); + + if (entry) + entry->locked = FALSE; +} diff --git a/gtk/gtkaccelmap.h b/gtk/gtkaccelmap.h index 8b1e5fa669..9601b4bc4b 100644 --- a/gtk/gtkaccelmap.h +++ b/gtk/gtkaccelmap.h @@ -51,6 +51,8 @@ void gtk_accel_map_load_fd (gint fd); void gtk_accel_map_load_scanner (GScanner *scanner); void gtk_accel_map_save_fd (gint fd); +void gtk_accel_map_lock_path (const gchar *accel_path); +void gtk_accel_map_unlock_path (const gchar *accel_path); /* --- filter functions --- */ void gtk_accel_map_add_filter (const gchar *filter_pattern); -- GitLab