From 028c5dcf98b2e33a259f4c8a242bc9294cfff1de Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 15 Jul 2018 00:35:54 -0400 Subject: Stop using configure events Listen to changes of ::width and ::height properties instead. --- gtk/gtkmain.c | 9 +-------- gtk/gtkwindow.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 56ab6167d1..7f4ff811f7 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1847,15 +1847,8 @@ gtk_main_do_event (GdkEvent *event) break; case GDK_CONFIGURE: - if (GTK_IS_WINDOW (event_widget) && - _gtk_widget_get_surface (event_widget) == event->any.surface) - { - gtk_window_configure (GTK_WINDOW (event_widget), - event->configure.width, - event->configure.height); - } - break; + case GDK_FOCUS_CHANGE: case GDK_UNMAP: case GDK_GRAB_BROKEN: diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 9f495c12ab..7c0569dec9 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -432,6 +432,7 @@ static gboolean gtk_window_close_request (GtkWindow *window); static void gtk_window_focus_in (GtkWidget *widget); static void gtk_window_focus_out (GtkWidget *widget); static void surface_state_changed (GtkWidget *widget); +static void surface_size_changed (GtkWidget *widget); static void gtk_window_remove (GtkContainer *container, GtkWidget *widget); static void gtk_window_check_resize (GtkContainer *container); @@ -6869,6 +6870,8 @@ gtk_window_realize (GtkWidget *widget) gtk_widget_set_surface (widget, surface); g_signal_connect_swapped (surface, "notify::state", G_CALLBACK (surface_state_changed), widget); + g_signal_connect_swapped (surface, "notify::width", G_CALLBACK (surface_size_changed), widget); + g_signal_connect_swapped (surface, "notify::height", G_CALLBACK (surface_size_changed), widget); gtk_widget_register_surface (widget, surface); GTK_WIDGET_CLASS (gtk_window_parent_class)->realize (widget); @@ -7007,6 +7010,9 @@ gtk_window_unrealize (GtkWidget *widget) g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget), G_CALLBACK (surface_state_changed), widget); + g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget), + G_CALLBACK (surface_size_changed), + widget); GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget); @@ -7320,6 +7326,16 @@ surface_state_changed (GtkWidget *widget) } } +static void +surface_size_changed (GtkWidget *widget) +{ + GdkSurface *surface = _gtk_widget_get_surface (widget); + + gtk_window_configure (GTK_WINDOW (widget), + gdk_surface_get_width (surface), + gdk_surface_get_height (surface)); +} + /* the accel_key and accel_mods fields of the key have to be setup * upon calling this function. it’ll then return whether that key * is at all used as accelerator, and if so will OR in the -- cgit v1.2.1