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)
This commit is contained in:
Matthias Clasen 2003-12-29 00:38:50 +00:00 committed by Matthias Clasen
parent d2e576787c
commit a5c30a3aca
8 changed files with 96 additions and 0 deletions

View File

@ -1,3 +1,9 @@
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>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE

View File

@ -1,3 +1,9 @@
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>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE

View File

@ -1,3 +1,9 @@
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>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE

View File

@ -1,3 +1,9 @@
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>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE

View File

@ -1,3 +1,9 @@
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>
* gtk/gtktoolbar.c (slide_idle_handler): use CHILD_VISIBLE

View File

@ -1,3 +1,7 @@
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>
* gtk/gtk-sections.txt: Add GtkClipboardTargetReceivedFunc,

View File

@ -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;
}

View File

@ -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);