diff --git a/src/client.c b/src/client.c index 44d8a11..91cf397 100644 --- a/src/client.c +++ b/src/client.c @@ -820,7 +820,8 @@ client_moveresize(Client *c, XRectangle geo, Bool r) c->geo = c->ogeo = geo; - if(c->flags & FreeFlag || tags[c->screen][c->tag].layout.func == freelayout) + if(c->flags & FreeFlag || tags[c->screen][c->tag].layout.func == freelayout + || conf.keep_layout_geo) c->free_geo = geo; if((c->screen = screen_get_with_geo(c->geo.x, c->geo.y)) != os diff --git a/src/config.c b/src/config.c index ed13fb1..234c0ed 100644 --- a/src/config.c +++ b/src/config.c @@ -384,6 +384,7 @@ conf_layout_section(void) conf.border.layout = fetch_opt_first(layouts, "false", "border").bool; conf.colors.layout_fg = fetch_opt_first(layouts, "#ffffff", "fg").str; conf.colors.layout_bg = getcolor((fetch_opt_first(layouts, "#000000", "bg").str)); + conf.keep_layout_geo = fetch_opt_first(layouts, "false", "keep_layout_geo").bool; if((tmp = fetch_opt_first(layouts, "menu", "system").str) && !strcmp(tmp, "menu")) diff --git a/src/structs.h b/src/structs.h index e09debf..2f7209f 100644 --- a/src/structs.h +++ b/src/structs.h @@ -437,6 +437,7 @@ typedef struct Bool client_round; Bool layout_system; /* Switch: False, Menu: True. */ Bool layout_placement; /* Right (normal): False, Left: True. */ + Bool keep_layout_geo; /* Number of... */ int nkeybind; int nlayout; diff --git a/wmfsrc.in b/wmfsrc.in index b2fb5d6..3594704 100644 --- a/wmfsrc.in +++ b/wmfsrc.in @@ -48,6 +48,9 @@ # Value left or right. placement = "right" + # Keep layout geo for free layout + keep_layout_geo = false + # Tiling layouts. [layout] type = "tile_right" symbol = "RIGHT" [/layout] [layout] type = "tile_left" symbol = "LEFT" [/layout]