Merge branch 'wip/baedert/accelmap' into 'master'
AccelMap: Sort accels before iterating over them in foreach() See merge request GNOME/gtk!980
This commit is contained in:
@@ -155,6 +155,16 @@ accel_entry_equal (gconstpointer key1,
|
|||||||
return g_str_equal (entry1->accel_path, entry2->accel_path);
|
return g_str_equal (entry1->accel_path, entry2->accel_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
accel_entry_compare (gconstpointer a,
|
||||||
|
gconstpointer b)
|
||||||
|
{
|
||||||
|
const AccelEntry *entry1 = a;
|
||||||
|
const AccelEntry *entry2 = b;
|
||||||
|
|
||||||
|
return strcmp (entry1->accel_path, entry2->accel_path);
|
||||||
|
}
|
||||||
|
|
||||||
static inline AccelEntry*
|
static inline AccelEntry*
|
||||||
accel_path_lookup (const gchar *accel_path)
|
accel_path_lookup (const gchar *accel_path)
|
||||||
{
|
{
|
||||||
@@ -817,17 +827,23 @@ gtk_accel_map_foreach (gpointer data,
|
|||||||
g_return_if_fail (foreach_func != NULL);
|
g_return_if_fail (foreach_func != NULL);
|
||||||
|
|
||||||
entries = g_hash_table_slist_values (accel_entry_ht);
|
entries = g_hash_table_slist_values (accel_entry_ht);
|
||||||
|
entries = g_slist_sort (entries, accel_entry_compare);
|
||||||
|
|
||||||
for (slist = entries; slist; slist = slist->next)
|
for (slist = entries; slist; slist = slist->next)
|
||||||
{
|
{
|
||||||
AccelEntry *entry = slist->data;
|
AccelEntry *entry = slist->data;
|
||||||
gboolean changed = entry->accel_key != entry->std_accel_key || entry->accel_mods != entry->std_accel_mods;
|
gboolean changed = entry->accel_key != entry->std_accel_key || entry->accel_mods != entry->std_accel_mods;
|
||||||
|
gboolean skip = FALSE;
|
||||||
|
|
||||||
for (node = accel_filters; node; node = node->next)
|
for (node = accel_filters; node; node = node->next)
|
||||||
if (g_pattern_match_string (node->data, entry->accel_path))
|
if (g_pattern_match_string (node->data, entry->accel_path))
|
||||||
goto skip_accel;
|
{
|
||||||
foreach_func (data, entry->accel_path, entry->accel_key, entry->accel_mods, changed);
|
skip = TRUE;
|
||||||
skip_accel:
|
break;
|
||||||
/* noop */;
|
}
|
||||||
|
|
||||||
|
if (!skip)
|
||||||
|
foreach_func (data, entry->accel_path, entry->accel_key, entry->accel_mods, changed);
|
||||||
}
|
}
|
||||||
g_slist_free (entries);
|
g_slist_free (entries);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user