mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-24 04:11:28 +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>
|
2019-04-06 Sergii Stoian <stoyan255@ukr.net>
|
||||||
|
|
||||||
* Source/x11/XGServerWindow.m (hideApplication:): new method name for
|
* Source/x11/XGServerWindow.m (hideApplication:): new method name for
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <Foundation/NSString.h>
|
#include <Foundation/NSString.h>
|
||||||
#include <Foundation/NSUserDefaults.h>
|
#include <Foundation/NSUserDefaults.h>
|
||||||
#include <Foundation/NSDebug.h>
|
#include <Foundation/NSDebug.h>
|
||||||
|
#include <Foundation/NSDistributedNotificationCenter.h>
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
/* Terminate cleanly if we get a signal to do so */
|
/* 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
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
NSDebugLog(@"Destroying X11 Server");
|
NSDebugLog(@"Destroying X11 Server");
|
||||||
|
[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
|
||||||
DESTROY(inputServer);
|
DESTROY(inputServer);
|
||||||
[self _destroyServerWindows];
|
[self _destroyServerWindows];
|
||||||
NSFreeMapTable(screenList);
|
NSFreeMapTable(screenList);
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include <Foundation/NSUserDefaults.h>
|
#include <Foundation/NSUserDefaults.h>
|
||||||
#include <Foundation/NSRunLoop.h>
|
#include <Foundation/NSRunLoop.h>
|
||||||
#include <Foundation/NSDebug.h>
|
#include <Foundation/NSDebug.h>
|
||||||
|
#include <Foundation/NSDistributedNotificationCenter.h>
|
||||||
|
|
||||||
#include "x11/XGServerWindow.h"
|
#include "x11/XGServerWindow.h"
|
||||||
#include "x11/XGInputServer.h"
|
#include "x11/XGInputServer.h"
|
||||||
|
@ -89,6 +90,16 @@ static KeySym _help_keysyms[2];
|
||||||
static BOOL _is_keyboard_initialized = NO;
|
static BOOL _is_keyboard_initialized = NO;
|
||||||
static BOOL _mod_ignore_shift = 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)
|
void __objc_xgcontextevent_linking (void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -328,6 +339,52 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
return o;
|
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
|
- (void) processEvent: (XEvent *) event
|
||||||
{
|
{
|
||||||
|
@ -367,20 +424,20 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
{
|
{
|
||||||
BOOL incrementCount = YES;
|
BOOL incrementCount = YES;
|
||||||
|
|
||||||
#define CLICK_TIME 300
|
if (clickTime == 0) [self initializeMouse];
|
||||||
#define CLICK_MOVE 3
|
|
||||||
if (xEvent.xbutton.time
|
if (xEvent.xbutton.time
|
||||||
>= (unsigned long)(generic.lastClick + CLICK_TIME))
|
>= (unsigned long)(generic.lastClick + clickTime))
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
else if (generic.lastClickWindow != xEvent.xbutton.window)
|
else if (generic.lastClickWindow != xEvent.xbutton.window)
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
else if ((generic.lastClickX - xEvent.xbutton.x) > CLICK_MOVE)
|
else if ((generic.lastClickX - xEvent.xbutton.x) > clickMove)
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
else if ((generic.lastClickX - xEvent.xbutton.x) < -CLICK_MOVE)
|
else if ((generic.lastClickX - xEvent.xbutton.x) < -clickMove)
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
else if ((generic.lastClickY - xEvent.xbutton.y) > CLICK_MOVE)
|
else if ((generic.lastClickY - xEvent.xbutton.y) > clickMove)
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
else if ((generic.lastClickY - xEvent.xbutton.y) < -CLICK_MOVE)
|
else if ((generic.lastClickY - xEvent.xbutton.y) < -clickMove)
|
||||||
incrementCount = NO;
|
incrementCount = NO;
|
||||||
|
|
||||||
if (incrementCount == YES)
|
if (incrementCount == YES)
|
||||||
|
@ -406,16 +463,32 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
deltaY = 0.0;
|
deltaY = 0.0;
|
||||||
|
|
||||||
if (xEvent.xbutton.button == generic.lMouse)
|
if (xEvent.xbutton.button == generic.lMouse)
|
||||||
|
{
|
||||||
|
if (swapMouseButtons)
|
||||||
|
{
|
||||||
|
eventType = NSRightMouseDown;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
eventType = NSLeftMouseDown;
|
eventType = NSLeftMouseDown;
|
||||||
buttonNumber = generic.lMouse;
|
buttonNumber = generic.lMouse;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (xEvent.xbutton.button == generic.rMouse
|
else if (xEvent.xbutton.button == generic.rMouse
|
||||||
&& generic.rMouse != 0)
|
&& generic.rMouse != 0)
|
||||||
|
{
|
||||||
|
if (swapMouseButtons)
|
||||||
|
{
|
||||||
|
eventType = NSLeftMouseDown;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
eventType = NSRightMouseDown;
|
eventType = NSRightMouseDown;
|
||||||
buttonNumber = generic.rMouse;
|
buttonNumber = generic.rMouse;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (xEvent.xbutton.button == generic.mMouse
|
else if (xEvent.xbutton.button == generic.mMouse
|
||||||
&& generic.mMouse != 0)
|
&& generic.mMouse != 0)
|
||||||
{
|
{
|
||||||
|
@ -425,28 +498,28 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
else if (xEvent.xbutton.button == generic.upMouse
|
else if (xEvent.xbutton.button == generic.upMouse
|
||||||
&& generic.upMouse != 0)
|
&& generic.upMouse != 0)
|
||||||
{
|
{
|
||||||
deltaY = 1.;
|
deltaY = 1. * mouseScrollMultiplier;
|
||||||
eventType = NSScrollWheel;
|
eventType = NSScrollWheel;
|
||||||
buttonNumber = generic.upMouse;
|
buttonNumber = generic.upMouse;
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.downMouse
|
else if (xEvent.xbutton.button == generic.downMouse
|
||||||
&& generic.downMouse != 0)
|
&& generic.downMouse != 0)
|
||||||
{
|
{
|
||||||
deltaY = -1.;
|
deltaY = -1. * mouseScrollMultiplier;
|
||||||
eventType = NSScrollWheel;
|
eventType = NSScrollWheel;
|
||||||
buttonNumber = generic.downMouse;
|
buttonNumber = generic.downMouse;
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.scrollLeftMouse
|
else if (xEvent.xbutton.button == generic.scrollLeftMouse
|
||||||
&& generic.scrollLeftMouse != 0)
|
&& generic.scrollLeftMouse != 0)
|
||||||
{
|
{
|
||||||
deltaX = -1.;
|
deltaX = -1. * mouseScrollMultiplier;
|
||||||
eventType = NSScrollWheel;
|
eventType = NSScrollWheel;
|
||||||
buttonNumber = generic.scrollLeftMouse;
|
buttonNumber = generic.scrollLeftMouse;
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.scrollRightMouse
|
else if (xEvent.xbutton.button == generic.scrollRightMouse
|
||||||
&& generic.scrollRightMouse != 0)
|
&& generic.scrollRightMouse != 0)
|
||||||
{
|
{
|
||||||
deltaX = 1.;
|
deltaX = 1. * mouseScrollMultiplier;
|
||||||
eventType = NSScrollWheel;
|
eventType = NSScrollWheel;
|
||||||
buttonNumber = generic.scrollRightMouse;
|
buttonNumber = generic.scrollRightMouse;
|
||||||
}
|
}
|
||||||
|
@ -455,6 +528,9 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
break; /* Unknown button */
|
break; /* Unknown button */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (menuButtonEnabled == NO && eventType == menuMouseButton)
|
||||||
|
break; // disabled menu button was pressed
|
||||||
|
|
||||||
eventFlags = process_modifier_flags(xEvent.xbutton.state);
|
eventFlags = process_modifier_flags(xEvent.xbutton.state);
|
||||||
// if pointer is grabbed use grab window
|
// if pointer is grabbed use grab window
|
||||||
xWin = (grabWindow == 0) ? xEvent.xbutton.window : grabWindow;
|
xWin = (grabWindow == 0) ? xEvent.xbutton.window : grabWindow;
|
||||||
|
@ -510,16 +586,32 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
xEvent.xbutton.window);
|
xEvent.xbutton.window);
|
||||||
[self setLastTime: xEvent.xbutton.time];
|
[self setLastTime: xEvent.xbutton.time];
|
||||||
if (xEvent.xbutton.button == generic.lMouse)
|
if (xEvent.xbutton.button == generic.lMouse)
|
||||||
|
{
|
||||||
|
if (swapMouseButtons)
|
||||||
|
{
|
||||||
|
eventType = NSRightMouseUp;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
eventType = NSLeftMouseUp;
|
eventType = NSLeftMouseUp;
|
||||||
buttonNumber = generic.lMouse;
|
buttonNumber = generic.lMouse;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (xEvent.xbutton.button == generic.rMouse
|
else if (xEvent.xbutton.button == generic.rMouse
|
||||||
&& generic.rMouse != 0)
|
&& generic.rMouse != 0)
|
||||||
|
{
|
||||||
|
if (swapMouseButtons)
|
||||||
|
{
|
||||||
|
eventType = NSLeftMouseUp;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
eventType = NSRightMouseUp;
|
eventType = NSRightMouseUp;
|
||||||
buttonNumber = generic.rMouse;
|
buttonNumber = generic.rMouse;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (xEvent.xbutton.button == generic.mMouse
|
else if (xEvent.xbutton.button == generic.mMouse
|
||||||
&& generic.mMouse != 0)
|
&& generic.mMouse != 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue