From 8418960055da3337e767afb49f59c7eec229dc3c Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 24 Jun 2025 16:56:23 +0100 Subject: add window centering the user can now center any floating window with default bind centre_window --- src/defs.h | 3 ++- src/parser.c | 3 ++- src/sxwm.c | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/defs.h b/src/defs.h index 5476434..5796214 100644 --- a/src/defs.h +++ b/src/defs.h @@ -119,6 +119,7 @@ typedef struct { Bool enabled; } Scratchpad; +extern void centre_window(); extern void close_focused(void); extern void dec_gaps(void); extern void focus_next(void); @@ -139,4 +140,4 @@ extern void resize_stack_add(void); extern void resize_stack_sub(void); extern void toggle_floating(void); extern void toggle_floating_global(void); -extern void toggle_fullscreen(void); \ No newline at end of file +extern void toggle_fullscreen(void); diff --git a/src/parser.c b/src/parser.c index eb0b1a8..79cf29b 100644 --- a/src/parser.c +++ b/src/parser.c @@ -37,6 +37,7 @@ static const struct { {"toggle_floating", toggle_floating}, {"global_floating", toggle_floating_global}, {"fullscreen", toggle_fullscreen}, + {"centre_window", centre_window}, {NULL, NULL}}; static void remap_and_dedupe_binds(Config *cfg) @@ -691,4 +692,4 @@ const char **build_argv(const char *cmd) free(tmp); return argv; #endif -} \ No newline at end of file +} diff --git a/src/sxwm.c b/src/sxwm.c index 5e86c75..8aa7bd8 100644 --- a/src/sxwm.c +++ b/src/sxwm.c @@ -38,6 +38,7 @@ #include "parser.h" Client *add_client(Window w, int ws); +/* void centre_window(); */ void change_workspace(int ws); int clean_mask(int mask); /* void close_focused(void); */ @@ -253,6 +254,20 @@ Client *add_client(Window w, int ws) return c; } +void centre_window() +{ + if (!focused || !focused->mapped || !focused->floating) { + return; + } + + int x = mons[focused->mon].x + (mons[focused->mon].w - focused->w) / 2; + int y = mons[focused->mon].y + (mons[focused->mon].h - focused->h) / 2; + + focused->x = x; + focused->y = y; + XMoveWindow(dpy, focused->win, x, y); +} + void change_workspace(int ws) { if (ws >= NUM_WORKSPACES || ws == current_ws) { @@ -2657,4 +2672,4 @@ int main(int ac, char **av) printf("sxwm: starting...\n"); run(); return 0; -} \ No newline at end of file +} -- cgit v1.2.3