[gtk+] Fix window button updates in split headers
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Fix window button updates in split headers
- Date: Tue, 14 Apr 2015 21:24:40 +0000 (UTC)
commit c8d6231c3c55dc9f357a2436cbc89bef23163d57
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 f2f2878..bf95295 100644
--- a/gtk/gtkheaderbar.c
+++ b/gtk/gtkheaderbar.c
@@ -1812,6 +1812,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)
{
@@ -1831,6 +1861,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]