mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-23 20:01:22 +00:00
Merge pull request #10 from trunkmaster/master
Support for configurable mouse properties
This commit is contained in:
commit
9f750d2c4f
3 changed files with 146 additions and 28 deletions
21
ChangeLog
21
ChangeLog
|
@ -1,3 +1,24 @@
|
||||||
|
2019-04-12 Sergii Stoian <stoyan255@gmail.com>
|
||||||
|
|
||||||
|
* Source/x11/XGServerEvent.m (mouseOptionsChanged:): change double-click
|
||||||
|
minimum value to 200 and default to 300.
|
||||||
|
|
||||||
|
2019-04-11 Sergii Stoian <stoyan255@gmail.com>
|
||||||
|
|
||||||
|
* Source/x11/XGServerEvent.m (processEvent:): do not send event if
|
||||||
|
disabled menu mouse button was released.
|
||||||
|
|
||||||
|
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 < 200)
|
||||||
|
clickTime = 300;
|
||||||
|
|
||||||
|
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
|
||||||
{
|
{
|
||||||
|
@ -366,21 +423,21 @@ 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)
|
||||||
|
@ -407,46 +464,62 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
|
|
||||||
if (xEvent.xbutton.button == generic.lMouse)
|
if (xEvent.xbutton.button == generic.lMouse)
|
||||||
{
|
{
|
||||||
eventType = NSLeftMouseDown;
|
if (swapMouseButtons)
|
||||||
buttonNumber = generic.lMouse;
|
{
|
||||||
|
eventType = NSRightMouseDown;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventType = NSLeftMouseDown;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.rMouse
|
else if (xEvent.xbutton.button == generic.rMouse
|
||||||
&& generic.rMouse != 0)
|
&& generic.rMouse != 0)
|
||||||
{
|
{
|
||||||
eventType = NSRightMouseDown;
|
if (swapMouseButtons)
|
||||||
buttonNumber = generic.rMouse;
|
{
|
||||||
|
eventType = NSLeftMouseDown;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventType = NSRightMouseDown;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.mMouse
|
else if (xEvent.xbutton.button == generic.mMouse
|
||||||
&& generic.mMouse != 0)
|
&& generic.mMouse != 0)
|
||||||
{
|
{
|
||||||
eventType = NSOtherMouseDown;
|
eventType = NSOtherMouseDown;
|
||||||
buttonNumber = generic.mMouse;
|
buttonNumber = generic.mMouse;
|
||||||
}
|
}
|
||||||
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;
|
||||||
|
@ -511,17 +587,33 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
[self setLastTime: xEvent.xbutton.time];
|
[self setLastTime: xEvent.xbutton.time];
|
||||||
if (xEvent.xbutton.button == generic.lMouse)
|
if (xEvent.xbutton.button == generic.lMouse)
|
||||||
{
|
{
|
||||||
eventType = NSLeftMouseUp;
|
if (swapMouseButtons)
|
||||||
buttonNumber = generic.lMouse;
|
{
|
||||||
|
eventType = NSRightMouseUp;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventType = NSLeftMouseUp;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.rMouse
|
else if (xEvent.xbutton.button == generic.rMouse
|
||||||
&& generic.rMouse != 0)
|
&& generic.rMouse != 0)
|
||||||
{
|
{
|
||||||
eventType = NSRightMouseUp;
|
if (swapMouseButtons)
|
||||||
buttonNumber = generic.rMouse;
|
{
|
||||||
|
eventType = NSLeftMouseUp;
|
||||||
|
buttonNumber = generic.lMouse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventType = NSRightMouseUp;
|
||||||
|
buttonNumber = generic.rMouse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (xEvent.xbutton.button == generic.mMouse
|
else if (xEvent.xbutton.button == generic.mMouse
|
||||||
&& generic.mMouse != 0)
|
&& generic.mMouse != 0)
|
||||||
{
|
{
|
||||||
eventType = NSOtherMouseUp;
|
eventType = NSOtherMouseUp;
|
||||||
buttonNumber = generic.mMouse;
|
buttonNumber = generic.mMouse;
|
||||||
|
@ -531,6 +623,9 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
||||||
// we ignore release of scrollUp or scrollDown
|
// we ignore release of scrollUp or scrollDown
|
||||||
break; /* Unknown button */
|
break; /* Unknown button */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (menuButtonEnabled == NO && eventType == menuMouseButton)
|
||||||
|
break; // disabled menu button was released
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue