[gedit] window: fix gear menu with fullscreen mode
- From: Sebastien Lafargue <slafargue src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] window: fix gear menu with fullscreen mode
- Date: Sun, 29 Jun 2014 20:21:35 +0000 (UTC)
commit ad58b8018230705e39ff8eed4a128c01aea5b6e0
Author: Sebastien Lafargue <slafargue gnome org>
Date: Sun Jun 29 20:20:40 2014 +0200
window: fix gear menu with fullscreen mode
https://bugzilla.gnome.org/show_bug.cgi?id=731086
gedit/gedit-window-private.h | 3 ++
gedit/gedit-window.c | 51 +++++++++++++++++++++++++++++++++++++----
2 files changed, 49 insertions(+), 5 deletions(-)
---
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index cf116ee..adf431b 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -98,6 +98,9 @@ struct _GeditWindowPrivate
guint inhibition_cookie;
gint bottom_panel_item_removed_handler_id;
+ gint fullscreen_eventbox_handler_id;
+
+ gboolean fullscreen_eventbox_leave_state;
GtkWindowGroup *window_group;
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 55e930f..776aca5 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -1786,17 +1786,39 @@ on_fullscreen_controls_enter_notify_event (GtkWidget *widget,
GdkEventCrossing *event,
GeditWindow *window)
{
+ window->priv->fullscreen_eventbox_leave_state = FALSE;
+
gtk_revealer_set_reveal_child (GTK_REVEALER (window->priv->fullscreen_controls), TRUE);
return FALSE;
}
static gboolean
+real_fullscreen_controls_leave_notify_event (gpointer data)
+{
+ GeditWindow *window = (GeditWindow *)data;
+
+ gboolean gear_menu_state = gtk_toggle_button_get_active ((GtkToggleButton
*)window->priv->fullscreen_gear_button);
+
+ window->priv->fullscreen_eventbox_leave_state = TRUE;
+
+ if (gear_menu_state == FALSE)
+ {
+ gtk_revealer_set_reveal_child (GTK_REVEALER (window->priv->fullscreen_controls), FALSE);
+ }
+
+ return FALSE;
+}
+
+/* this timeout is needed because the toggled signal from gear button is received
+ * after the leave event from the event box ( which is automatically triggered when user
+ * bring up the gear menu */
+static gboolean
on_fullscreen_controls_leave_notify_event (GtkWidget *widget,
GdkEventCrossing *event,
GeditWindow *window)
{
- gtk_revealer_set_reveal_child (GTK_REVEALER (window->priv->fullscreen_controls), FALSE);
+ g_timeout_add (5, real_fullscreen_controls_leave_notify_event, window);
return FALSE;
}
@@ -1824,10 +1846,12 @@ fullscreen_controls_setup (GeditWindow *window)
"enter-notify-event",
G_CALLBACK (on_fullscreen_controls_enter_notify_event),
window);
- g_signal_connect (priv->fullscreen_eventbox,
- "leave-notify-event",
- G_CALLBACK (on_fullscreen_controls_leave_notify_event),
- window);
+
+ priv->fullscreen_eventbox_handler_id =
+ g_signal_connect (priv->fullscreen_eventbox,
+ "leave-notify-event",
+ G_CALLBACK (on_fullscreen_controls_leave_notify_event),
+ window);
gtk_widget_set_size_request (GTK_WIDGET (window->priv->fullscreen_eventbox), -1, 1);
@@ -2376,6 +2400,18 @@ on_notebook_removed (GeditMultiNotebook *mnb,
}
static void
+on_fullscreen_gear_button_toggled (GtkToggleButton *fullscreen_gear_button,
+ GeditWindow *window)
+{
+ gboolean gear_menu_state = gtk_toggle_button_get_active (fullscreen_gear_button);
+
+ if (!gear_menu_state && window->priv->fullscreen_eventbox_leave_state == TRUE)
+ {
+ gtk_revealer_set_reveal_child (GTK_REVEALER (window->priv->fullscreen_controls), FALSE);
+ }
+}
+
+static void
side_panel_size_allocate (GtkWidget *widget,
GtkAllocation *allocation,
GeditWindow *window)
@@ -2900,6 +2936,11 @@ gedit_window_init (GeditWindow *window)
gtk_menu_button_set_menu_model (window->priv->gear_button, gear_menu);
gtk_menu_button_set_menu_model (window->priv->fullscreen_gear_button, gear_menu);
+ g_signal_connect ((GtkToggleButton *)window->priv->fullscreen_gear_button,
+ "toggled",
+ G_CALLBACK (on_fullscreen_gear_button_toggled),
+ window);
+
/* Setup status bar */
setup_statusbar (window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]