diff --git a/lcl/interfaces/gtk2/gtk2int.pas b/lcl/interfaces/gtk2/gtk2int.pas index 848562634d..6470d3d6d1 100644 --- a/lcl/interfaces/gtk2/gtk2int.pas +++ b/lcl/interfaces/gtk2/gtk2int.pas @@ -76,6 +76,9 @@ type {$IFNDEF USE_GTK_MAIN_OLD_ITERATION} FMainPoll: PGPollFD; {$ENDIF} + {$IFDEF HASX} + FIsWayland: boolean; + {$ENDIF} FIsLibraryInstance: Boolean; FGtkTerminated: Boolean; FMultiThreadingEnabled: boolean; @@ -315,6 +318,7 @@ type function GetDesktopWidget: PGtkWidget; //function X11Raise(AHandle: HWND): boolean; currently not used function GetWindowManager: String; + function IsWayland: boolean; function IsCurrentDesktop(AWindow: PGdkWindow): Boolean; function X11GetActiveWindow: HWND; function GetAlwaysOnTopX11(AWindow: PGdkWindow): boolean; diff --git a/lcl/interfaces/gtk2/gtk2widgetset.inc b/lcl/interfaces/gtk2/gtk2widgetset.inc index 80b6c5f88c..d4fde8c26b 100644 --- a/lcl/interfaces/gtk2/gtk2widgetset.inc +++ b/lcl/interfaces/gtk2/gtk2widgetset.inc @@ -1531,6 +1531,11 @@ begin FIsLibraryInstance := False; FGtkTerminated := False; + {$IFDEF HASX} + FIsWayland := UTF8LowerCase(GetEnvironmentVariableUTF8('XDG_SESSION_TYPE')) = 'wayland'; + {$ELSE} + FIsWayland := False; + {$ENDIF} {$IFDEF EnabledGtkThreading} {$IFNDEF Win32} @@ -1931,7 +1936,7 @@ var begin Result := False; WM := GetWindowManager; - if (WM = '') or (WM = 'wayland') then + if (WM = '') or (WM = 'wayland') or IsWayland then exit; ADummy := TDummyWidget.Create; ADummy.ShowDummyWidget(ALeft, ATop, AWidth, AHeight); @@ -4630,6 +4635,11 @@ begin end; end; +function TGtk2WidgetSet.IsWayland: boolean; +begin + Result := FIsWayland; +end; + function TGtk2WidgetSet.X11GetActiveWindow: HWND; var Display: PDisplay; diff --git a/lcl/interfaces/gtk2/gtk2wsforms.pp b/lcl/interfaces/gtk2/gtk2wsforms.pp index 54f888409c..8c0c327d4c 100644 --- a/lcl/interfaces/gtk2/gtk2wsforms.pp +++ b/lcl/interfaces/gtk2/gtk2wsforms.pp @@ -425,7 +425,7 @@ begin end; {$IFDEF HASX} - if (AWinControl = Application.MainForm) and + if (AWinControl = Application.MainForm) and not Gtk2WidgetSet.IsWayland and not Application.HasOption('disableaccurateframe') then Gtk2WidgetSet.CreateDummyWidgetFrame(-1, -1, -1, -1); {$ENDIF}