Gtk3: Make TGtk3WidgetSet.GetKeyState() work for mouse buttons.Example at issue #41340

This commit is contained in:
zeljan1 2025-02-12 09:22:14 +01:00
parent 397792d05d
commit 5731b3c4cf

View File

@ -2294,54 +2294,38 @@ const
var var
AKeyMap: PGdkKeymap; AKeyMap: PGdkKeymap;
AModifiers: TGdkModifierType; AModifiers: TGdkModifierType;
display: PGdkDisplay;
seat: PGdkSeat;
device: PGdkDevice;
x: gdouble;
begin begin
Result := 0; Result := 0;
display := gdk_display_get_default();
if display = nil then
exit;
seat := gdk_display_get_default_seat(display);
if seat = nil then
exit;
case nVirtKey of case nVirtKey of
VK_LSHIFT: nVirtKey := VK_SHIFT; VK_LSHIFT: nVirtKey := VK_SHIFT;
VK_LCONTROL: nVirtKey := VK_CONTROL; VK_LCONTROL: nVirtKey := VK_CONTROL;
VK_LMENU: nVirtKey := VK_MENU; VK_LMENU: nVirtKey := VK_MENU;
end; end;
(* if Byte(nVirtKey) in [VK_LBUTTON..VK_XBUTTON2] then
// GdkModifierType begin
GDK_SHIFT_MASK: TGdkModifierType = 1; device := gdk_seat_get_pointer(seat);
GDK_LOCK_MASK: TGdkModifierType = 2; if device = nil then
GDK_CONTROL_MASK: TGdkModifierType = 4; exit;
GDK_MOD1_MASK: TGdkModifierType = 8; device^.get_state(gdk_screen_get_active_window(gdk_screen_get_default), @x, @AModifiers);
GDK_MOD2_MASK: TGdkModifierType = 16; end else
GDK_MOD3_MASK: TGdkModifierType = 32; begin
GDK_MOD4_MASK: TGdkModifierType = 64; AKeyMap := gdk_keymap_get_for_display(display);
GDK_MOD5_MASK: TGdkModifierType = 128; AModifiers := TGdkModifierType(AKeyMap^.get_modifier_state);
GDK_BUTTON1_MASK: TGdkModifierType = 256; end;
GDK_BUTTON2_MASK: TGdkModifierType = 512;
GDK_BUTTON3_MASK: TGdkModifierType = 1024;
GDK_BUTTON4_MASK: TGdkModifierType = 2048;
GDK_BUTTON5_MASK: TGdkModifierType = 4096;
GDK_MODIFIER_RESERVED_13_MASK: TGdkModifierType = 8192;
GDK_MODIFIER_RESERVED_14_MASK: TGdkModifierType = 16384;
GDK_MODIFIER_RESERVED_15_MASK: TGdkModifierType = 32768;
GDK_MODIFIER_RESERVED_16_MASK: TGdkModifierType = 65536;
GDK_MODIFIER_RESERVED_17_MASK: TGdkModifierType = 131072;
GDK_MODIFIER_RESERVED_18_MASK: TGdkModifierType = 262144;
GDK_MODIFIER_RESERVED_19_MASK: TGdkModifierType = 524288;
GDK_MODIFIER_RESERVED_20_MASK: TGdkModifierType = 1048576;
GDK_MODIFIER_RESERVED_21_MASK: TGdkModifierType = 2097152;
GDK_MODIFIER_RESERVED_22_MASK: TGdkModifierType = 4194304;
GDK_MODIFIER_RESERVED_23_MASK: TGdkModifierType = 8388608;
GDK_MODIFIER_RESERVED_24_MASK: TGdkModifierType = 16777216;
GDK_MODIFIER_RESERVED_25_MASK: TGdkModifierType = 33554432;
GDK_SUPER_MASK: TGdkModifierType = 67108864;
GDK_HYPER_MASK: TGdkModifierType = 134217728;
GDK_META_MASK: TGdkModifierType = 268435456;
GDK_MODIFIER_RESERVED_29_MASK: TGdkModifierType = 536870912;
GDK_RELEASE_MASK: TGdkModifierType = 1073741824;
GDK_MODIFIER_MASK: TGdkModifierType = 1543512063;
*)
// AModifierMask := gdk_keymap_get_modifier_mask(AKeyMap, 0);
AKeyMap := TGdkKeymap.get_for_display(gdk_display_get_default);
AModifiers := TGdkModifierType(AKeyMap^.get_modifier_state);
case nVirtKey of case nVirtKey of
VK_LBUTTON: VK_LBUTTON:
if GDK_BUTTON1_MASK in AModifiers then if GDK_BUTTON1_MASK in AModifiers then
@ -2370,10 +2354,6 @@ begin
VK_LWIN, VK_RWIN: VK_LWIN, VK_RWIN:
if GDK_META_MASK in AModifiers then if GDK_META_MASK in AModifiers then
Result := Result or StateDown; Result := Result or StateDown;
{$ifdef VerboseGtk3WinAPI}
else
DebugLn('TGtk3WidgetSet.GetKeyState TODO ', DbgSVKCode(Word(nVirtkey)));
{$endif}
end; end;
end; end;