[gtk+] Revert "window: Remove suspicious branch"
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Revert "window: Remove suspicious branch"
- Date: Sat, 26 Mar 2016 21:40:03 +0000 (UTC)
commit e2d89b9931f45df01308be236d7deecf515faf49
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Mar 26 17:32:37 2016 -0400
Revert "window: Remove suspicious branch"
This reverts commit 67ab00e01ec06d7b05a82c3d80b235ac6c4abfd2.
Bisection showed that this commit caused emacs windows to shrink
to a small size when first shown.
gtk/gtkwindow.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 54 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 83ad216..6f89d6a 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -6092,6 +6092,7 @@ gtk_window_show (GtkWidget *widget)
GtkWindow *window = GTK_WINDOW (widget);
GtkWindowPrivate *priv = window->priv;
GtkContainer *container = GTK_CONTAINER (window);
+ gboolean need_resize;
gboolean is_plug;
if (!_gtk_widget_is_toplevel (GTK_WIDGET (widget)))
@@ -6102,10 +6103,62 @@ gtk_window_show (GtkWidget *widget)
_gtk_widget_set_visible_flag (widget, TRUE);
+ need_resize = _gtk_widget_get_alloc_needed (widget) || !_gtk_widget_get_realized (widget);
+
gtk_css_node_validate (gtk_widget_get_css_node (widget));
- gtk_widget_realize (widget);
+ if (need_resize)
+ {
+ GtkWindowGeometryInfo *info = gtk_window_get_geometry_info (window, TRUE);
+ GtkAllocation allocation = { 0, 0 };
+ GdkRectangle configure_request;
+ GdkGeometry new_geometry;
+ guint new_flags;
+ gboolean was_realized;
+
+ /* We are going to go ahead and perform this configure request
+ * and then emulate a configure notify by going ahead and
+ * doing a size allocate. Sort of a synchronous
+ * mini-copy of gtk_window_move_resize() here.
+ */
+ gtk_window_compute_configure_request (window,
+ &configure_request,
+ &new_geometry,
+ &new_flags);
+
+ /* We update this because we are going to go ahead
+ * and gdk_window_resize() below, rather than
+ * queuing it.
+ */
+ info->last.configure_request = configure_request;
+
+ /* and allocate the window - this is normally done
+ * in move_resize in response to configure notify
+ */
+ allocation.width = configure_request.width;
+ allocation.height = configure_request.height;
+ gtk_widget_size_allocate (widget, &allocation);
+ /* Then we guarantee we have a realize */
+ was_realized = FALSE;
+ if (!_gtk_widget_get_realized (widget))
+ {
+ gtk_widget_realize (widget);
+ was_realized = TRUE;
+ }
+
+ /* We only send configure request if we didn't just finish
+ * creating the window; if we just created the window
+ * then we created it with widget->allocation anyhow.
+ */
+ if (!was_realized)
+ gdk_window_move_resize (_gtk_widget_get_window (widget),
+ configure_request.x,
+ configure_request.y,
+ configure_request.width,
+ configure_request.height);
+ }
+
gtk_container_check_resize (container);
gtk_widget_map (widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]