Fix pointer/screen warp on certain(?) xorg versions.
SVN revision: 39509
This commit is contained in:
parent
f4b5e3e99f
commit
9bd7930d27
11
src/focus.c
11
src/focus.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
|
||||
* Copyright (C) 2004-2008 Kim Woelders
|
||||
* Copyright (C) 2004-2009 Kim Woelders
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
|
@ -517,6 +517,15 @@ FocusNewDesk(void)
|
|||
XUngrabKeyboard(disp, CurrentTime);
|
||||
}
|
||||
|
||||
void
|
||||
FocusCheckScreen(void)
|
||||
{
|
||||
if (EQueryPointer(NULL, NULL, NULL, NULL, NULL))
|
||||
return; /* On screen */
|
||||
|
||||
FocusToEWin(NULL, FOCUS_DESK_LEAVE);
|
||||
}
|
||||
|
||||
static void
|
||||
FocusInit(void)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
|
||||
* Copyright (C) 2004-2009 Kim Woelders
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
|
@ -48,6 +49,7 @@ void FocusHandleChange(EWin * ewin, XEvent * ev);
|
|||
void FocusHandleClick(EWin * ewin, Win win);
|
||||
void FocusNewDeskBegin(void);
|
||||
void FocusNewDesk(void);
|
||||
void FocusCheckScreen(void);
|
||||
|
||||
void ClickGrabsUpdate(void);
|
||||
|
||||
|
|
12
src/ipc.c
12
src/ipc.c
|
@ -29,6 +29,7 @@
|
|||
#include "eobj.h"
|
||||
#include "ewins.h"
|
||||
#include "ewin-ops.h"
|
||||
#include "focus.h"
|
||||
#include "grabs.h"
|
||||
#include "hints.h" /* FIXME - Should not be here */
|
||||
#include "screen.h"
|
||||
|
@ -1259,8 +1260,15 @@ IPC_Warp(const char *params)
|
|||
x = (Dpy.screen + 1) % ScreenCount(disp);
|
||||
sscanf(params, "%*s %i", &x);
|
||||
if (x >= 0 && x < ScreenCount(disp))
|
||||
EXWarpPointer(RootWindow(disp, x), DisplayWidth(disp, x) / 2,
|
||||
DisplayHeight(disp, x) / 2);
|
||||
{
|
||||
EXWarpPointer(RootWindow(disp, x), DisplayWidth(disp, x) / 2,
|
||||
DisplayHeight(disp, x) / 2);
|
||||
/* IIRC warping to a different screen once did cause
|
||||
* LeaveNotify's on the current root window. This does not
|
||||
* happen in xorg 1.5.3 (and probably other versions).
|
||||
* So, check and focus out if left. */
|
||||
FocusCheckScreen();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue