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
This commit is contained in:
Matthias Clasen 2007-06-15 19:08:08 +00:00 committed by Matthias Clasen
parent a34dfc3c5c
commit 4e1ac87bf7
3 changed files with 39 additions and 5 deletions

View File

@ -1,3 +1,8 @@
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)
2007-06-15 Mathias Hasselmann <mathias.hasselmann@gmx.de>
* gtk/gtkwidget.c: Forgot to free the unescaped tooltip text.

View File

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

View File

@ -84,11 +84,12 @@ struct _GtkMenuShellClass
GtkWidget *child,
gint position);
gint (*get_popup_delay) (GtkMenuShell *menu_shell);
gboolean (*move_selected) (GtkMenuShell *menu_shell,
gint distance);
/* Padding for future expansion */
void (*_gtk_reserved1) (void);
void (*_gtk_reserved2) (void);
void (*_gtk_reserved3) (void);
};