]> git.mdlowis.com Git - proto/labwc.git/commitdiff
view: add view_set_activated()
authorJohan Malm <jgm323@gmail.com>
Sat, 16 Oct 2021 18:24:26 +0000 (19:24 +0100)
committerJohan Malm <jgm323@gmail.com>
Sat, 16 Oct 2021 18:24:26 +0000 (19:24 +0100)
Call wlr_foreign_toplevel_handle_v1_set_activated() from it in support of
issue #73

include/labwc.h
src/view.c
src/xdg.c
src/xwayland.c

index 132390a2a39149e055312e52fc9f697778933d10..3f1dea66f5115c37e3877751aace85725e06e1e6 100644 (file)
@@ -170,6 +170,7 @@ struct view_impl {
        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);
@@ -317,6 +318,7 @@ void view_child_init(struct view_child *child, struct view *view,
 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);
index 530753a9a30de394ece19dc10199696c884254c2..3a9c4a33629a667a9df2d054eb90cf6f8d749058 100644 (file)
@@ -4,6 +4,18 @@
 #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)
 {
index 080cee42536ddee7109a2d3ce9ff82a8a00454d5..202f285d0bf630720246b62a0710c37d5a2a4deb 100644 (file)
--- a/src/xdg.c
+++ b/src/xdg.c
@@ -226,6 +226,15 @@ xdg_toplevel_view_maximize(struct view *view, bool maximized)
        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)
 {
@@ -356,6 +365,7 @@ static const struct view_impl xdg_toplevel_view_impl = {
        .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,
index edb81eeec1092bac8ca457c9030b3217e0a9a11e..eb730c6e02c65b8908f8161fe44a62aa3b6fabc1 100644 (file)
@@ -227,6 +227,19 @@ maximize(struct view *view, bool maximized)
        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)
 {
@@ -240,6 +253,7 @@ static const struct view_impl xwl_view_impl = {
        .get_string_prop = get_string_prop,
        .map = map,
        .move = move,
+       .set_activated = set_activated,
        .set_fullscreen = set_fullscreen,
        .unmap = unmap,
        .maximize = maximize