gboolean take_focus;
};
-static void gtk_menu_shell_class_init (GtkMenuShellClass *klass);
-static void gtk_menu_shell_init (GtkMenuShell *menu_shell);
static void gtk_menu_shell_set_property (GObject *object,
guint prop_id,
const GValue *value,
static gboolean gtk_menu_shell_activate_mnemonic (GtkMenuShell *menu_shell,
GdkEventKey *event);
-static GtkContainerClass *parent_class = NULL;
static guint menu_shell_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gtk_menu_shell_get_type (void)
-{
- static GType menu_shell_type = 0;
-
- if (!menu_shell_type)
- {
- static const GTypeInfo menu_shell_info =
- {
- sizeof (GtkMenuShellClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_menu_shell_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkMenuShell),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_menu_shell_init,
- NULL, /* value_table */
- };
-
- menu_shell_type =
- g_type_register_static (GTK_TYPE_CONTAINER, "GtkMenuShell",
- &menu_shell_info, G_TYPE_FLAG_ABSTRACT);
- }
-
- return menu_shell_type;
-}
+G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER)
static void
gtk_menu_shell_class_init (GtkMenuShellClass *klass)
widget_class = (GtkWidgetClass*) klass;
container_class = (GtkContainerClass*) klass;
- parent_class = g_type_class_peek_parent (klass);
-
object_class->set_property = gtk_menu_shell_set_property;
object_class->get_property = gtk_menu_shell_get_property;
object_class->finalize = gtk_menu_shell_finalize;
klass->insert = gtk_menu_shell_real_insert;
menu_shell_signals[DEACTIVATE] =
- g_signal_new ("deactivate",
+ g_signal_new (I_("deactivate"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GtkMenuShellClass, deactivate),
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
menu_shell_signals[SELECTION_DONE] =
- g_signal_new ("selection-done",
+ g_signal_new (I_("selection-done"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GtkMenuShellClass, selection_done),
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
menu_shell_signals[MOVE_CURRENT] =
- g_signal_new ("move_current",
+ g_signal_new (I_("move_current"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkMenuShellClass, move_current),
G_TYPE_NONE, 1,
GTK_TYPE_MENU_DIRECTION_TYPE);
menu_shell_signals[ACTIVATE_CURRENT] =
- g_signal_new ("activate_current",
+ g_signal_new (I_("activate_current"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkMenuShellClass, activate_current),
G_TYPE_NONE, 1,
G_TYPE_BOOLEAN);
menu_shell_signals[CANCEL] =
- g_signal_new ("cancel",
+ g_signal_new (I_("cancel"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkMenuShellClass, cancel),
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
menu_shell_signals[CYCLE_FOCUS] =
- _gtk_binding_signal_new ("cycle_focus",
+ _gtk_binding_signal_new (I_("cycle_focus"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_CALLBACK (gtk_real_menu_shell_cycle_focus),
if (priv->key_hash)
_gtk_key_hash_free (priv->key_hash);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gtk_menu_shell_parent_class)->finalize (object);
}
gtk_menu_shell_grab_broken (GtkWidget *widget,
GdkEventGrabBroken *event)
{
- GtkMenuShell *menu_shell;
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL (widget);
- g_return_val_if_fail (GTK_IS_MENU_SHELL (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- menu_shell = GTK_MENU_SHELL (widget);
- if (menu_shell->active)
+ if (menu_shell->have_xgrab && event->grab_window == NULL)
{
+ /* Unset the active menu item so gtk_menu_popdown() doesn't see it.
+ */
+
+ gtk_menu_shell_deselect (menu_shell);
+
gtk_menu_shell_deactivate (menu_shell);
g_signal_emit (menu_shell, menu_shell_signals[SELECTION_DONE], 0);
}