dix: when a window disappears, remove it from the touch sprite trace
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
parent
c18a173cf5
commit
8e58ce73c8
|
@ -1866,6 +1866,36 @@ InputClientGone(WindowPtr pWin, XID id)
|
||||||
FatalError("client not on device event list");
|
FatalError("client not on device event list");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for window in each touch trace for each device. Remove the window
|
||||||
|
* and all its subwindows from the trace when found. The initial window
|
||||||
|
* order is preserved.
|
||||||
|
*/
|
||||||
|
void WindowGone(WindowPtr win)
|
||||||
|
{
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
|
||||||
|
for (dev = inputInfo.devices; dev; dev = dev->next) {
|
||||||
|
TouchClassPtr t = dev->touch;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!t)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (i = 0; i < t->num_touches; i++) {
|
||||||
|
SpritePtr sprite = &t->touches[i].sprite;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0; j < sprite->spriteTraceGood; j++) {
|
||||||
|
if (sprite->spriteTrace[j] == win) {
|
||||||
|
sprite->spriteTraceGood = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
|
SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
|
||||||
xEvent * ev, Mask mask, int count)
|
xEvent * ev, Mask mask, int count)
|
||||||
|
|
|
@ -131,6 +131,7 @@ Equipment Corporation.
|
||||||
|
|
||||||
#include "privates.h"
|
#include "privates.h"
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
|
#include "exevents.h"
|
||||||
|
|
||||||
#include <X11/Xatom.h> /* must come after server includes */
|
#include <X11/Xatom.h> /* must come after server includes */
|
||||||
|
|
||||||
|
@ -2971,8 +2972,10 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure)
|
||||||
if (!fromConfigure && pScreen->PostValidateTree)
|
if (!fromConfigure && pScreen->PostValidateTree)
|
||||||
(*pScreen->PostValidateTree)(pLayerWin->parent, pWin, VTUnmap);
|
(*pScreen->PostValidateTree)(pLayerWin->parent, pWin, VTUnmap);
|
||||||
}
|
}
|
||||||
if (wasRealized && !fromConfigure)
|
if (wasRealized && !fromConfigure) {
|
||||||
WindowsRestructured ();
|
WindowsRestructured ();
|
||||||
|
WindowGone(pWin);
|
||||||
|
}
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3055,8 +3058,10 @@ UnmapSubwindows(WindowPtr pWin)
|
||||||
if (anyMarked && pScreen->PostValidateTree)
|
if (anyMarked && pScreen->PostValidateTree)
|
||||||
(*pScreen->PostValidateTree)(pLayerWin->parent, pHead, VTUnmap);
|
(*pScreen->PostValidateTree)(pLayerWin->parent, pHead, VTUnmap);
|
||||||
}
|
}
|
||||||
if (wasRealized)
|
if (wasRealized) {
|
||||||
WindowsRestructured ();
|
WindowsRestructured ();
|
||||||
|
WindowGone(pWin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -245,6 +245,10 @@ InputClientGone(
|
||||||
WindowPtr /* pWin */,
|
WindowPtr /* pWin */,
|
||||||
XID /* id */);
|
XID /* id */);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
WindowGone(
|
||||||
|
WindowPtr /* win */);
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
SendEvent (
|
SendEvent (
|
||||||
ClientPtr /* client */,
|
ClientPtr /* client */,
|
||||||
|
|
Loading…
Reference in New Issue