mirror of
https://github.com/gnustep/libs-back.git
synced 2025-06-02 18:21:01 +00:00
New methods to store and get last event time.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@25457 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
a9e6f5bd73
commit
355aa2db1e
5 changed files with 80 additions and 21 deletions
|
@ -395,7 +395,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
}
|
||||
}
|
||||
generic.lastClick = xEvent.xbutton.time;
|
||||
generic.lastTime = generic.lastClick;
|
||||
[self setLastTime: generic.lastClick];
|
||||
deltaY = 0.0;
|
||||
|
||||
if (xEvent.xbutton.button == generic.lMouse)
|
||||
|
@ -445,14 +445,14 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
& (NSMiniWindowMask | NSIconWindowMask)) != 0
|
||||
&& eventType == NSLeftMouseDown && clickCount == 1)
|
||||
{
|
||||
if (cWin->parent == None)
|
||||
break;
|
||||
xEvent.xbutton.window = cWin->parent;
|
||||
XUngrabPointer(dpy, CurrentTime);
|
||||
XSendEvent(dpy, cWin->parent, True,
|
||||
ButtonPressMask, &xEvent);
|
||||
XFlush(dpy);
|
||||
break;
|
||||
if (cWin->parent == None)
|
||||
break;
|
||||
xEvent.xbutton.window = cWin->parent;
|
||||
XUngrabPointer(dpy, CurrentTime);
|
||||
XSendEvent(dpy, cWin->parent, True,
|
||||
ButtonPressMask, &xEvent);
|
||||
XFlush(dpy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -475,7 +475,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
case ButtonRelease:
|
||||
NSDebugLLog(@"NSEvent", @"%d ButtonRelease\n",
|
||||
xEvent.xbutton.window);
|
||||
generic.lastTime = xEvent.xbutton.time;
|
||||
[self setLastTime: xEvent.xbutton.time];
|
||||
if (xEvent.xbutton.button == generic.lMouse)
|
||||
eventType = NSLeftMouseUp;
|
||||
else if (xEvent.xbutton.button == generic.rMouse
|
||||
|
@ -543,7 +543,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
break;
|
||||
if (xEvent.xclient.message_type == generic.protocols_atom)
|
||||
{
|
||||
generic.lastTime = (Time)xEvent.xclient.data.l[1];
|
||||
[self setLastTime: (Time)xEvent.xclient.data.l[1]];
|
||||
NSDebugLLog(@"NSEvent", @"WM Protocol - %s\n",
|
||||
XGetAtomName(dpy, xEvent.xclient.data.l[0]));
|
||||
|
||||
|
@ -1086,7 +1086,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
case KeyPress:
|
||||
NSDebugLLog(@"NSEvent", @"%d KeyPress\n",
|
||||
xEvent.xkey.window);
|
||||
generic.lastTime = xEvent.xkey.time;
|
||||
[self setLastTime: xEvent.xkey.time];
|
||||
e = process_key_event (&xEvent, self, NSKeyDown, event_queue);
|
||||
break;
|
||||
|
||||
|
@ -1094,7 +1094,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
case KeyRelease:
|
||||
NSDebugLLog(@"NSEvent", @"%d KeyRelease\n",
|
||||
xEvent.xkey.window);
|
||||
generic.lastTime = xEvent.xkey.time;
|
||||
[self setLastTime: xEvent.xkey.time];
|
||||
e = process_key_event (&xEvent, self, NSKeyUp, event_queue);
|
||||
break;
|
||||
|
||||
|
@ -1259,7 +1259,7 @@ static int check_modifier (XEvent *xEvent, KeySym key_sym,
|
|||
}
|
||||
|
||||
generic.lastMotion = xEvent.xmotion.time;
|
||||
generic.lastTime = generic.lastMotion;
|
||||
[self setLastTime: generic.lastMotion];
|
||||
state = xEvent.xmotion.state;
|
||||
if (state & generic.lMouseMask)
|
||||
{
|
||||
|
@ -2325,4 +2325,45 @@ process_modifier_flags(unsigned int state)
|
|||
|
||||
@end
|
||||
|
||||
@implementation XGServer (TimeKeeping)
|
||||
// Sync time with X server every 10 seconds
|
||||
#define MAX_TIME_DIFF 10
|
||||
// Regard an X time stamp as valid for half a second
|
||||
#define OUT_DATE_TIME_DIFF 0.5
|
||||
|
||||
- (void) setLastTime: (Time)last
|
||||
{
|
||||
if (generic.lastTimeStamp == 0
|
||||
|| generic.baseXServerTime + MAX_TIME_DIFF * 1000 < last)
|
||||
{
|
||||
// We have not sync'ed with the clock for at least
|
||||
// MAX_TIME_DIFF seconds ... so we do it now.
|
||||
generic.lastTimeStamp = [NSDate timeIntervalSinceReferenceDate];
|
||||
generic.baseXServerTime = last;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Optimisation to compute the new time stamp instead.
|
||||
generic.lastTimeStamp += (last - generic.lastTime) / 1000.0;
|
||||
}
|
||||
|
||||
generic.lastTime = last;
|
||||
}
|
||||
|
||||
- (Time) lastTime
|
||||
{
|
||||
// In the case of activation via DO the lastTime is outdated and cannot be used.
|
||||
if (generic.lastTimeStamp == 0
|
||||
|| ((generic.lastTimeStamp + OUT_DATE_TIME_DIFF)
|
||||
< [NSDate timeIntervalSinceReferenceDate]))
|
||||
{
|
||||
return CurrentTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
return generic.lastTime;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -3506,7 +3506,7 @@ static BOOL didCreatePixmaps;
|
|||
|
||||
ret = XGrabPointer(dpy, window->ident, False,
|
||||
PointerMotionMask | ButtonReleaseMask | ButtonPressMask,
|
||||
GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
|
||||
GrabModeAsync, GrabModeAsync, None, None, [self lastTime]);
|
||||
|
||||
if (ret != GrabSuccess)
|
||||
NSDebugLLog(@"XGTrace", @"Failed to grab pointer %d\n", win);
|
||||
|
@ -3521,7 +3521,7 @@ static BOOL didCreatePixmaps;
|
|||
- (void) releasemouse
|
||||
{
|
||||
NSDebugLLog(@"XGTrace", @"Released pointer\n");
|
||||
XUngrabPointer(dpy, CurrentTime);
|
||||
XUngrabPointer(dpy, [self lastTime]);
|
||||
grab_window = NULL;
|
||||
}
|
||||
|
||||
|
@ -3549,9 +3549,7 @@ static BOOL didCreatePixmaps;
|
|||
NSDebugLLog(@"Focus", @"Setting focus to %d", window->number);
|
||||
generic.desiredFocusWindow = win;
|
||||
generic.focusRequestNumber = XNextRequest(dpy);
|
||||
// In the case of activation via DO the lastTime is outdated and cannot be used.
|
||||
// XSetInputFocus(dpy, window->ident, RevertToParent, generic.lastTime);
|
||||
XSetInputFocus(dpy, window->ident, RevertToParent, CurrentTime);
|
||||
XSetInputFocus(dpy, window->ident, RevertToParent, [self lastTime]);
|
||||
[inputServer ximFocusICWindow: window];
|
||||
}
|
||||
|
||||
|
@ -4338,7 +4336,7 @@ _computeDepth(int class, int bpp)
|
|||
type: current_desktop
|
||||
window: root
|
||||
data0: workspace
|
||||
data1: generic.lastTime
|
||||
data1: [self lastTime]
|
||||
data2: 0
|
||||
data3: 0];
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue