Commit a5c30a3a authored by Matthias Clasen's avatar Matthias Clasen Committed by Matthias Clasen

Add a way to lock individual accelerator paths. (#73207, reported by Havoc

Mon Dec 29 01:36:22 2003  Matthias Clasen  <maclas@gmx.de>

	* 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)
parent d2e57678
Mon Dec 29 01:36:22 2003 Matthias Clasen <maclas@gmx.de>
* 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 <sandmann@daimi.au.dk> Sat Dec 27 23:17:56 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE
......
Mon Dec 29 01:36:22 2003 Matthias Clasen <maclas@gmx.de>
* 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 <sandmann@daimi.au.dk> Sat Dec 27 23:17:56 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE
......
Mon Dec 29 01:36:22 2003 Matthias Clasen <maclas@gmx.de>
* 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 <sandmann@daimi.au.dk> Sat Dec 27 23:17:56 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE
......
Mon Dec 29 01:36:22 2003 Matthias Clasen <maclas@gmx.de>
* 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 <sandmann@daimi.au.dk> Sat Dec 27 23:17:56 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE
......
Mon Dec 29 01:36:22 2003 Matthias Clasen <maclas@gmx.de>
* 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 <sandmann@daimi.au.dk> Sat Dec 27 23:17:56 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE * gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE
......
Mon Dec 29 01:40:20 2003 Matthias Clasen <maclas@gmx.de>
* gtk/gtk-sections.txt: Add gtk_accel_map_{un,}lock_path.
Wed Dec 24 01:12:12 2003 Matthias Clasen <maclas@gmx.de> Wed Dec 24 01:12:12 2003 Matthias Clasen <maclas@gmx.de>
* gtk/gtk-sections.txt: Add GtkClipboardTargetReceivedFunc, * gtk/gtk-sections.txt: Add GtkClipboardTargetReceivedFunc,
......
...@@ -43,6 +43,7 @@ typedef struct { ...@@ -43,6 +43,7 @@ typedef struct {
guint std_accel_key; guint std_accel_key;
guint std_accel_mods; guint std_accel_mods;
guint changed : 1; guint changed : 1;
guint locked : 1;
GSList *groups; GSList *groups;
} AccelEntry; } AccelEntry;
...@@ -160,6 +161,7 @@ gtk_accel_map_add_entry (const gchar *accel_path, ...@@ -160,6 +161,7 @@ gtk_accel_map_add_entry (const gchar *accel_path,
entry->accel_key = accel_key; entry->accel_key = accel_key;
entry->accel_mods = accel_mods; entry->accel_mods = accel_mods;
entry->changed = FALSE; entry->changed = FALSE;
entry->locked = FALSE;
g_hash_table_insert (accel_entry_ht, entry, entry); g_hash_table_insert (accel_entry_ht, entry, entry);
} }
} }
...@@ -240,6 +242,7 @@ internal_change_entry (const gchar *accel_path, ...@@ -240,6 +242,7 @@ internal_change_entry (const gchar *accel_path,
entry->accel_key = accel_key; entry->accel_key = accel_key;
entry->accel_mods = accel_mods; entry->accel_mods = accel_mods;
entry->changed = TRUE; entry->changed = TRUE;
entry->locked = FALSE;
} }
return TRUE; return TRUE;
} }
...@@ -251,6 +254,9 @@ internal_change_entry (const gchar *accel_path, ...@@ -251,6 +254,9 @@ internal_change_entry (const gchar *accel_path,
entry->changed = TRUE; entry->changed = TRUE;
return simulate ? TRUE : FALSE; return simulate ? TRUE : FALSE;
} }
if (entry->locked)
return FALSE;
/* nobody's interested, easy going */ /* nobody's interested, easy going */
if (!entry->groups) if (!entry->groups)
...@@ -825,3 +831,57 @@ _gtk_accel_map_remove_group (const gchar *accel_path, ...@@ -825,3 +831,57 @@ _gtk_accel_map_remove_group (const gchar *accel_path,
entry->groups = g_slist_remove (entry->groups, accel_group); 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;
}
...@@ -51,6 +51,8 @@ void gtk_accel_map_load_fd (gint fd); ...@@ -51,6 +51,8 @@ void gtk_accel_map_load_fd (gint fd);
void gtk_accel_map_load_scanner (GScanner *scanner); void gtk_accel_map_load_scanner (GScanner *scanner);
void gtk_accel_map_save_fd (gint fd); 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 --- */ /* --- filter functions --- */
void gtk_accel_map_add_filter (const gchar *filter_pattern); void gtk_accel_map_add_filter (const gchar *filter_pattern);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment