mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
desktop: move scene-tree node in move-to-back
view_minimize() does not need to call desktop_move_to_back() because the stacking order is not changed and the windowSwitcher uses the scene-tree nodes anyway. Note: Movement of xwayland sub-views still relies on keeping server->views in sync with z-order
This commit is contained in:
parent
e45fe0804d
commit
a6896e6978
7 changed files with 36 additions and 6 deletions
|
|
@ -10,6 +10,7 @@
|
||||||
struct view;
|
struct view;
|
||||||
|
|
||||||
void view_impl_move_to_front(struct view *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 view_impl_map(struct view *view);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ struct view_impl {
|
||||||
void (*unmap)(struct view *view);
|
void (*unmap)(struct view *view);
|
||||||
void (*maximize)(struct view *view, bool maximize);
|
void (*maximize)(struct view *view, bool maximize);
|
||||||
void (*move_to_front)(struct view *view);
|
void (*move_to_front)(struct view *view);
|
||||||
|
void (*move_to_back)(struct view *view);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct view {
|
struct view {
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,10 @@ desktop_move_to_back(struct view *view)
|
||||||
if (!view) {
|
if (!view) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wl_list_remove(&view->link);
|
if (view->impl->move_to_back) {
|
||||||
wl_list_append(&view->server->views, &view->link);
|
view->impl->move_to_back(view);
|
||||||
|
cursor_update_focus(view->server);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
/* view-impl-common.c: common code for shell view->impl functions */
|
/* view-impl-common.c: common code for shell view->impl functions */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
#include "common/list.h"
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "view-impl-common.h"
|
#include "view-impl-common.h"
|
||||||
|
|
@ -14,6 +15,14 @@ view_impl_move_to_front(struct view *view)
|
||||||
wlr_scene_node_raise_to_top(&view->scene_tree->node);
|
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
|
void
|
||||||
view_impl_map(struct view *view)
|
view_impl_map(struct view *view)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,6 @@ view_minimize(struct view *view, bool minimized)
|
||||||
view->minimized = minimized;
|
view->minimized = minimized;
|
||||||
if (minimized) {
|
if (minimized) {
|
||||||
view->impl->unmap(view);
|
view->impl->unmap(view);
|
||||||
desktop_move_to_back(view);
|
|
||||||
_view_set_activated(view, false);
|
_view_set_activated(view, false);
|
||||||
if (view == view->server->focused_view) {
|
if (view == view->server->focused_view) {
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -455,6 +455,7 @@ static const struct view_impl xdg_toplevel_view_impl = {
|
||||||
.unmap = xdg_toplevel_view_unmap,
|
.unmap = xdg_toplevel_view_unmap,
|
||||||
.maximize = xdg_toplevel_view_maximize,
|
.maximize = xdg_toplevel_view_maximize,
|
||||||
.move_to_front = view_impl_move_to_front,
|
.move_to_front = view_impl_move_to_front,
|
||||||
|
.move_to_back = view_impl_move_to_back,
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -497,8 +497,13 @@ xwayland_view_maximize(struct view *view, bool maximized)
|
||||||
maximized);
|
maximized);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum z_direction {
|
||||||
|
LAB_TO_FRONT,
|
||||||
|
LAB_TO_BACK,
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
move_sub_views_to_front(struct view *parent)
|
move_sub_views(struct view *parent, enum z_direction z_direction)
|
||||||
{
|
{
|
||||||
assert(parent);
|
assert(parent);
|
||||||
|
|
||||||
|
|
@ -524,7 +529,11 @@ move_sub_views_to_front(struct view *parent)
|
||||||
if (top_parent_of(view) != parent_xwayland_surface) {
|
if (top_parent_of(view) != parent_xwayland_surface) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (z_direction == LAB_TO_FRONT) {
|
||||||
view_impl_move_to_front(view);
|
view_impl_move_to_front(view);
|
||||||
|
} else if (z_direction == LAB_TO_BACK) {
|
||||||
|
view_impl_move_to_back(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -532,7 +541,14 @@ static void
|
||||||
xwayland_view_move_to_front(struct view *view)
|
xwayland_view_move_to_front(struct view *view)
|
||||||
{
|
{
|
||||||
view_impl_move_to_front(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
|
static void
|
||||||
|
|
@ -576,6 +592,7 @@ static const struct view_impl xwayland_view_impl = {
|
||||||
.unmap = xwayland_view_unmap,
|
.unmap = xwayland_view_unmap,
|
||||||
.maximize = xwayland_view_maximize,
|
.maximize = xwayland_view_maximize,
|
||||||
.move_to_front = xwayland_view_move_to_front,
|
.move_to_front = xwayland_view_move_to_front,
|
||||||
|
.move_to_back = xwayland_view_move_to_back,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue