diff --git a/dix/events.c b/dix/events.c index b8c67fd..23076b5 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2975,6 +2975,9 @@ ActivateEnterGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win) Bool CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev) { + if (pDev == NULL) + return FALSE; + WindowPtr prevSpriteWin, newSpriteWin; SpritePtr pSprite = pDev->spriteInfo->sprite; diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 990cb82..7e37861 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -160,6 +160,9 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, (*pScreen->SetCursorPosition) (dev, pScreen, sx, sy, TRUE); CheckMotion(NULL, GetMaster(dev, MASTER_POINTER)); + if (dev->button == NULL) + return; + /* Ideally, X clients shouldn't see these button releases. When * the pointer leaves a window with buttons down, it means that * the wayland compositor has grabbed the pointer. The button diff --git a/mi/mipointer.c b/mi/mipointer.c index 6fa416d..2d54f08 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -261,7 +261,8 @@ miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen, SetupScreen(pScreen); miPointerPtr pPointer = MIPOINTER(pDev); - pPointer->generateEvent = generateEvent; + if (pPointer != NULL) + pPointer->generateEvent = generateEvent; if (pScreen->ConstrainCursorHarder) pScreen->ConstrainCursorHarder(pDev, pScreen, Absolute, &x, &y);