[PATCH 03/10] compositor: Track surface activity
Bryce Harrington
bryce at osg.samsung.com
Sat Mar 5 00:18:40 UTC 2016
Surfaces flagged as 'active' are considered of primary urgency to the
user. It might be the surface with the keyboard focus or displaying
something importance; the exact specification of what 'active' means is
left to be a shell-specific notion.
An 'active' surface may be granted special treatment by the compositor.
For instance if the compositor implements a screensaver inhibition
capability, it may honor this only for active surfaces.
Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
---
src/compositor.c | 41 +++++++++++++++++++++++++++++++++++++++++
src/compositor.h | 20 +++++++++++++++++---
src/input.c | 15 ---------------
3 files changed, 58 insertions(+), 18 deletions(-)
diff --git a/src/compositor.c b/src/compositor.c
index 4b091b0..574a0b8 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -612,6 +612,7 @@ weston_surface_create(struct weston_compositor *compositor)
weston_matrix_init(&surface->buffer_to_surface_matrix);
weston_matrix_init(&surface->surface_to_buffer_matrix);
+ surface->active = false;
surface->inhibit_screensaving = false;
return surface;
@@ -3424,6 +3425,46 @@ weston_surface_copy_content(struct weston_surface *surface,
src_x, src_y, width, height);
}
+/** Set surface as active.
+ *
+ * Marks a surface as considered 'active' by the shell
+ * and gives the surface keyboard focus.
+ */
+WL_EXPORT void
+weston_surface_activate(struct weston_surface *surface,
+ struct weston_seat *seat)
+{
+ struct weston_compositor *compositor = seat->compositor;
+ struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat);
+
+ surface->active = true;
+
+ if (keyboard) {
+ weston_keyboard_set_focus(keyboard, surface);
+ wl_data_device_set_keyboard_focus(seat);
+ }
+
+ wl_signal_emit(&compositor->activate_signal, surface);
+}
+
+/** Set surface as inactive.
+ *
+ * Marks a surface as no longer considered 'active' by the shell.
+ * Note that this does not change keyboard focus.
+ */
+WL_EXPORT void
+weston_surface_deactivate(struct weston_surface *surface,
+ struct weston_seat *seat)
+{
+ surface->active = false;
+}
+
+WL_EXPORT bool
+weston_surface_is_active(struct weston_surface *surface)
+{
+ return surface->active;
+}
+
static void
subsurface_set_position(struct wl_client *client,
struct wl_resource *resource, int32_t x, int32_t y)
diff --git a/src/compositor.h b/src/compositor.h
index d982feb..9a9ab1a 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -1039,11 +1039,19 @@ struct weston_surface {
struct weston_timeline_object timeline;
/*
+ * A shell-specific indicator that the surface is in immediate
+ * use by the user. For example, the surface might have keyboard
+ * focus.
+ */
+ bool active;
+
+ /*
* Indicates the surface prefers no screenblanking, screensaving,
* or other automatic obscurement to kick in while the surface is
* considered "active" by the shell.
*/
bool inhibit_screensaving;
+
};
struct weston_subsurface {
@@ -1129,9 +1137,6 @@ int
weston_spring_done(struct weston_spring *spring);
void
-weston_surface_activate(struct weston_surface *surface,
- struct weston_seat *seat);
-void
notify_motion(struct weston_seat *seat, uint32_t time,
struct weston_pointer_motion_event *event);
void
@@ -1409,6 +1414,15 @@ weston_surface_copy_content(struct weston_surface *surface,
int src_x, int src_y,
int width, int height);
+void
+weston_surface_activate(struct weston_surface *surface,
+ struct weston_seat *seat);
+void
+weston_surface_deactivate(struct weston_surface *surface,
+ struct weston_seat *seat);
+bool
+weston_surface_is_active(struct weston_surface *surface);
+
struct weston_buffer *
weston_buffer_from_resource(struct wl_resource *resource);
diff --git a/src/input.c b/src/input.c
index a3d982e..6e35105 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1206,21 +1206,6 @@ notify_motion_absolute(struct weston_seat *seat,
}
WL_EXPORT void
-weston_surface_activate(struct weston_surface *surface,
- struct weston_seat *seat)
-{
- struct weston_compositor *compositor = seat->compositor;
- struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat);
-
- if (keyboard) {
- weston_keyboard_set_focus(keyboard, surface);
- wl_data_device_set_keyboard_focus(seat);
- }
-
- wl_signal_emit(&compositor->activate_signal, surface);
-}
-
-WL_EXPORT void
notify_button(struct weston_seat *seat, uint32_t time, int32_t button,
enum wl_pointer_button_state state)
{
--
1.9.1
More information about the wayland-devel
mailing list