mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-23 11:51:27 +00:00
* Source/x11/XGServerEvent.m (initializeMouse): new method. Calls -mouseOptionsChanged:
and setups observer for defaults changes. (mouseOptionsChanged:): new method. Read mouse properties from user defaults. (processEvent:): respect mouse options on ButtonPress and ButtonRelease events. * Source/x11/XGServer.m (dealloc): remove notification observer.
This commit is contained in:
parent
2f4c96f9d1
commit
7981c3e41c
3 changed files with 123 additions and 20 deletions
|
@ -1,3 +1,12 @@
|
|||
2019-04-11 Sergii Stoian <stoyan255@ukr.net>
|
||||
|
||||
* Source/x11/XGServerEvent.m (initializeMouse): new method. Calls -mouseOptionsChanged:
|
||||
and setups observer for defaults changes.
|
||||
(mouseOptionsChanged:): new method. Read mouse properties from user defaults.
|
||||
(processEvent:): respect mouse options on ButtonPress and ButtonRelease events.
|
||||
|
||||
* Source/x11/XGServer.m (dealloc): remove notification observer.
|
||||
|
||||
2019-04-06 Sergii Stoian <stoyan255@ukr.net>
|
||||
|
||||
* Source/x11/XGServerWindow.m (hideApplication:): new method name for
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include <Foundation/NSString.h>
|
||||
#include <Foundation/NSUserDefaults.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <Foundation/NSDistributedNotificationCenter.h>
|
||||
|
||||
#include <signal.h>
|
||||
/* Terminate cleanly if we get a signal to do so */
|
||||
|
@ -489,6 +490,7 @@ _parse_display_name(NSString *name, int *dn, int *sn)
|
|||
- (void) dealloc
|
||||
{
|
||||
NSDebugLog(@"Destroying X11 Server");
|
||||
[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
|
||||
DESTROY(inputServer);
|
||||
[self _destroyServerWindows];
|
||||
NSFreeMapTable(screenList);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include <Foundation/NSUserDefaults.h>
|
||||
#include <Foundation/NSRunLoop.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <Foundation/NSDistributedNotificationCenter.h>
|
||||
|
||||
#include "x11/XGServerWindow.h"
|
||||
#include "x11/XGInputServer.h"
|
||||
|
@ -89,6 +90,16 @@ static KeySym _help_keysyms[2];
|
|||
static BOOL _is_keyboard_initialized = NO;
|
||||
static BOOL _mod_ignore_shift = NO;
|
||||
|
||||
/*
|
||||
Mouse properties. In comments below specified defaults key and default value.
|
||||
*/
|
||||
static NSInteger clickTime; // "GSDoubleClickTime" - milisecond (250)
|
||||
static NSInteger clickMove; // "GSMouseMoveThreshold" - in pixels (3)
|
||||
static NSInteger mouseScrollMultiplier; // "GSMouseScrollMultiplier" - times (1)
|
||||
static NSEventType menuMouseButton; // "GSMenuButtonEvent" - (NSRightMouseButon)
|
||||
static BOOL menuButtonEnabled; // "GSMenuButtonEnabled" - BOOL
|
||||
static BOOL swapMouseButtons; // YES if "GSMenuButtonEvent" == NSLeftMouseButton
|
||||
|
||||
void __objc_xgcontextevent_linking (void)
|
||||
{
|
||||
}
|
||||
|
@ -328,6 +339,52 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
return o;
|
||||
}
|
||||
|
||||
- (void) initializeMouse
|
||||
{
|
||||
[self mouseOptionsChanged:nil];
|
||||
[[NSDistributedNotificationCenter defaultCenter]
|
||||
addObserver: self
|
||||
selector: @selector(mouseOptionsChanged:)
|
||||
name: NSUserDefaultsDidChangeNotification
|
||||
object: nil];
|
||||
}
|
||||
|
||||
- (void) mouseOptionsChanged: (NSNotification *)aNotif
|
||||
{
|
||||
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
clickTime = [defs integerForKey:@"GSDoubleClickTime"];
|
||||
if (clickTime < 250)
|
||||
clickTime = 250;
|
||||
|
||||
clickMove = [defs integerForKey:@"GSMouseMoveThreshold"];
|
||||
if (clickMove < 3)
|
||||
clickMove = 3;
|
||||
|
||||
mouseScrollMultiplier = [defs integerForKey:@"GSMouseScrollMultiplier"];
|
||||
if (mouseScrollMultiplier == 0)
|
||||
mouseScrollMultiplier = 1;
|
||||
|
||||
if ([defs objectForKey:@"GSMenuButtonEnabled"])
|
||||
menuButtonEnabled = [defs boolForKey:@"GSMenuButtonEnabled"];
|
||||
else
|
||||
menuButtonEnabled = YES;
|
||||
|
||||
if ([defs objectForKey:@"GSMenuButtonEvent"])
|
||||
menuMouseButton = [defs integerForKey:@"GSMenuButtonEvent"];
|
||||
else
|
||||
menuMouseButton = NSRightMouseDown;
|
||||
|
||||
switch (menuMouseButton)
|
||||
{
|
||||
case NSLeftMouseDown:
|
||||
swapMouseButtons = YES;
|
||||
break;
|
||||
default:
|
||||
swapMouseButtons = NO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void) processEvent: (XEvent *) event
|
||||
{
|
||||
|
@ -366,21 +423,21 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
*/
|
||||
{
|
||||
BOOL incrementCount = YES;
|
||||
|
||||
#define CLICK_TIME 300
|
||||
#define CLICK_MOVE 3
|
||||
|
||||
if (clickTime == 0) [self initializeMouse];
|
||||
|
||||
if (xEvent.xbutton.time
|
||||
>= (unsigned long)(generic.lastClick + CLICK_TIME))
|
||||
>= (unsigned long)(generic.lastClick + clickTime))
|
||||
incrementCount = NO;
|
||||
else if (generic.lastClickWindow != xEvent.xbutton.window)
|
||||
incrementCount = NO;
|
||||
else if ((generic.lastClickX - xEvent.xbutton.x) > CLICK_MOVE)
|
||||
else if ((generic.lastClickX - xEvent.xbutton.x) > clickMove)
|
||||
incrementCount = NO;
|
||||
else if ((generic.lastClickX - xEvent.xbutton.x) < -CLICK_MOVE)
|
||||
else if ((generic.lastClickX - xEvent.xbutton.x) < -clickMove)
|
||||
incrementCount = NO;
|
||||
else if ((generic.lastClickY - xEvent.xbutton.y) > CLICK_MOVE)
|
||||
else if ((generic.lastClickY - xEvent.xbutton.y) > clickMove)
|
||||
incrementCount = NO;
|
||||
else if ((generic.lastClickY - xEvent.xbutton.y) < -CLICK_MOVE)
|
||||
else if ((generic.lastClickY - xEvent.xbutton.y) < -clickMove)
|
||||
incrementCount = NO;
|
||||
|
||||
if (incrementCount == YES)
|
||||
|
@ -407,14 +464,30 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
|
||||
if (xEvent.xbutton.button == generic.lMouse)
|
||||
{
|
||||
eventType = NSLeftMouseDown;
|
||||
buttonNumber = generic.lMouse;
|
||||
if (swapMouseButtons)
|
||||
{
|
||||
eventType = NSRightMouseDown;
|
||||
buttonNumber = generic.rMouse;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = NSLeftMouseDown;
|
||||
buttonNumber = generic.lMouse;
|
||||
}
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.rMouse
|
||||
&& generic.rMouse != 0)
|
||||
{
|
||||
eventType = NSRightMouseDown;
|
||||
buttonNumber = generic.rMouse;
|
||||
if (swapMouseButtons)
|
||||
{
|
||||
eventType = NSLeftMouseDown;
|
||||
buttonNumber = generic.lMouse;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = NSRightMouseDown;
|
||||
buttonNumber = generic.rMouse;
|
||||
}
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.mMouse
|
||||
&& generic.mMouse != 0)
|
||||
|
@ -425,28 +498,28 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
else if (xEvent.xbutton.button == generic.upMouse
|
||||
&& generic.upMouse != 0)
|
||||
{
|
||||
deltaY = 1.;
|
||||
deltaY = 1. * mouseScrollMultiplier;
|
||||
eventType = NSScrollWheel;
|
||||
buttonNumber = generic.upMouse;
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.downMouse
|
||||
&& generic.downMouse != 0)
|
||||
{
|
||||
deltaY = -1.;
|
||||
deltaY = -1. * mouseScrollMultiplier;
|
||||
eventType = NSScrollWheel;
|
||||
buttonNumber = generic.downMouse;
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.scrollLeftMouse
|
||||
&& generic.scrollLeftMouse != 0)
|
||||
{
|
||||
deltaX = -1.;
|
||||
deltaX = -1. * mouseScrollMultiplier;
|
||||
eventType = NSScrollWheel;
|
||||
buttonNumber = generic.scrollLeftMouse;
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.scrollRightMouse
|
||||
&& generic.scrollRightMouse != 0)
|
||||
{
|
||||
deltaX = 1.;
|
||||
deltaX = 1. * mouseScrollMultiplier;
|
||||
eventType = NSScrollWheel;
|
||||
buttonNumber = generic.scrollRightMouse;
|
||||
}
|
||||
|
@ -455,6 +528,9 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
break; /* Unknown button */
|
||||
}
|
||||
|
||||
if (menuButtonEnabled == NO && eventType == menuMouseButton)
|
||||
break; // disabled menu button was pressed
|
||||
|
||||
eventFlags = process_modifier_flags(xEvent.xbutton.state);
|
||||
// if pointer is grabbed use grab window
|
||||
xWin = (grabWindow == 0) ? xEvent.xbutton.window : grabWindow;
|
||||
|
@ -511,14 +587,30 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
[self setLastTime: xEvent.xbutton.time];
|
||||
if (xEvent.xbutton.button == generic.lMouse)
|
||||
{
|
||||
eventType = NSLeftMouseUp;
|
||||
buttonNumber = generic.lMouse;
|
||||
if (swapMouseButtons)
|
||||
{
|
||||
eventType = NSRightMouseUp;
|
||||
buttonNumber = generic.rMouse;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = NSLeftMouseUp;
|
||||
buttonNumber = generic.lMouse;
|
||||
}
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.rMouse
|
||||
&& generic.rMouse != 0)
|
||||
{
|
||||
eventType = NSRightMouseUp;
|
||||
buttonNumber = generic.rMouse;
|
||||
if (swapMouseButtons)
|
||||
{
|
||||
eventType = NSLeftMouseUp;
|
||||
buttonNumber = generic.lMouse;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventType = NSRightMouseUp;
|
||||
buttonNumber = generic.rMouse;
|
||||
}
|
||||
}
|
||||
else if (xEvent.xbutton.button == generic.mMouse
|
||||
&& generic.mMouse != 0)
|
||||
|
|
Loading…
Reference in a new issue