[gtk+/gtk-3-14] Fix window button updates in split headers
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-14] Fix window button updates in split headers
- Date: Tue, 14 Apr 2015 21:37:36 +0000 (UTC)
commit cbe4f410c858d6d1dafe2eeab836750641792c0d
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Apr 14 17:05:34 2015 -0400
Fix window button updates in split headers
We were only updating window buttons when the headerbar was
a direct child of the window. That is not the case in more
complicated situations, such as the split headers in gedit
or polari. To fix such cases, make the headerbar itself listen
for state changes on its toplevel.
https://bugzilla.gnome.org/show_bug.cgi?id=747805
gtk/gtkheaderbar.c | 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c
index 2dd8dee..7c72832 100644
--- a/gtk/gtkheaderbar.c
+++ b/gtk/gtkheaderbar.c
@@ -1761,6 +1761,36 @@ gtk_header_bar_unrealize (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unrealize (widget);
}
+static gboolean
+window_state_changed (GtkWidget *window,
+ GdkEventWindowState *event,
+ gpointer data)
+{
+ GtkHeaderBar *bar = GTK_HEADER_BAR (data);
+
+ if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED |
GDK_WINDOW_STATE_TILED))
+ _gtk_header_bar_update_window_buttons (bar);
+
+ return FALSE;
+}
+
+static void
+gtk_header_bar_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *previous_toplevel)
+{
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+
+ if (previous_toplevel)
+ g_signal_handlers_disconnect_by_func (previous_toplevel,
+ window_state_changed, widget);
+
+ if (toplevel)
+ g_signal_connect_after (toplevel, "window-state-event",
+ G_CALLBACK (window_state_changed), widget);
+}
+
static void
gtk_header_bar_class_init (GtkHeaderBarClass *class)
{
@@ -1780,6 +1810,7 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class)
widget_class->draw = gtk_header_bar_draw;
widget_class->realize = gtk_header_bar_realize;
widget_class->unrealize = gtk_header_bar_unrealize;
+ widget_class->hierarchy_changed = gtk_header_bar_hierarchy_changed;
container_class->add = gtk_header_bar_add;
container_class->remove = gtk_header_bar_remove;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]