desktop-shell: fix the crash while clicking TRANSIENT_INACTIVE window

It is pretty easy to replicate this bug by involving a Qt Window with
Qt::WindowTransparentForInput flag.

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QDialog d1(&w, Qt::WindowTransparentForInput);
    d1.show();

    return a.exec();
}

Click d1 dialog, weston will crash due to NULL==shruf.

Signed-off-by: Barry Song <barry.song@navico.com>
This commit is contained in:
Barry Song 2019-04-15 11:28:07 +12:00
parent 3a28bd66ff
commit 854cac8eb1

View file

@ -2697,11 +2697,16 @@ desktop_surface_move(struct weston_desktop_surface *desktop_surface,
struct weston_touch *touch = weston_seat_get_touch(seat);
struct shell_surface *shsurf =
weston_desktop_surface_get_user_data(desktop_surface);
struct weston_surface *surface =
weston_desktop_surface_get_surface(shsurf->desktop_surface);
struct wl_resource *resource = surface->resource;
struct weston_surface *surface;
struct wl_resource *resource;
struct weston_surface *focus;
if (!shsurf)
return;
surface = weston_desktop_surface_get_surface(shsurf->desktop_surface);
resource = surface->resource;
if (pointer &&
pointer->focus &&
pointer->button_count > 0 &&