You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.2 KiB
60 lines
2.2 KiB
From 0388ce8e25535415d9bdd79ce14eb20e73859279 Mon Sep 17 00:00:00 2001
|
|
From: Paul Cornett <paulcor@users.noreply.github.com>
|
|
Date: Sat, 6 Feb 2016 16:07:28 -0800
|
|
Subject: [PATCH] Allow SetClientSize() to set correct size even when size of
|
|
window decorations is not known
|
|
|
|
This should allow correct sizing of first TLW (when using SetClientSize())
|
|
with backends using client-side decorations such as Wayland.
|
|
|
|
(cherry picked from commit bc4df78421a5b1e6fd9b218e89d03e59bd846d0a)
|
|
---
|
|
src/gtk/toplevel.cpp | 27 +++++++++++++++++++++++++++
|
|
1 file changed, 27 insertions(+)
|
|
|
|
diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp
|
|
index c3d42e8..a52dad0 100644
|
|
--- a/src/gtk/toplevel.cpp
|
|
+++ b/src/gtk/toplevel.cpp
|
|
@@ -1194,6 +1194,14 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
|
|
}
|
|
}
|
|
|
|
+extern "C" {
|
|
+static gboolean reset_size_request(void* data)
|
|
+{
|
|
+ gtk_widget_set_size_request(GTK_WIDGET(data), -1, -1);
|
|
+ return false;
|
|
+}
|
|
+}
|
|
+
|
|
void wxTopLevelWindowGTK::DoSetClientSize(int width, int height)
|
|
{
|
|
base_type::DoSetClientSize(width, height);
|
|
@@ -1202,6 +1210,25 @@ void wxTopLevelWindowGTK::DoSetClientSize(int width, int height)
|
|
// Has to be done after calling base because it calls SetSize,
|
|
// which sets this true
|
|
m_deferShowAllowed = false;
|
|
+
|
|
+ if (m_wxwindow)
|
|
+ {
|
|
+ // If window is not resizable or not yet shown, set size request on
|
|
+ // client widget, to make it more likely window will get correct size
|
|
+ // even if our decorations size cache is incorrect (as it will be before
|
|
+ // showing first TLW).
|
|
+ if (!gtk_window_get_resizable(GTK_WINDOW(m_widget)))
|
|
+ {
|
|
+ gtk_widget_set_size_request(m_widget, -1, -1);
|
|
+ gtk_widget_set_size_request(m_wxwindow, m_clientWidth, m_clientHeight);
|
|
+ }
|
|
+ else if (!IsShown())
|
|
+ {
|
|
+ gtk_widget_set_size_request(m_wxwindow, m_clientWidth, m_clientHeight);
|
|
+ // Cancel size request at next idle to allow resizing
|
|
+ g_idle_add_full(G_PRIORITY_LOW, reset_size_request, m_wxwindow, NULL);
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
void wxTopLevelWindowGTK::DoGetClientSize( int *width, int *height ) const
|