From a664509c6b637e65fbd417b4a7dece831f5cf6e3 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Thu, 11 Jul 2024 15:26:43 +0200 Subject: Add override_redirect config --- src/comet.c | 2 +- src/config.c | 36 ++++++++++++++++++++++++++++++++---- src/config.h | 1 + src/display.c | 3 ++- src/window.c | 4 ++-- src/window.h | 3 ++- 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 #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); -- cgit v1.2.3