summaryrefslogtreecommitdiff
path: root/gtk/gtkmenushell.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-12-14 22:43:52 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-12-14 22:43:52 +0000
commit08a08cf1b5b6040da3f9a93847250e2bab6bdc2e (patch)
tree1cbfb639181dda19ec1aaea3cc2a9ddeb4cfbaf7 /gtk/gtkmenushell.c
parentc7c9ec32d58ea511af31046b301e9a536c168069 (diff)
downloadgtk+-08a08cf1b5b6040da3f9a93847250e2bab6bdc2e.tar.gz
Add a new binding signal, "move_scroll", and use it to hook up
Sat Dec 14 14:19:16 2002 Owen Taylor <otaylor@redhat.com> * gtk/gtkmenu.c: Add a new binding signal, "move_scroll", and use it to hook up Home/End/Page_Up/Page_Down keybindings. (#80484, Narayana Pattipati, Marius Andreiana) * gtk/gtkmenu.c (gtk_menu_scroll_item_visible): Fix some bugs in the computation of when an item is visible. (#99545) * gtk/gtkbindings.[ch] (_gtk_binding_signal_new) gtk/gtkmenushell.c: Move here, export privately. * gtk/gtkmenushell.c (_gtk_menu_shell_select_last): Export privately. * gtk/gtkmenushell.c (gtk_menu_shell_select_item): Don't select the item if it is already selected.
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r--gtk/gtkmenushell.c57
1 files changed, 15 insertions, 42 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 2cded4b87a..b72c04d217 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -185,35 +185,6 @@ gtk_menu_shell_get_type (void)
return menu_shell_type;
}
-static guint
-binding_signal_new (const gchar *signal_name,
- GType itype,
- GSignalFlags signal_flags,
- GCallback handler,
- GSignalAccumulator accumulator,
- gpointer accu_data,
- GSignalCMarshaller c_marshaller,
- GType return_type,
- guint n_params,
- ...)
-{
- va_list args;
- guint signal_id;
-
- g_return_val_if_fail (signal_name != NULL, 0);
-
- va_start (args, n_params);
-
- signal_id = g_signal_new_valist (signal_name, itype, signal_flags,
- g_cclosure_new (handler, NULL, NULL),
- accumulator, accu_data, c_marshaller,
- return_type, n_params, args);
-
- va_end (args);
-
- return signal_id;
-}
-
static void
gtk_menu_shell_class_init (GtkMenuShellClass *klass)
{
@@ -293,14 +264,14 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass)
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
menu_shell_signals[CYCLE_FOCUS] =
- binding_signal_new ("cycle_focus",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_CALLBACK (gtk_real_menu_shell_cycle_focus),
- NULL, NULL,
- _gtk_marshal_VOID__ENUM,
- G_TYPE_NONE, 1,
- GTK_TYPE_DIRECTION_TYPE);
+ _gtk_binding_signal_new ("cycle_focus",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_CALLBACK (gtk_real_menu_shell_cycle_focus),
+ NULL, NULL,
+ _gtk_marshal_VOID__ENUM,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_DIRECTION_TYPE);
binding_set = gtk_binding_set_by_class (klass);
@@ -861,7 +832,9 @@ gtk_menu_shell_select_item (GtkMenuShell *menu_shell,
class = GTK_MENU_SHELL_GET_CLASS (menu_shell);
- if (class->select_item)
+ if (class->select_item &&
+ !(menu_shell->active &&
+ menu_shell->active_menu_item == menu_item))
class->select_item (menu_shell, menu_item);
}
@@ -1033,9 +1006,9 @@ gtk_menu_shell_select_first (GtkMenuShell *menu_shell,
gtk_menu_shell_select_item (menu_shell, to_select);
}
-static void
-gtk_menu_shell_select_last (GtkMenuShell *menu_shell,
- gboolean search_sensitive)
+void
+_gtk_menu_shell_select_last (GtkMenuShell *menu_shell,
+ gboolean search_sensitive)
{
GtkWidget *to_select = NULL;
GList *tmp_list;
@@ -1134,7 +1107,7 @@ gtk_real_menu_shell_move_current (GtkMenuShell *menu_shell,
if (!had_selection &&
!menu_shell->active_menu_item &&
menu_shell->children)
- gtk_menu_shell_select_last (menu_shell, TRUE);
+ _gtk_menu_shell_select_last (menu_shell, TRUE);
break;
case GTK_MENU_DIR_NEXT:
gtk_menu_shell_move_selected (menu_shell, 1);