summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStivvo <stivvo01@gmail.com>2020-10-31 18:29:33 +0100
committerStivvo <stivvo01@gmail.com>2020-10-31 18:29:33 +0100
commitd9ab75721af57ad6b19cb167d7e762b5496a275b (patch)
treeee7290675d700a09725dbb0618ab5794fa31fd81
parent80a685ee51da69ae0a7bae11620c5f33c3cd2de2 (diff)
downloaddwl-d9ab75721af57ad6b19cb167d7e762b5496a275b.tar.gz
dwl-d9ab75721af57ad6b19cb167d7e762b5496a275b.tar.bz2
dwl-d9ab75721af57ad6b19cb167d7e762b5496a275b.zip
Don't switch to another disabled monitors
Since wlr_output_enable doesn't have any effect before finishing all the procedure, a little hack allows to make use of focusmon(), which must know the latest in about which output is currently disabled Also improve performance in focusmon() and cleaner code in outputmgrapplyortest()
Diffstat (limited to '')
-rw-r--r--dwl.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/dwl.c b/dwl.c
index d875eaa..11e6ad1 100644
--- a/dwl.c
+++ b/dwl.c
@@ -1092,11 +1092,11 @@ void
focusmon(const Arg *arg)
{
Client *sel;
- do {
- sel = selclient();
+ do
selmon = dirtomon(arg->i);
- focusclient(sel, focustop(selmon), 1);
- } while (!selmon->wlr_output->enabled);
+ while (!selmon->wlr_output->enabled);
+ sel = selclient();
+ focusclient(sel, focustop(selmon), 1);
}
void
@@ -1466,19 +1466,8 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, bool test)
wl_list_for_each(config_head, &config->heads, link) {
struct wlr_output *wlr_output = config_head->state.output;
- Monitor *m;
wlr_output_enable(wlr_output, config_head->state.enabled);
- if (!config_head->state.enabled) {
- wl_list_for_each(m, &mons, link) {
- if (m->wlr_output->name == wlr_output->name) {
- // focus the left monitor (relative to the current focus)
- focusmon(&ar);
- closemon(m);
- }
- }
- }
-
if (config_head->state.enabled) {
if (config_head->state.mode)
wlr_output_set_mode(wlr_output, config_head->state.mode);
@@ -1492,6 +1481,17 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, bool test)
config_head->state.x, config_head->state.y);
wlr_output_set_transform(wlr_output, config_head->state.transform);
wlr_output_set_scale(wlr_output, config_head->state.scale);
+ } else {
+ Monitor *m;
+ wl_list_for_each(m, &mons, link) {
+ if (m->wlr_output->name == wlr_output->name) {
+ // focus the left monitor (relative to the current focus)
+ m->wlr_output->enabled = !m->wlr_output->enabled;
+ focusmon(&ar);
+ closemon(m);
+ m->wlr_output->enabled = !m->wlr_output->enabled;
+ }
+ }
}
if (test) {