UPD: Prepare GTK3 support

(cherry picked from commit a509abc40d)
This commit is contained in:
Alexander Koblov 2023-12-02 18:08:58 +03:00
commit 10c57d25a8
3 changed files with 22 additions and 16 deletions

View file

@ -1,8 +1,9 @@
{ $threading on}
program doublecmd;
{%File 'doc/changelog.txt'}
{.$APPTYPE GUI}
{$IF DEFINED(LCLGTK3)}
{$FATAL LCLGTK3 is not production ready}
{$ENDIF}
uses
{$IFDEF MSWINDOWS}
uElevation,

View file

@ -90,7 +90,7 @@ type
{ TFileView }
TFileView = class(TWinControl)
TFileView = class(TCustomControl)
private
{en
History of viewed paths and file sources.

View file

@ -157,6 +157,9 @@ uses
, Gdk2, GLib2, Gtk2Extra
, Gtk2Proc
{$ENDIF}
{$IF DEFINED(LCLGTK3)}
, LazGdk3, LazGLib2, LazGObject2
{$ENDIF}
{$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))}
{$IF DEFINED(LCLQT)}
, qt4, qtwidgets, qtint
@ -190,18 +193,20 @@ const
var
{$IF DEFINED(LCLGTK)}
XDisplay: PDisplay = nil;
{$ELSEIF DEFINED(LCLGTK2)}
{$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
XDisplay: PGdkDisplay = nil;
{$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))}
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
{$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)}
// This is set to a virtual key number that AltGr is mapped on.
VK_ALTGR: Byte = VK_UNDEFINED;
{$IF DEFINED(LCLGTK2)}
{$ENDIF}
{$IF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
KeysChangesSignalHandlerId : gulong = 0;
{$ENDIF}
{$ENDIF}
@ -1111,7 +1116,7 @@ begin
end;
end;
end;
{$ELSEIF DEFINED(LCLGTK2)}
{$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
procedure KeysChangedSignalHandler(keymap: PGdkKeymap; Data: gpointer); cdecl;
begin
OnKeyboardLayoutChanged;
@ -1126,13 +1131,13 @@ begin
if Assigned(KeyboardLayoutChangedHook) then
FreeAndNil(KeyboardLayoutChangedHook);
{$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))}
{$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))}
{$IF DEFINED(LCLGTK)}
gdk_window_remove_filter(nil, @EventHandler, nil);
{$ELSEIF DEFINED(LCLGTK2)}
{$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
if (KeysChangesSignalHandlerId <> 0)
and g_signal_handler_is_connected(gdk_keymap_get_for_display(XDisplay),
@ -1160,7 +1165,7 @@ begin
KeyboardLayoutChangedHook := KeyboardLayoutChangedHook.Create(
TQtWidget(Application.MainForm.Handle).TheObject);
{$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))}
{$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))}
// On GTK1 XLib's MappingNotify event is used to detect keyboard mapping changes.
// On GTK2 however (at least on my system), an event of type 112 instead of 34
@ -1171,13 +1176,13 @@ begin
gdk_window_add_filter(nil, @EventHandler, nil); // Filter events for all windows.
{$ELSEIF DEFINED(LCLGTK2)}
{$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
// Connect to GdkKeymap object for the given display.
KeysChangesSignalHandlerId :=
g_signal_connect(gdk_keymap_get_for_display(XDisplay),
'keys-changed',
TGCallback(@KeysChangedSignalHandler), nil);
g_signal_connect_data(gdk_keymap_get_for_display(XDisplay), 'keys-changed',
TGCallback(@KeysChangedSignalHandler), nil, nil,
{$IFDEF LCLGTK2}0{$ELSE}[]{$ENDIF});
{$ENDIF}
@ -1244,7 +1249,7 @@ initialization
// Get connection to X server.
{$IF DEFINED(LCLGTK)}
XDisplay := gdk_display;
{$ELSEIF DEFINED(LCLGTK2)}
{$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)}
XDisplay := gdk_display_get_default;
{$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))}
if not IsWayland then XDisplay := XOpenDisplay(nil);