diff --git a/MainForm.pas b/MainForm.pas
index dbe7be8..866779c 100644
--- a/MainForm.pas
+++ b/MainForm.pas
@@ -35,6 +35,7 @@ uses
CATEngine, CATSerial, CATTcp,
SpectrumView, SpectrumViewOpengl,
StatusBar,
+ PlatformUtils,
WinFirewall;
const
@@ -1469,6 +1470,22 @@ begin
FSplitterDrag := False;
FUseOpenGLSpectrum := HasOpenGLSpectrumSwitch;
+ if FUseOpenGLSpectrum and (not QtPlatformAllowsOpenGLControls) then
+ begin
+ MessageDlg('OpenGL rendering disabled',
+ 'OpenGL rendering is not available in the current Qt Wayland mode.' + LineEnding +
+ LineEnding +
+ 'The Lazarus/LCL Qt6 OpenGL control used by EWSDR requires an X11 display handle, ' +
+ 'but the native Wayland backend does not provide one. Using it here can cause an access violation during startup.' +
+ LineEnding +
+ LineEnding +
+ 'To run EWSDR with OpenGL rendering, start it through XWayland:' + LineEnding +
+ 'QT_QPA_PLATFORM=xcb ./ewsdr --opengl' + LineEnding +
+ LineEnding +
+ 'OpenGL rendering will be disabled for this session.',
+ mtWarning, [mbOK], 0);
+ FUseOpenGLSpectrum := False;
+ end;
if FUseOpenGLSpectrum then
FWaterfallFrameInterval := 1;
if FUseOpenGLSpectrum then
diff --git a/PlatformUtils.pas b/PlatformUtils.pas
new file mode 100644
index 0000000..0ab1404
--- /dev/null
+++ b/PlatformUtils.pas
@@ -0,0 +1,42 @@
+unit PlatformUtils;
+
+{
+ PlatformUtils.pas - small helpers for desktop/runtime platform checks.
+}
+
+{$IFDEF FPC}
+ {$MODE Delphi}
+{$ENDIF}
+
+interface
+
+function QtPlatformAllowsOpenGLControls: Boolean;
+
+implementation
+
+uses
+ SysUtils;
+
+function QtPlatformAllowsOpenGLControls: Boolean;
+var
+ Qpa, FirstQpa, SessionType: string;
+ Sep: Integer;
+begin
+ Result := True;
+ Qpa := LowerCase(Trim(GetEnvironmentVariable('QT_QPA_PLATFORM')));
+ SessionType := LowerCase(Trim(GetEnvironmentVariable('XDG_SESSION_TYPE')));
+
+ if Qpa <> '' then
+ begin
+ FirstQpa := Qpa;
+ Sep := Pos(';', FirstQpa);
+ if Sep > 0 then
+ FirstQpa := Copy(FirstQpa, 1, Sep - 1);
+ Result := FirstQpa <> 'wayland';
+ Exit;
+ end;
+
+ Result := SessionType <> 'wayland';
+end;
+
+end.
diff --git a/ewsdr.lpi b/ewsdr.lpi
index f094009..55ed8f9 100644
--- a/ewsdr.lpi
+++ b/ewsdr.lpi
@@ -210,6 +210,10 @@
+
+
+
+