1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
From 9a964b24e1107ca783bf496f15b920d4ad5b7100 Mon Sep 17 00:00:00 2001
From: Paul Cornett <paulcor@users.noreply.github.com>
Date: Wed, 25 Jun 2025 21:07:50 -0700
Subject: [PATCH] Use system default titlebar decorations under Wayland
See #25562
---
src/gtk/toplevel.cpp | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp
index 170da13769ef..f4fed8eaa504 100644
--- a/src/gtk/toplevel.cpp
+++ b/src/gtk/toplevel.cpp
@@ -414,12 +414,22 @@ void wxTopLevelWindowGTK::GTKHandleRealized()
#if GTK_CHECK_VERSION(3,12,0)
if (m_gdkDecor && wx_is_at_least_gtk3(12))
{
- char layout[sizeof("icon,menu:minimize,maximize,close")];
- snprintf(layout, sizeof(layout), "icon%s:%s%s%s",
- m_gdkDecor & GDK_DECOR_MENU ? ",menu" : "",
- m_gdkDecor & GDK_DECOR_MINIMIZE ? "minimize," : "",
- m_gdkDecor & GDK_DECOR_MAXIMIZE ? "maximize," : "",
- m_gdkFunc & GDK_FUNC_CLOSE ? "close" : "");
+ char* s;
+ g_object_get(gtk_widget_get_settings(m_widget),
+ "gtk-decoration-layout", &s, nullptr);
+ wxString layout(s);
+ g_free(s);
+
+ const wxString empty;
+ if ((m_gdkDecor & GDK_DECOR_MENU) == 0)
+ layout.Replace("menu", empty, false);
+ if ((m_gdkDecor & GDK_DECOR_MINIMIZE) == 0)
+ layout.Replace("minimize", empty, false);
+ if ((m_gdkDecor & GDK_DECOR_MAXIMIZE) == 0)
+ layout.Replace("maximize", empty, false);
+ if ((m_gdkFunc & GDK_FUNC_CLOSE) == 0)
+ layout.Replace("close", empty, false);
+
gtk_header_bar_set_decoration_layout(GTK_HEADER_BAR(titlebar), layout);
}
#endif // 3.12
|