Skip to content

Wayland / Gtk3 support? #927

@voxik

Description

@voxik

Description

With Gnome 44, the Double Commander running via XWayland, the windows are not correctly placed / remembered and what not. I assume this is mutter issue. But one solution to this would be if DC supported Wayland. So I though I'll give it a shot and try if Gtk3 is the way to go:

$ lcl=gtk3 ./build.sh beta

... snip ...

(3104) Compiling ./frames/ucomponentssignature.pas
(3104) Compiling uglobs.pas
(3104) Compiling ucolumns.pas
(3104) Compiling uglobs.pas
(3104) Compiling uhotkeymanager.pas
(3104) Compiling ./platform/ukeyboard.pas
/builddir/build/BUILD/doublecmd-1.0.11/src/./platform/ukeyboard.pas(228,1) Fatal: (2003) Syntax error, "identifier" expected but "VAR" found
Fatal: (1018) Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
Error: (lazarus) Compile Project, Mode: Release, Target: /builddir/build/BUILD/doublecmd-1.0.11/doublecmd: stopped with exit code 1
Error: (lazbuild) failed compiling of project /builddir/build/BUILD/doublecmd-1.0.11/src/doublecmd.lpi

So it seems it got quite far with compilation prior it failed.

Not really knowing what I am doing and not spending too much time with investigation, I naively tweaked the file a bit:

$ git diff
diff --git a/src/platform/ukeyboard.pas b/src/platform/ukeyboard.pas
index 8b6a4426f..170834019 100644
--- a/src/platform/ukeyboard.pas
+++ b/src/platform/ukeyboard.pas
@@ -157,6 +157,8 @@ uses
   , Gdk2, GLib2, Gtk2Extra
   , Gtk2Proc
 {$ENDIF}
+  , LazGdk3, LazGLib2
+  , Gtk3Procs
 {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5))}
   {$IF DEFINED(LCLQT)}
   , qt4, qtwidgets
@@ -190,16 +192,18 @@ var
   XDisplay: PDisplay = nil;
   {$ELSEIF DEFINED(LCLGTK2)}
   XDisplay: PGdkDisplay = nil;
+  {$ELSEIF DEFINED(LCLGTK3)}
+  XDisplay: PGdkDisplay = nil;
   {$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5))}
   XDisplay: PDisplay = nil;
   {$ENDIF}
 {$ENDIF}
 
-{$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))}
+{$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))}
 var
   // This is set to a virtual key number that AltGr is mapped on.
   VK_ALTGR: Byte = VK_UNDEFINED;
-  {$IF DEFINED(LCLGTK2)}
+  {$IF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
   KeysChangesSignalHandlerId : gulong = 0;
   {$ENDIF}
 {$ENDIF}

This helped with the compilation and with some error, resulted in kind of "running" Double Commander:

obrazek

Well, it does not really work, but if nothing else, it now runs native Wayland.

So I wonder, is the Gtk3 support something what was considered and would be feasible?

Proposed technical implementation details (optional)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions