From 2a1f15b8f59a7e82879da7a190d91d97c80350a6 Mon Sep 17 00:00:00 2001 From: zeljko Date: Mon, 24 Mar 2014 15:35:22 +0000 Subject: [PATCH] Gtk2: do not report syskey for AltGr+Shift+Key for TCustomControl.Fixes issues #22703,#25874 git-svn-id: trunk@44507 - --- lcl/interfaces/gtk2/gtk2proc.inc | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lcl/interfaces/gtk2/gtk2proc.inc b/lcl/interfaces/gtk2/gtk2proc.inc index e386ace15f..2591f144cb 100644 --- a/lcl/interfaces/gtk2/gtk2proc.inc +++ b/lcl/interfaces/gtk2/gtk2proc.inc @@ -2298,26 +2298,30 @@ begin // ssAlt + a key pressed is always a syskey // ssAltGr + a key is only a syskey when the key pressed has no levelshift or when ssHift is pressed to0 SysKey := (ssAlt in ShiftState); - if not SysKey - then begin + if not SysKey then + begin // Check ssAltGr - if (KCInfo.Flags and KCINFO_FLAG_ALTGR) = 0 - then begin + if (KCInfo.Flags and KCINFO_FLAG_ALTGR) = 0 then // VKey has no levelshift char so AltGr is syskey - SysKey := ssAltGr in ShiftState; - end - else begin - // VKey has levelshift char so AltGr + Shift is syskey - SysKey := ShiftState * [ssShift, ssAltGr] = [ssShift, ssAltGr] + SysKey := ssAltGr in ShiftState + else + begin + // VKey has levelshift char so AltGr + Shift is syskey. + SysKey := (ShiftState * [ssShift, ssAltGr] = [ssShift, ssAltGr]); + + // This is not true for TCustomControl, issues 22703,25874. + if Assigned(LCLObject) and (LCLObject is TCustomControl) then + SysKey := False; end; end; - if SysKey - then Flags := Flags or KF_ALTDOWN; + + if SysKey then + Flags := Flags or KF_ALTDOWN; CommonKeyData := KeyCode shl 16; // Not really scancode, but will do - if AHandleDown - then begin + if AHandleDown then + begin {$IFDEF VerboseKeyboard} DebugLn('[HandleGTKKeyUpDown] GDK_KEY_PRESS VKey=',dbgs(VKey),' SysKey=',dbgs(SysKey)); {$ENDIF}