struct view;
void view_impl_move_to_front(struct view *view);
+void view_impl_move_to_back(struct view *view);
void view_impl_map(struct view *view);
/*
void (*unmap)(struct view *view);
void (*maximize)(struct view *view, bool maximize);
void (*move_to_front)(struct view *view);
+ void (*move_to_back)(struct view *view);
};
struct view {
if (!view) {
return;
}
- wl_list_remove(&view->link);
- wl_list_append(&view->server->views, &view->link);
+ if (view->impl->move_to_back) {
+ view->impl->move_to_back(view);
+ cursor_update_focus(view->server);
+ }
}
void
/* view-impl-common.c: common code for shell view->impl functions */
#include <stdio.h>
#include <strings.h>
+#include "common/list.h"
#include "labwc.h"
#include "view.h"
#include "view-impl-common.h"
wlr_scene_node_raise_to_top(&view->scene_tree->node);
}
+void
+view_impl_move_to_back(struct view *view)
+{
+ wl_list_remove(&view->link);
+ wl_list_append(&view->server->views, &view->link);
+ wlr_scene_node_lower_to_bottom(&view->scene_tree->node);
+}
+
void
view_impl_map(struct view *view)
{
view->minimized = minimized;
if (minimized) {
view->impl->unmap(view);
- desktop_move_to_back(view);
_view_set_activated(view, false);
if (view == view->server->focused_view) {
/*
.unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize,
.move_to_front = view_impl_move_to_front,
+ .move_to_back = view_impl_move_to_back,
};
void
maximized);
}
+enum z_direction {
+ LAB_TO_FRONT,
+ LAB_TO_BACK,
+};
+
static void
-move_sub_views_to_front(struct view *parent)
+move_sub_views(struct view *parent, enum z_direction z_direction)
{
assert(parent);
if (top_parent_of(view) != parent_xwayland_surface) {
continue;
}
- view_impl_move_to_front(view);
+ if (z_direction == LAB_TO_FRONT) {
+ view_impl_move_to_front(view);
+ } else if (z_direction == LAB_TO_BACK) {
+ view_impl_move_to_back(view);
+ }
}
}
xwayland_view_move_to_front(struct view *view)
{
view_impl_move_to_front(view);
- move_sub_views_to_front(view);
+ move_sub_views(view, LAB_TO_FRONT);
+}
+
+static void
+xwayland_view_move_to_back(struct view *view)
+{
+ view_impl_move_to_back(view);
+ move_sub_views(view, LAB_TO_BACK);
}
static void
.unmap = xwayland_view_unmap,
.maximize = xwayland_view_maximize,
.move_to_front = xwayland_view_move_to_front,
+ .move_to_back = xwayland_view_move_to_back,
};
static void