diff options
author | Jasper St. Pierre <jstpierre@mecheye.net> | 2014-05-06 08:44:29 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2014-05-12 23:34:05 -0700 |
commit | 973d7879e33e624f99f24fdd3dd0ddd8c9ca4dad (patch) | |
tree | f43a6435cbbfc4d1d048f8fc8330b0109c7f50ee | |
parent | de6809912e1a4639b05a4098a346872f91d8103b (diff) |
xdg-shell: Turn "activated" into a state
This drops two events, and makes new window decorations race-free with
an attach in-flight.
-rw-r--r-- | clients/simple-egl.c | 12 | ||||
-rw-r--r-- | clients/simple-shm.c | 12 | ||||
-rw-r--r-- | clients/window.c | 20 | ||||
-rw-r--r-- | desktop-shell/shell.c | 10 | ||||
-rw-r--r-- | protocol/xdg-shell.xml | 27 |
5 files changed, 15 insertions, 66 deletions
diff --git a/clients/simple-egl.c b/clients/simple-egl.c index 165ce10a..2097b4ca 100644 --- a/clients/simple-egl.c +++ b/clients/simple-egl.c @@ -304,16 +304,6 @@ handle_surface_configure(void *data, struct xdg_surface *surface, } static void -handle_surface_activated(void *data, struct xdg_surface *xdg_surface) -{ -} - -static void -handle_surface_deactivated(void *data, struct xdg_surface *xdg_surface) -{ -} - -static void handle_surface_delete(void *data, struct xdg_surface *xdg_surface) { running = 0; @@ -321,8 +311,6 @@ handle_surface_delete(void *data, struct xdg_surface *xdg_surface) static const struct xdg_surface_listener xdg_surface_listener = { handle_surface_configure, - handle_surface_activated, - handle_surface_deactivated, handle_surface_delete, }; diff --git a/clients/simple-shm.c b/clients/simple-shm.c index d0cd7e39..29abb8bc 100644 --- a/clients/simple-shm.c +++ b/clients/simple-shm.c @@ -124,16 +124,6 @@ handle_configure(void *data, struct xdg_surface *surface, } static void -handle_activated(void *data, struct xdg_surface *xdg_surface) -{ -} - -static void -handle_deactivated(void *data, struct xdg_surface *xdg_surface) -{ -} - -static void handle_delete(void *data, struct xdg_surface *xdg_surface) { running = 0; @@ -141,8 +131,6 @@ handle_delete(void *data, struct xdg_surface *xdg_surface) static const struct xdg_surface_listener xdg_surface_listener = { handle_configure, - handle_activated, - handle_deactivated, handle_delete, }; diff --git a/clients/window.c b/clients/window.c index c46cb722..7d883451 100644 --- a/clients/window.c +++ b/clients/window.c @@ -3868,6 +3868,7 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface, window->maximized = 0; window->fullscreen = 0; window->resizing = 0; + window->focused = 0; wl_array_for_each(p, states) { uint32_t state = *p; @@ -3881,6 +3882,9 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface, case XDG_SURFACE_STATE_RESIZING: window->resizing = 1; break; + case XDG_SURFACE_STATE_ACTIVATED: + window->focused = 1; + break; default: /* Unknown state */ break; @@ -3894,20 +3898,6 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface, } static void -handle_surface_activated(void *data, struct xdg_surface *xdg_surface) -{ - struct window *window = data; - window->focused = 1; -} - -static void -handle_surface_deactivated(void *data, struct xdg_surface *xdg_surface) -{ - struct window *window = data; - window->focused = 0; -} - -static void handle_surface_delete(void *data, struct xdg_surface *xdg_surface) { struct window *window = data; @@ -3916,8 +3906,6 @@ handle_surface_delete(void *data, struct xdg_surface *xdg_surface) static const struct xdg_surface_listener xdg_surface_listener = { handle_surface_configure, - handle_surface_activated, - handle_surface_deactivated, handle_surface_delete, }; diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index d7cd9c82..1704b845 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2009,16 +2009,14 @@ static void shell_surface_lose_keyboard_focus(struct shell_surface *shsurf) { if (--shsurf->focus_count == 0) - if (shell_surface_is_xdg_surface(shsurf)) - xdg_surface_send_deactivated(shsurf->resource); + shell_surface_state_changed(shsurf); } static void shell_surface_gain_keyboard_focus(struct shell_surface *shsurf) { if (shsurf->focus_count++ == 0) - if (shell_surface_is_xdg_surface(shsurf)) - xdg_surface_send_activated(shsurf->resource); + shell_surface_state_changed(shsurf); } static void @@ -3557,6 +3555,10 @@ xdg_send_configure(struct weston_surface *surface, s = wl_array_add(&states, sizeof *s); *s = XDG_SURFACE_STATE_RESIZING; } + if (shsurf->focus_count > 0) { + s = wl_array_add(&states, sizeof *s); + *s = XDG_SURFACE_STATE_ACTIVATED; + } serial = wl_display_next_serial(shsurf->surface->compositor->wl_display); xdg_surface_send_configure(shsurf->resource, width, height, &states, serial); diff --git a/protocol/xdg-shell.xml b/protocol/xdg-shell.xml index 19f9651d..3c186102 100644 --- a/protocol/xdg-shell.xml +++ b/protocol/xdg-shell.xml @@ -276,6 +276,11 @@ Clients that have aspect ratio or cell sizing configuration can use a smaller size, however. </entry> + <entry name="activated" value="4"> + Client window decorations should be painted as if the window is + active. Do not assume this means that the window actually has + keyboard or pointer focus. + </entry> </enum> <event name="configure"> @@ -331,28 +336,6 @@ <request name="set_minimized" /> - <event name="activated"> - <description summary="surface was activated"> - The activated_set event is sent when this surface has been - activated, which means that the surface has user attention. - Window decorations should be updated accordingly. You should - not use this event for anything but the style of decorations - you display, use wl_keyboard.enter and wl_keyboard.leave for - determining keyboard focus. - </description> - </event> - - <event name="deactivated"> - <description summary="surface was deactivated"> - The deactivate event is sent when this surface has been - deactivated, which means that the surface lost user attention. - Window decorations should be updated accordingly. You should - not use this event for anything but the style of decorations - you display, use wl_keyboard.enter and wl_keyboard.leave for - determining keyboard focus. - </description> - </event> - <event name="close"> <description summary="surface wants to be closed"> The close event is sent by the compositor when the user |