}
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;
static const struct xdg_surface_listener xdg_surface_listener = {
handle_surface_configure,
- handle_surface_activated,
- handle_surface_deactivated,
handle_surface_delete,
};
}
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;
static const struct xdg_surface_listener xdg_surface_listener = {
handle_configure,
- handle_activated,
- handle_deactivated,
handle_delete,
};
window->maximized = 0;
window->fullscreen = 0;
window->resizing = 0;
+ window->focused = 0;
wl_array_for_each(p, states) {
uint32_t state = *p;
case XDG_SURFACE_STATE_RESIZING:
window->resizing = 1;
break;
+ case XDG_SURFACE_STATE_ACTIVATED:
+ window->focused = 1;
+ break;
default:
/* Unknown state */
break;
}
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;
static const struct xdg_surface_listener xdg_surface_listener = {
handle_surface_configure,
- handle_surface_activated,
- handle_surface_deactivated,
handle_surface_delete,
};
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
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);
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">
<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