diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-06-15 19:08:08 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-06-15 19:08:08 +0000 |
commit | 4e1ac87bf7e48cfb8c9f8ba672c3bc2000127ea4 (patch) | |
tree | 88c05375de7791551aa9bee6412e5cc8004b0dfd /gtk/gtkmenushell.c | |
parent | a34dfc3c5cea3688b99b7a2bc93b4d054779e014 (diff) | |
download | gtk+-4e1ac87bf7e48cfb8c9f8ba672c3bc2000127ea4.tar.gz |
add move_selected signal to allow overriding the default internal
2007-06-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkmenushell.[ch]: add move_selected signal to allow
overriding the default internal behaviour. (#446833, Ryan Lortie)
svn path=/trunk/; revision=18145
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r-- | gtk/gtkmenushell.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 250c0ac737..79422f9587 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -57,6 +57,7 @@ enum { ACTIVATE_CURRENT, CANCEL, CYCLE_FOCUS, + MOVE_SELECTED, LAST_SIGNAL }; @@ -193,6 +194,8 @@ static void gtk_real_menu_shell_cycle_focus (GtkMenuShell *menu_shell, static void gtk_menu_shell_reset_key_hash (GtkMenuShell *menu_shell); static gboolean gtk_menu_shell_activate_mnemonic (GtkMenuShell *menu_shell, GdkEventKey *event); +static gboolean gtk_menu_shell_real_move_selected (GtkMenuShell *menu_shell, + gint distance); static guint menu_shell_signals[LAST_SIGNAL] = { 0 }; @@ -237,6 +240,7 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass) klass->cancel = gtk_real_menu_shell_cancel; klass->select_item = gtk_menu_shell_real_select_item; klass->insert = gtk_menu_shell_real_insert; + klass->move_selected = gtk_menu_shell_real_move_selected; menu_shell_signals[DEACTIVATE] = g_signal_new (I_("deactivate"), @@ -289,7 +293,15 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass) _gtk_marshal_VOID__ENUM, G_TYPE_NONE, 1, GTK_TYPE_DIRECTION_TYPE); - + menu_shell_signals[MOVE_SELECTED] = + g_signal_new (I_("move_selected"), + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkMenuShellClass, move_selected), + _gtk_boolean_handled_accumulator, NULL, + _gtk_marshal_BOOLEAN__INT, + G_TYPE_BOOLEAN, 1, + G_TYPE_INT); binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, @@ -1132,9 +1144,9 @@ gtk_menu_shell_activate_item (GtkMenuShell *menu_shell, } /* Distance should be +/- 1 */ -static void -gtk_menu_shell_move_selected (GtkMenuShell *menu_shell, - gint distance) +static gboolean +gtk_menu_shell_real_move_selected (GtkMenuShell *menu_shell, + gint distance) { if (menu_shell->active_menu_item) { @@ -1185,6 +1197,19 @@ gtk_menu_shell_move_selected (GtkMenuShell *menu_shell, if (node) gtk_menu_shell_select_item (menu_shell, node->data); } + + return TRUE; +} + +/* Distance should be +/- 1 */ +static void +gtk_menu_shell_move_selected (GtkMenuShell *menu_shell, + gint distance) +{ + gboolean handled = FALSE; + + g_signal_emit (menu_shell, menu_shell_signals[MOVE_SELECTED], 0, + distance, &handled); } /** @@ -1261,6 +1286,9 @@ gtk_menu_shell_select_submenu_first (GtkMenuShell *menu_shell) { GtkMenuItem *menu_item; + if (menu_shell->active_menu_item == NULL) + return FALSE; + menu_item = GTK_MENU_ITEM (menu_shell->active_menu_item); if (menu_item->submenu) |