diff options
author | Matthias Clasen <mclasen@redhat.com> | 2005-06-25 07:10:40 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2005-06-25 07:10:40 +0000 |
commit | 9b356ea0d8ee1992ad9b3559aadad0c4e2b56f2c (patch) | |
tree | 2b22564953b69dff46505860a4918ac10c467e3b /gtk/gtkmenushell.c | |
parent | effe3785cf61084d9f7e9427cea0999bb4a32473 (diff) | |
download | gtk+-9b356ea0d8ee1992ad9b3559aadad0c4e2b56f2c.tar.gz |
Add a GrabBroken event to GDK, and a grab-broken-event signal to
2005-06-25 Matthias Clasen <mclasen@redhat.com>
Add a GrabBroken event to GDK, and a grab-broken-event
signal to GtkWidget. (#107320, Simon Cooke, initial patch
by John Ehresman)
* gdk/gdkevents.h: Add a GDK_GRAB_BROKEN event type,
define a GdkEventGrabBroken event struct.
* gdk/win32/gdkevents-win32.c (gdk_event_translate):
Generate GrabBroken events in response to WM_KILLFOCUS.
* gdk/x11/gdkmain-x11.c: Generate GrabBroken events
when a grab is broken by the window becoming unviewable,
or by another grab from the same client.
* gtk/gtkwidget.h (GtkWidgetClass): Add grab_broken_event.
* gtk/gtkwidget.c (gtk_widget_event_internal): Translate
GrabBroken events into grab_broken_event signals.
* gtk/gtkmain.c (gtk_main_do_event): Propagate GrabBroken
events.
* gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Deactivate
the menu when the grab is broken.
* gtk/gtkcolorsel.c (gtk_color_selection_grab_broken): Stop
the color picker if the grab is broken.
* gtk/gtkpaned.c (gtk_paned_grab_broken): Stop the drag if
the grab is broken.
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r-- | gtk/gtkmenushell.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 1febb46530..123f00911b 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -166,6 +166,8 @@ static gint gtk_menu_shell_leave_notify (GtkWidget *widget, GdkEventCrossing *event); static void gtk_menu_shell_screen_changed (GtkWidget *widget, GdkScreen *previous_screen); +static gboolean gtk_menu_shell_grab_broken (GtkWidget *widget, + GdkEventGrabBroken *event); static void gtk_menu_shell_add (GtkContainer *container, GtkWidget *widget); static void gtk_menu_shell_remove (GtkContainer *container, @@ -254,6 +256,7 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass) widget_class->realize = gtk_menu_shell_realize; widget_class->button_press_event = gtk_menu_shell_button_press; widget_class->button_release_event = gtk_menu_shell_button_release; + widget_class->grab_broken_event = gtk_menu_shell_grab_broken; widget_class->key_press_event = gtk_menu_shell_key_press; widget_class->enter_notify_event = gtk_menu_shell_enter_notify; widget_class->leave_notify_event = gtk_menu_shell_leave_notify; @@ -604,6 +607,27 @@ gtk_menu_shell_button_press (GtkWidget *widget, return TRUE; } +static gboolean +gtk_menu_shell_grab_broken (GtkWidget *widget, + GdkEventGrabBroken *event) +{ + GtkMenuShell *menu_shell; + GtkWidget *menu_item; + gint deactivate; + + 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) + { + gtk_menu_shell_deactivate (menu_shell); + g_signal_emit (menu_shell, menu_shell_signals[SELECTION_DONE], 0); + } + + return TRUE; +} + static gint gtk_menu_shell_button_release (GtkWidget *widget, GdkEventButton *event) |