window-rules: add fixedPosition property

...to address regression introduced by 57075ce and enables panel/desktop
clients which rely on window rules to remain in the same position when
the usable-area changes (normally because an exclusive layer-shell
clients is started/finished).

Also disallows interactive move/resize, for example by alt +
mouse-press.

Fixes: #1235
This commit is contained in:
Johan Malm 2023-11-09 21:44:51 +00:00 committed by Consolatis
parent 9a8a2905ad
commit 368ede7460
7 changed files with 23 additions and 0 deletions

View file

@ -159,6 +159,8 @@ fill_window_rule(char *nodename, char *content)
set_property(content, &current_window_rule->skip_window_switcher);
} else if (!strcasecmp(nodename, "ignoreFocusRequest")) {
set_property(content, &current_window_rule->ignore_focus_request);
} else if (!strcasecmp(nodename, "fixedPosition")) {
set_property(content, &current_window_rule->fixed_position);
/* Actions */
} else if (!strcmp(nodename, "name.action")) {

View file

@ -4,6 +4,7 @@
#include "regions.h"
#include "resize_indicator.h"
#include "view.h"
#include "window-rules.h"
static int
max_move_scale(double pos_cursor, double pos_current,
@ -34,6 +35,10 @@ interactive_begin(struct view *view, enum input_mode mode, uint32_t edges)
return;
}
if (window_rules_get_property(view, "fixedPosition") == LAB_PROP_TRUE) {
return;
}
switch (mode) {
case LAB_INPUT_STATE_MOVE:
if (view->fullscreen) {

View file

@ -587,6 +587,10 @@ view_adjust_floating_geometry(struct view *view, struct wlr_box *geometry)
return false;
}
if (window_rules_get_property(view, "fixedPosition") == LAB_PROP_TRUE) {
return false;
}
bool adjusted = false;
/*
* First check whether the view is onscreen. For now, "onscreen"

View file

@ -128,6 +128,10 @@ window_rules_get_property(struct view *view, const char *property)
&& !strcasecmp(property, "ignoreFocusRequest")) {
return rule->ignore_focus_request;
}
if (rule->fixed_position
&& !strcasecmp(property, "fixedPosition")) {
return rule->fixed_position;
}
}
}
return LAB_PROP_UNSPECIFIED;