mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-22 15:31:14 +00:00
Submit X11 shift key handling patch by Derek Fawcus
<dfawcus@employees.org>. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@31025 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f336cf20af
commit
0b249e778b
2 changed files with 53 additions and 19 deletions
39
ChangeLog
39
ChangeLog
|
@ -1,31 +1,42 @@
|
|||
2010-07-06 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
2010-07-25 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Source/x11/XGServerEvent.m:
|
||||
Treat Shift modifiers in the same manner as other modifiers.
|
||||
This fixes the value of the shift bit (NSShiftKeyMask) in
|
||||
the modifierFlags passed to a -flagsChanged: method call.
|
||||
Without it the shift bit is inverted, as explained in
|
||||
the source comments, as X reports the modifier bits in
|
||||
force before the key was pressed/released.
|
||||
Patch by Derek Fawcus <dfawcus@employees.org>.
|
||||
|
||||
2010-07-25 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/win32/WIN32Server.m:
|
||||
When ordering out a window, use the SWP_NOACTIVATE flag on SetWindowPos
|
||||
so Windows doesn't activate/deactivate any windows when hiding a window.
|
||||
|
||||
|
||||
This fixes the bug where when a tooltip disappeared, it would deactivate
|
||||
the window the tooltip was over.
|
||||
|
||||
2010-07-06 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
2010-07-07 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/win32/WIN32Server.m:
|
||||
* Source/win32/w32_movesize.m:
|
||||
Fix for bug #29709: Windows: Maximize button in a window title bar is
|
||||
always grayed out
|
||||
* Source/win32/WIN32Server.m:
|
||||
* Source/win32/w32_movesize.m:
|
||||
Fix for bug #29709: Windows: Maximize button in a window title bar is
|
||||
always grayed out
|
||||
|
||||
2010-07-06 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/win32/WIN32Server.m: Tweak the conditions for incrementing the
|
||||
clickCount when handling mouse clicks: (i.e. double click detection)
|
||||
- Require a click to be within a distance (retrieved from Windows)
|
||||
- Require a click to be within a distance (retrieved from Windows)
|
||||
of the last click to count (previously there was no proximity check)
|
||||
- Allow clicks separated by the Windows double click time interval
|
||||
to count (e.g. if the Windows double click time interval is n,
|
||||
clicking at times 0, n, 2n, 3n would produce events with click counts
|
||||
1, 2, 3, and 4. This matches OS X behaviour. Previously, all clicks
|
||||
had to be within the windows double click time interval to count as
|
||||
one group.)
|
||||
- Allow clicks separated by the Windows double click time interval
|
||||
to count (e.g. if the Windows double click time interval is n,
|
||||
clicking at times 0, n, 2n, 3n would produce events with click counts
|
||||
1, 2, 3, and 4. This matches OS X behaviour. Previously, all clicks
|
||||
had to be within the windows double click time interval to count as
|
||||
one group.)
|
||||
|
||||
2010-06-23 Quentin Mathe <quentin.mathe@gmail.com>
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
// NumLock's mask (it depends on the keyboard mapping)
|
||||
static unsigned int _num_lock_mask;
|
||||
// Modifier state
|
||||
static char _shift_pressed = 0;
|
||||
static char _control_pressed = 0;
|
||||
static char _command_pressed = 0;
|
||||
static char _alt_pressed = 0;
|
||||
|
@ -1198,6 +1199,17 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
NSDebugLLog(@"NSEvent", @"%d KeymapNotify\n",
|
||||
xEvent.xkeymap.window);
|
||||
|
||||
// Check if shift is pressed
|
||||
_shift_pressed = 0;
|
||||
if (check_modifier (&xEvent, XK_Shift_L))
|
||||
{
|
||||
_shift_pressed |= 1;
|
||||
}
|
||||
if (check_modifier (&xEvent, XK_Shift_R))
|
||||
{
|
||||
_shift_pressed |= 2;
|
||||
}
|
||||
|
||||
// Check if control is pressed
|
||||
_control_pressed = 0;
|
||||
if ((_control_keysyms[0] != NoSymbol)
|
||||
|
@ -1969,8 +1981,6 @@ keysym_is_X_modifier (KeySym keysym)
|
|||
switch (keysym)
|
||||
{
|
||||
case XK_Num_Lock:
|
||||
case XK_Shift_L:
|
||||
case XK_Shift_R:
|
||||
case XK_Caps_Lock:
|
||||
case XK_Shift_Lock:
|
||||
return YES;
|
||||
|
@ -1993,6 +2003,7 @@ process_key_event (XEvent* xEvent, XGServer* context, NSEventType eventType,
|
|||
NSEvent *event = nil;
|
||||
NSEventType originalType;
|
||||
gswindow_device_t *window;
|
||||
int shift_key = 0;
|
||||
int control_key = 0;
|
||||
int command_key = 0;
|
||||
int alt_key = 0;
|
||||
|
@ -2033,7 +2044,15 @@ process_key_event (XEvent* xEvent, XGServer* context, NSEventType eventType,
|
|||
XLookupKeysym((XKeyEvent *)xEvent, 0) : keysym;
|
||||
if (modKeysym != NoSymbol)
|
||||
{
|
||||
if (modKeysym == _control_keysyms[0])
|
||||
if (modKeysym == XK_Shift_L)
|
||||
{
|
||||
shift_key = 1;
|
||||
}
|
||||
else if (modKeysym == XK_Shift_R)
|
||||
{
|
||||
shift_key = 2;
|
||||
}
|
||||
else if (modKeysym == _control_keysyms[0])
|
||||
{
|
||||
control_key = 1;
|
||||
}
|
||||
|
@ -2068,11 +2087,13 @@ process_key_event (XEvent* xEvent, XGServer* context, NSEventType eventType,
|
|||
}
|
||||
|
||||
originalType = eventType;
|
||||
if (control_key || command_key || alt_key || help_key)
|
||||
if (shift_key || control_key || command_key || alt_key || help_key)
|
||||
{
|
||||
eventType = NSFlagsChanged;
|
||||
if (xEvent->xkey.type == KeyPress)
|
||||
{
|
||||
if (shift_key)
|
||||
_shift_pressed |= shift_key;
|
||||
if (control_key)
|
||||
_control_pressed |= control_key;
|
||||
if (command_key)
|
||||
|
@ -2084,6 +2105,8 @@ process_key_event (XEvent* xEvent, XGServer* context, NSEventType eventType,
|
|||
}
|
||||
else if (xEvent->xkey.type == KeyRelease)
|
||||
{
|
||||
if (shift_key)
|
||||
_shift_pressed &= ~shift_key;
|
||||
if (control_key)
|
||||
_control_pressed &= ~control_key;
|
||||
if (command_key)
|
||||
|
@ -2374,7 +2397,7 @@ process_modifier_flags(unsigned int state)
|
|||
{
|
||||
unsigned int eventModifierFlags = 0;
|
||||
|
||||
if (state & ShiftMask)
|
||||
if (_shift_pressed != 0)
|
||||
eventModifierFlags = eventModifierFlags | NSShiftKeyMask;
|
||||
|
||||
if (state & LockMask)
|
||||
|
|
Loading…
Reference in a new issue