]> git.lizzy.rs Git - bspwm.git/commitdiff
Don't store the split direction's csq as a string
authorEmanuele Torre <torreemanuele6@gmail.com>
Thu, 30 Jul 2020 01:04:30 +0000 (03:04 +0200)
committerBastien Dejean <nihilhill@gmail.com>
Fri, 31 Jul 2020 07:56:18 +0000 (09:56 +0200)
src/query.c
src/rule.c
src/types.h
src/window.c

index 23ae367387a600bdfe1ff1e5e3ff1ccaeedeaa4a..d98ece03e142c728c03bf8b3a293c9785dec6993 100644 (file)
@@ -438,7 +438,7 @@ void print_rule_consequence(char **buf, rule_consequence_t *csq)
                csq->monitor_desc, csq->desktop_desc, csq->node_desc,
                csq->state == NULL ? "" : STATE_STR(*csq->state),
                csq->layer == NULL ? "" : LAYER_STR(*csq->layer),
-               csq->split_dir, csq->split_ratio,
+               csq->split_dir == NULL ? "" : SPLIT_DIR_STR(*csq->split_dir), csq->split_ratio,
                ON_OFF_STR(csq->hidden), ON_OFF_STR(csq->sticky), ON_OFF_STR(csq->private),
                ON_OFF_STR(csq->locked), ON_OFF_STR(csq->marked), ON_OFF_STR(csq->center), ON_OFF_STR(csq->follow),
                ON_OFF_STR(csq->manage), ON_OFF_STR(csq->focus), ON_OFF_STR(csq->border), rect_buf);
index 43a0ccdbf8bd3ce8b547f4e51f6a16c64f9c56b4..02fdc98be0bbee3a9d1e6f66c3e7ec6ab51237e4 100644 (file)
@@ -192,6 +192,14 @@ event_queue_t *make_event_queue(xcb_generic_event_t *evt)
 }
 
 
+#define SET_CSQ_SPLIT_DIR(val) \
+       do { \
+               if (csq->split_dir == NULL) { \
+                       csq->split_dir = calloc(1, sizeof(direction_t)); \
+               } \
+               *(csq->split_dir) = (val); \
+       } while (0)
+
 #define SET_CSQ_STATE(val) \
        do { \
                if (csq->state == NULL) { \
@@ -386,7 +394,10 @@ void parse_key_value(char *key, char *value, rule_consequence_t *csq)
        } else if (streq("node", key)) {
                snprintf(csq->node_desc, sizeof(csq->node_desc), "%s", value);
        } else if (streq("split_dir", key)) {
-               snprintf(csq->split_dir, sizeof(csq->split_dir), "%s", value);
+               direction_t dir;
+               if (parse_direction(value, &dir)) {
+                       SET_CSQ_SPLIT_DIR(dir);
+               }
        } else if (streq("state", key)) {
                client_state_t cst;
                if (parse_client_state(value, &cst)) {
index 5805e5dc3ab630309ebf12fd8cb0e1243ce04e06..425b1f6f5dd0d21f1d7213a0566020b053e02186 100644 (file)
@@ -356,7 +356,7 @@ typedef struct {
        char monitor_desc[MAXLEN];
        char desktop_desc[MAXLEN];
        char node_desc[MAXLEN];
-       char split_dir[SMALEN];
+       direction_t *split_dir;
        double split_ratio;
        stack_layer_t *layer;
        client_state_t *state;
index 9b85016a573fe387b1e79843b4d8394535700044..a22b5e78a042d8b6323f07b319708bf0910ef3cc 100644 (file)
@@ -124,11 +124,8 @@ bool manage_window(xcb_window_t win, rule_consequence_t *csq, int fd)
                f = mon->desk->focus;
        }
 
-       if (csq->split_dir[0] != '\0' && f != NULL) {
-               direction_t dir;
-               if (parse_direction(csq->split_dir, &dir)) {
-                       presel_dir(m, d, f, dir);
-               }
+       if (csq->split_dir != NULL && f != NULL) {
+               presel_dir(m, d, f, *csq->split_dir);
        }
 
        if (csq->split_ratio != 0 && f != NULL) {