const char *(*get_string_prop)(struct view *view, const char *prop);
void (*map)(struct view *view);
void (*move)(struct view *view, double x, double y);
+ void (*set_activated)(struct view *view, bool activated);
void (*set_fullscreen)(struct view *view, bool fullscreen);
void (*unmap)(struct view *view);
void (*maximize)(struct view *view, bool maximize);
void view_child_finish(struct view_child *child);
void subsurface_create(struct view *view, struct wlr_subsurface *wlr_subsurface);
+void view_set_activated(struct view *view, bool activated);
void view_move_resize(struct view *view, struct wlr_box geo);
void view_move(struct view *view, double x, double y);
void view_minimize(struct view *view, bool minimized);
#include "labwc.h"
#include "ssd.h"
+void
+view_set_activated(struct view *view, bool activated)
+{
+ if (view->impl->set_activated) {
+ view->impl->set_activated(view, activated);
+ }
+ if (view->toplevel_handle) {
+ wlr_foreign_toplevel_handle_v1_set_activated(
+ view->toplevel_handle, activated);
+ }
+}
+
void
view_move_resize(struct view *view, struct wlr_box geo)
{
wlr_xdg_toplevel_set_maximized(view->xdg_surface, maximized);
}
+static void
+xdg_toplevel_view_set_activated(struct view *view, bool activated)
+{
+ struct wlr_xdg_surface *surface = view->xdg_surface;
+ if (surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
+ wlr_xdg_toplevel_set_activated(surface, activated);
+ }
+}
+
static void
xdg_toplevel_view_set_fullscreen(struct view *view, bool fullscreen)
{
.get_string_prop = xdg_toplevel_view_get_string_prop,
.map = xdg_toplevel_view_map,
.move = xdg_toplevel_view_move,
+ .set_activated = xdg_toplevel_view_set_activated,
.set_fullscreen = xdg_toplevel_view_set_fullscreen,
.unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize,
wlr_xwayland_surface_set_maximized(view->xwayland_surface, maximized);
}
+static void
+set_activated(struct view *view, bool activated)
+{
+ struct wlr_xwayland_surface *surface = view->xwayland_surface;
+
+ if (activated && surface->minimized) {
+ wlr_xwayland_surface_set_minimized(surface, false);
+ }
+
+ wlr_xwayland_surface_activate(surface, activated);
+ wlr_xwayland_surface_restack(surface, NULL, XCB_STACK_MODE_ABOVE);
+}
+
static void
set_fullscreen(struct view *view, bool fullscreen)
{
.get_string_prop = get_string_prop,
.map = map,
.move = move,
+ .set_activated = set_activated,
.set_fullscreen = set_fullscreen,
.unmap = unmap,
.maximize = maximize