]> git.lizzy.rs Git - bspwm.git/commitdiff
Reflect single_monocle layout in report
authorLeonid Parfentiev <leo.parfentiev@gmail.com>
Sat, 26 Jan 2019 14:48:08 +0000 (17:48 +0300)
committerBastien Dejean <nihilhill@gmail.com>
Sun, 27 Jan 2019 10:02:32 +0000 (11:02 +0100)
Fixes #730.

src/desktop.c
src/helpers.h
src/messages.c
src/subscribe.c
src/tree.c

index a2c040877a7fb27995c1107bfaa40575c376aa67..098c97a3dafe0d5aef4208c4efcd2735160602d2 100644 (file)
@@ -137,6 +137,9 @@ bool find_any_desktop(coordinates_t *ref, coordinates_t *dst, desktop_select_t *
 
 bool set_layout(monitor_t *m, desktop_t *d, layout_t l)
 {
+       layout_t actual_layout = IS_SINGLE_MONOCLE(d) ? LAYOUT_MONOCLE : l;
+       bool actual_layout_changed = (d->layout != actual_layout);
+
        if (d->layout == l) {
                return false;
        }
@@ -145,9 +148,13 @@ bool set_layout(monitor_t *m, desktop_t *d, layout_t l)
 
        handle_presel_feedbacks(m, d);
 
+       if (!actual_layout_changed) {
+               return true;
+       }
+
        arrange(m, d);
 
-       put_status(SBSC_MASK_DESKTOP_LAYOUT, "desktop_layout 0x%08X 0x%08X %s\n", m->id, d->id, LAYOUT_STR(l));
+       put_status(SBSC_MASK_DESKTOP_LAYOUT, "desktop_layout 0x%08X 0x%08X %s\n", m->id, d->id, LAYOUT_STR(actual_layout));
 
        if (d == m->desk) {
                put_status(SBSC_MASK_REPORT);
index af82ecbaa879334cdf0a8b89645d5dac1f4521d2..060a4943266b4ea8453f80341492ca3f0879d73a 100644 (file)
 #define IS_FLOATING(c)    (c->state == STATE_FLOATING)
 #define IS_FULLSCREEN(c)  (c->state == STATE_FULLSCREEN)
 #define IS_RECEPTACLE(n)  (is_leaf(n) && n->client == NULL)
-#define IS_MONOCLE(d)     (d->layout == LAYOUT_MONOCLE || (single_monocle && tiled_count(d->root, true) <= 1))
+
+#define IS_SINGLE_MONOCLE(d) (single_monocle && tiled_count(d->root, true) <= 1)
+#define IS_MONOCLE(d)    (d->layout == LAYOUT_MONOCLE || IS_SINGLE_MONOCLE(d))
+#define ACTUAL_LAYOUT(d)  (IS_MONOCLE(d) ? LAYOUT_MONOCLE : d->layout)
 
 #define BOOL_STR(A)       ((A) ? "true" : "false")
 #define ON_OFF_STR(A)     ((A) ? "on" : "off")
index c80f95768263125c55cb4a70eaf43087559594e7..99fd520c839a0c85187a2d0a23b3525c7f6770bf 100644 (file)
@@ -1670,6 +1670,7 @@ void set_setting(coordinates_t loc, char *name, char *value, FILE *rsp)
                SET_BOOL(borderless_monocle)
                SET_BOOL(gapless_monocle)
                SET_BOOL(single_monocle)
+               put_status(SBSC_MASK_REPORT);
                SET_BOOL(swallow_first_click)
                SET_BOOL(pointer_follows_focus)
                SET_BOOL(pointer_follows_monitor)
index 88aa353641bd7ddc0cd75f9d7c7b0de69e637cb1..8fa50f71d49cb132bf07a885daa377a68e038ceb 100644 (file)
@@ -31,6 +31,7 @@
 #include "desktop.h"
 #include "settings.h"
 #include "subscribe.h"
+#include "tree.h"
 
 subscriber_list_t *make_subscriber_list(FILE *stream, char *fifo_path, int field, int count)
 {
@@ -99,7 +100,7 @@ int print_report(FILE *stream)
                        fprintf(stream, ":%c%s", c, d->name);
                }
                if (m->desk != NULL) {
-                       fprintf(stream, ":L%c", LAYOUT_CHR(m->desk->layout));
+                       fprintf(stream, ":L%c", LAYOUT_CHR(ACTUAL_LAYOUT(m->desk)));
                        if (m->desk->focus != NULL) {
                                node_t *n = m->desk->focus;
                                if (n->client != NULL) {
index cab8c56ed925856903b513afeee80741c2794561..dbd1594499c68cdac097034c15b397e1bec3efae 100644 (file)
@@ -46,11 +46,7 @@ void arrange(monitor_t *m, desktop_t *d)
                return;
        }
 
-       layout_t l = d->layout;
-
-       if (single_monocle && tiled_count(d->root, true) <= 1) {
-               l = LAYOUT_MONOCLE;
-       }
+       layout_t l = ACTUAL_LAYOUT(d);
 
        xcb_rectangle_t rect = m->rectangle;
 
@@ -445,6 +441,8 @@ void insert_receptacle(monitor_t *m, desktop_t *d, node_t *n)
 {
        node_t *r = make_node(XCB_NONE);
        insert_node(m, d, r, n);
+
+       put_status(SBSC_MASK_REPORT);
 }
 
 bool activate_node(monitor_t *m, desktop_t *d, node_t *n)