diff --git a/midori/midori.vapi b/midori/midori.vapi index eb0f1f29..8e04493a 100644 --- a/midori/midori.vapi +++ b/midori/midori.vapi @@ -149,5 +149,10 @@ namespace Midori { public class WebSettings : WebKit.WebSettings { public WebSettings (); } + + [CCode (cheader_filename = "midori/sokoke.h", lower_case_cprefix = "sokoke_")] + namespace Sokoke { + public static uint gtk_action_count_modifiers (Gtk.Action action); + } } diff --git a/midori/sokoke.c b/midori/sokoke.c index e8ade3af..c6e8614a 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -1682,6 +1682,39 @@ sokoke_window_activate_key (GtkWindow* window, return FALSE; } +/** + * sokoke_gtk_action_count_modifiers: + * @action: a #GtkAction + * + * Counts the number of modifiers in the accelerator + * belonging to the action. + * + * Return value: the number of modifiers + **/ +guint +sokoke_gtk_action_count_modifier (GtkAction* action) +{ + GtkAccelKey key; + gint mods, cmods = 0; + const gchar* accel_path; + + g_return_val_if_fail (GTK_IS_ACTION (action), 0); + + accel_path = gtk_action_get_accel_path (action); + if (accel_path) + if (gtk_accel_map_lookup_entry (accel_path, &key)) + { + mods = key.accel_mods; + while (mods) + { + if (1 & mods >> 0) + cmods++; + mods = mods >> 1; + } + } + return cmods; +} + /** * sokoke_file_chooser_dialog_new: * @title: a window title, or %NULL diff --git a/midori/sokoke.h b/midori/sokoke.h index 46da82e8..187cea76 100644 --- a/midori/sokoke.h +++ b/midori/sokoke.h @@ -227,6 +227,8 @@ sokoke_replace_variables (const gchar* template, gboolean sokoke_window_activate_key (GtkWindow* window, GdkEventKey* event); +guint +sokoke_gtk_action_count_modifiers (GtkAction* action); GtkWidget* sokoke_file_chooser_dialog_new (const gchar* title,