mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
src/workspaces.c: prevent re-focus for always-on-top views
Before this patch a focused always-on-top view lost its keyboard focus when switching workspaces. Now the view keeps its focus.
This commit is contained in:
parent
f7c8663f67
commit
e39fd341ec
3 changed files with 12 additions and 8 deletions
|
|
@ -143,6 +143,7 @@ void view_set_fullscreen(struct view *view, bool fullscreen,
|
|||
void view_toggle_maximize(struct view *view);
|
||||
void view_toggle_decorations(struct view *view);
|
||||
void view_toggle_always_on_top(struct view *view);
|
||||
bool view_is_always_on_top(struct view *view);
|
||||
void view_move_to_workspace(struct view *view, struct workspace *workspace);
|
||||
void view_set_decorations(struct view *view, bool decorations);
|
||||
void view_toggle_fullscreen(struct view *view);
|
||||
|
|
|
|||
|
|
@ -522,9 +522,10 @@ view_toggle_decorations(struct view *view)
|
|||
view_set_decorations(view, !view->ssd_enabled);
|
||||
}
|
||||
|
||||
static bool
|
||||
is_always_on_top(struct view *view)
|
||||
bool
|
||||
view_is_always_on_top(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
return view->scene_tree->node.parent ==
|
||||
view->server->view_tree_always_on_top;
|
||||
}
|
||||
|
|
@ -533,7 +534,7 @@ void
|
|||
view_toggle_always_on_top(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
if (is_always_on_top(view)) {
|
||||
if (view_is_always_on_top(view)) {
|
||||
view->workspace = view->server->workspace_current;
|
||||
wlr_scene_node_reparent(&view->scene_tree->node,
|
||||
view->workspace->tree);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include "common/list.h"
|
||||
#include "common/mem.h"
|
||||
#include "labwc.h"
|
||||
#include "view.h"
|
||||
#include "workspaces.h"
|
||||
|
||||
/* Internal helpers */
|
||||
|
|
@ -259,13 +260,14 @@ workspaces_switch_to(struct workspace *target)
|
|||
/* Make sure new views will spawn on the new workspace */
|
||||
server->workspace_current = target;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Make sure we are focusing what the user sees.
|
||||
*
|
||||
* TODO: This is an issue for always-on-top views as they will
|
||||
* loose keyboard focus once switching to another workspace.
|
||||
* Only refocus if the focus is not already on an always-on-top view.
|
||||
*/
|
||||
desktop_focus_topmost_mapped_view(target->server);
|
||||
struct view *view = desktop_focused_view(server);
|
||||
if (!view || !view_is_always_on_top(view)) {
|
||||
desktop_focus_topmost_mapped_view(server);
|
||||
}
|
||||
|
||||
/* And finally show the OSD */
|
||||
_osd_show(server);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue