From c6aeee2009a2ee4647fd74da0fc3bd87f61a70fd Mon Sep 17 00:00:00 2001 From: Arnaud Ferraris Date: Sat, 6 Jun 2020 02:52:10 +0200 Subject: [PATCH 2/2] seat: inhibit touch events when in power save mode or blank display --- src/desktop.c | 2 ++ src/output.c | 3 +++ src/seat.c | 6 ++++++ src/server.c | 1 + src/server.h | 1 + 5 files changed, 13 insertions(+) diff --git a/src/desktop.c b/src/desktop.c index 8fbb98e..40b2492 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -703,6 +703,7 @@ phoc_desktop_new (struct roots_config *c void phoc_desktop_toggle_output_blank (PhocDesktop *self) { + PhocServer *server = phoc_server_get_default (); PhocOutput *output; wl_list_for_each(output, &self->outputs, link) { @@ -710,6 +711,7 @@ phoc_desktop_toggle_output_blank (PhocDe wlr_output_enable (output->wlr_output, enable); wlr_output_commit (output->wlr_output); + server->active = enable; if (enable) phoc_output_damage_whole(output); } diff --git a/src/output.c b/src/output.c index c03889f..045cbc0 100644 --- a/src/output.c +++ b/src/output.c @@ -928,6 +928,7 @@ handle_output_manager_test (struct wl_li void phoc_output_handle_output_power_manager_set_mode (struct wl_listener *listener, void *data) { + PhocServer *server = phoc_server_get_default (); struct wlr_output_power_v1_set_mode_event *event = data; PhocOutput *self; bool enable = true; @@ -951,6 +952,8 @@ phoc_output_handle_output_power_manager_ if (enable == self->wlr_output->enabled) return; + server->active = enable; + wlr_output_enable (self->wlr_output, enable); if (!wlr_output_commit (self->wlr_output)) { g_warning ("Failed to commit power mode change to %d for %p", enable, self); diff --git a/src/seat.c b/src/seat.c index 679a3f5..2a4c007 100644 --- a/src/seat.c +++ b/src/seat.c @@ -178,6 +178,8 @@ static void handle_touch_down(struct wl_listener *listener, void *data) { struct roots_cursor *cursor = wl_container_of(listener, cursor, touch_down); PhocDesktop *desktop = server->desktop; + if (!server->active) + return; wlr_idle_notify_activity(desktop->idle, cursor->seat->seat); struct wlr_event_touch_down *event = data; roots_cursor_handle_touch_down(cursor, event); @@ -188,6 +190,8 @@ static void handle_touch_up(struct wl_listener *listener, void *data) { struct roots_cursor *cursor = wl_container_of(listener, cursor, touch_up); PhocDesktop *desktop = server->desktop; + if (!server->active) + return; wlr_idle_notify_activity(desktop->idle, cursor->seat->seat); struct wlr_event_touch_up *event = data; roots_cursor_handle_touch_up(cursor, event); @@ -198,6 +202,8 @@ static void handle_touch_motion(struct wl_listener *listener, void *data) { struct roots_cursor *cursor = wl_container_of(listener, cursor, touch_motion); PhocDesktop *desktop = server->desktop; + if (!server->active) + return; wlr_idle_notify_activity(desktop->idle, cursor->seat->seat); struct wlr_event_touch_motion *event = data; roots_cursor_handle_touch_motion(cursor, event); diff --git a/src/server.c b/src/server.c index 838841b..41452cf 100644 --- a/src/server.c +++ b/src/server.c @@ -276,6 +276,7 @@ phoc_server_setup (PhocServer *self, const char *config_path, phoc_startup_session (self); self->inited = TRUE; + self->active = TRUE; return TRUE; } diff --git a/src/server.h b/src/server.h index 9501432..532b064 100644 --- a/src/server.h +++ b/src/server.h @@ -37,6 +37,7 @@ struct _PhocServer { PhocInput *input; PhocServerDebugFlags debug_flags; gboolean inited; + gboolean active; /* The session */ gchar *session; -- 2.26.2