aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-07-11 15:26:43 +0200
committerFederico Angelilli <code@fedang.net>2024-07-11 15:26:43 +0200
commita664509c6b637e65fbd417b4a7dece831f5cf6e3 (patch)
treeb71d8e09afc098a8e57c44d83bdd3f0a422e3527
parent6942efee2d41a768501e23bd06f38dbb4fde197b (diff)
Add override_redirect config
-rw-r--r--src/comet.c2
-rw-r--r--src/config.c36
-rw-r--r--src/config.h1
-rw-r--r--src/display.c3
-rw-r--r--src/window.c4
-rw-r--r--src/window.h3
6 files changed, 40 insertions, 9 deletions
diff --git a/src/comet.c b/src/comet.c
index c30a4e7..078ff15 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
display_init(&display);
window_t window;
- window_init(&window, &display);
+ window_init(&window, &display, &config);
config.block.min_width = config.block.max_width = config.width;
diff --git a/src/config.c b/src/config.c
index 39c58f5..07f5743 100644
--- a/src/config.c
+++ b/src/config.c
@@ -16,6 +16,7 @@ typedef enum {
CONFIG_INT,
CONFIG_UINT,
CONFIG_DOUBLE,
+ CONFIG_BOOL,
} config_type_t;
typedef struct {
@@ -25,10 +26,11 @@ typedef struct {
} config_entry_t;
static const config_entry_t config_entries[] = {
- { "width", CONFIG_UINT, offsetof(config_t, width) },
- { "height", CONFIG_UINT, offsetof(config_t, height) },
- { "font", CONFIG_STRING, offsetof(config_t, font) },
- { "monitor", CONFIG_STRING, offsetof(config_t, monitor) },
+ { "width", CONFIG_UINT, offsetof(config_t, width) },
+ { "height", CONFIG_UINT, offsetof(config_t, height) },
+ { "font", CONFIG_STRING, offsetof(config_t, font) },
+ { "monitor", CONFIG_STRING, offsetof(config_t, monitor) },
+ { "override_redirect", CONFIG_BOOL, offsetof(config_t, override_redirect) },
};
static bool config_read_string(const char *value, char **result)
@@ -71,6 +73,24 @@ static bool config_read_uint(const char *value, unsigned int *result)
return *end == '\0' && n != ULONG_MAX;
}
+static bool config_read_bool(const char *value, bool *result)
+{
+ size_t lenght = strlen(value);
+
+ if (lenght == 5 && !strcmp(value, "false")) {
+ *result = false;
+ return true;
+ }
+
+ if (lenght == 4 && !strcmp(value, "true")) {
+ *result = true;
+ return true;
+ }
+
+ log_debug("Invalid bool value");
+ return false;
+}
+
static bool config_read_double(const char *value, double *result)
{
char *end;
@@ -133,6 +153,13 @@ static bool config_entry(config_t *config, int line, const char *section, const
}
break;
+ case CONFIG_BOOL:
+ if (config_read_bool(value, (bool *)result)) {
+ log_debug("Config '%s' set to '%s'", key, *(bool *)result ? "true" : "false");
+ return true;
+ }
+ break;
+
default:
log_panic("Unreachable");
}
@@ -169,6 +196,7 @@ void config_init(config_t *config)
.monitor = NULL,
.height = 50,
.width = 100,
+ .override_redirect = false,
};
memcpy(config, &config_default, sizeof(config_t));
diff --git a/src/config.h b/src/config.h
index 007393b..11c4053 100644
--- a/src/config.h
+++ b/src/config.h
@@ -11,6 +11,7 @@ typedef struct {
char *monitor;
unsigned int height;
unsigned int width;
+ bool override_redirect;
} config_t;
void config_init(config_t *config);
diff --git a/src/display.c b/src/display.c
index 2c8519f..df0a0e6 100644
--- a/src/display.c
+++ b/src/display.c
@@ -42,7 +42,8 @@ void display_init(display_t *display)
assert(randr_version->major_version >= 1);
free(randr_version);
- xcb_randr_get_screen_info_cookie_t cookie = xcb_randr_get_screen_info(display->connection, display->screen->root);
+ xcb_randr_get_screen_info_cookie_t cookie = xcb_randr_get_screen_info(display->connection,
+ display->screen->root);
display->info_reply = xcb_randr_get_screen_info_reply(display->connection, cookie, &error);
assert(error == NULL);
diff --git a/src/window.c b/src/window.c
index ca396cc..717d90b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -88,7 +88,7 @@ static void wm_setup(window_t *window)
wm_set_struts(window);
}
-void window_init(window_t *window, display_t *display)
+void window_init(window_t *window, display_t *display, config_t *config)
{
memset(window, 0, sizeof(window_t));
window->display = display;
@@ -109,7 +109,7 @@ void window_init(window_t *window, display_t *display)
XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, back_pixmap, XCB_NONE);
XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, back_pixel, 0x00000000);
XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, border_pixel, 0x00000000);
- XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, override_redirect, true);
+ XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, override_redirect, config->override_redirect);
XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, event_mask, event_mask);
XCB_AUX_ADD_PARAM(&window->cw_mask, &window->cw_params, colormap, colormap);
diff --git a/src/window.h b/src/window.h
index ca38bb5..579a61c 100644
--- a/src/window.h
+++ b/src/window.h
@@ -6,6 +6,7 @@
#include <xcb/xcb_aux.h>
#include "display.h"
+#include "config.h"
typedef struct {
display_t *display;
@@ -18,7 +19,7 @@ typedef struct {
int width, height;
} window_t;
-void window_init(window_t *window, display_t *display);
+void window_init(window_t *window, display_t *display, config_t *config);
void window_move(window_t *window, int x, int y);