shell: run surface bindings only when focus surface is not NULL
This fixes the crash when move, rotate or resize binding is activated while exposay effect is active. Steps to reproduce: - activate exposay - try to rotate the surface with mod + right mouse button - crash Closes: https://bugs.freedesktop.org/show_bug.cgi?id=72885
This commit is contained in:
committed by
Kristian Høgsberg
parent
4b2558708b
commit
b2917a2fed
+18
-3
@@ -3747,10 +3747,15 @@ get_shell_surface_type(struct weston_surface *surface)
|
|||||||
static void
|
static void
|
||||||
move_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
|
move_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
|
||||||
{
|
{
|
||||||
struct weston_surface *focus = seat->pointer->focus->surface;
|
struct weston_surface *focus;
|
||||||
struct weston_surface *surface;
|
struct weston_surface *surface;
|
||||||
struct shell_surface *shsurf;
|
struct shell_surface *shsurf;
|
||||||
|
|
||||||
|
if (seat->pointer->focus == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
focus = seat->pointer->focus->surface;
|
||||||
|
|
||||||
surface = weston_surface_get_main_surface(focus);
|
surface = weston_surface_get_main_surface(focus);
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -3833,12 +3838,17 @@ touch_move_binding(struct weston_seat *seat, uint32_t time, void *data)
|
|||||||
static void
|
static void
|
||||||
resize_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
|
resize_binding(struct weston_seat *seat, uint32_t time, uint32_t button, void *data)
|
||||||
{
|
{
|
||||||
struct weston_surface *focus = seat->pointer->focus->surface;
|
struct weston_surface *focus;
|
||||||
struct weston_surface *surface;
|
struct weston_surface *surface;
|
||||||
uint32_t edges = 0;
|
uint32_t edges = 0;
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
struct shell_surface *shsurf;
|
struct shell_surface *shsurf;
|
||||||
|
|
||||||
|
if (seat->pointer->focus == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
focus = seat->pointer->focus->surface;
|
||||||
|
|
||||||
surface = weston_surface_get_main_surface(focus);
|
surface = weston_surface_get_main_surface(focus);
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -4107,10 +4117,15 @@ static void
|
|||||||
rotate_binding(struct weston_seat *seat, uint32_t time, uint32_t button,
|
rotate_binding(struct weston_seat *seat, uint32_t time, uint32_t button,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct weston_surface *focus = seat->pointer->focus->surface;
|
struct weston_surface *focus;
|
||||||
struct weston_surface *base_surface;
|
struct weston_surface *base_surface;
|
||||||
struct shell_surface *surface;
|
struct shell_surface *surface;
|
||||||
|
|
||||||
|
if (seat->pointer->focus == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
focus = seat->pointer->focus->surface;
|
||||||
|
|
||||||
base_surface = weston_surface_get_main_surface(focus);
|
base_surface = weston_surface_get_main_surface(focus);
|
||||||
if (base_surface == NULL)
|
if (base_surface == NULL)
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user