From: Michael D. Lowis Date: Wed, 18 Mar 2020 20:24:34 +0000 (-0400) Subject: changed design slightly to prepare for more acme-like behavior for tiling X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=a66a67712b1e8627bef4728b1e5585515a7216cd;p=proto%2Fanvil.git changed design slightly to prepare for more acme-like behavior for tiling --- diff --git a/anvil.h b/anvil.h index f99fff2..4349b14 100644 --- a/anvil.h +++ b/anvil.h @@ -26,45 +26,38 @@ Management Notes: TODO: warp mouse pointer to title bars on new windows TODO: implement mouse handling for tiling methods + TODO: add logic to add/del columns and retile Mouse Actions: Floating: Btn Click 1: Btn Drag 1: Move Window Btn Click 2: Close Window - Btn Click 3: + Btn Click 3: Shade/Unshade Window Btn Click 4: Lower Window Btn Click 5: Raise Window Monocled: - Btn Click 1: - Btn Drag 1: + Btn Click 1: Switch to stacked (maximize client) + Btn Drag 1: Move to column Btn Click 2: Close Window - Btn Click 3: Lower Window + Btn Click 3: Next Window Btn Click 4: Btn Click 5: Stacked: - Btn Click 1: - Btn Drag 1: + Btn Click 1: Make client bigger + Btn Drag 1: Drag titlebar: resize/move in column or move to column. Drag Border: resize columns Btn Click 2: Close Window - Btn Click 3: - Btn Click 4: - Btn Click 5: + Btn Click 3: Switch to monocled mode + Btn Click 4: Maximize Window + Btn Click 5: Maximize Window - Expanded: - Btn Click 1: - Btn Drag 1: - Btn Click 2: Close Window - Btn Click 3: - Btn Click 4: - Btn Click 5: * Monocled mode * Opening a new window switches to max-stacked and splits the subsequent max window * Left click switches to max-stacked * Monocled->Stacked Shows focused window max size and titlebars only for everything else * opening a new window splits the expanded one since it is max size - * */ @@ -100,14 +93,10 @@ typedef struct Client { XSizeHints hints; } Client; -enum { - TILE_MONOCLE, - TILE_STACKED -} TileMode; - typedef struct Column { struct Column* next; - int mode, width; + int mode, width, nclients; + Client* focused; Client* clients; } Column; diff --git a/mons.c b/mons.c index 22afdb1..57d7e48 100644 --- a/mons.c +++ b/mons.c @@ -28,7 +28,6 @@ void mons_init(void) for (int i = 0; i < 10; i++) { Column* col = ecalloc(1, sizeof(Column)); - col->mode = TILE_STACKED, col->width = m->w; Workspace* wspace = ecalloc(1, sizeof(Workspace)); wspace->columns = col; @@ -83,11 +82,11 @@ void mons_addclient(Client* c) else { Column* col = pickcol(mon->cspace->columns, ptrx - mon->x); - if (col->mode == TILE_MONOCLE) + if (col->focused) { monocled_add(mon, col, c); } - else if (col->mode == TILE_STACKED) + else { stacked_add(mon, col, c); } @@ -105,17 +104,13 @@ void mons_delclient(Client* c) { loc.workspace->floating = delclient(loc.workspace->floating, c); } - else if (loc.column->mode == TILE_MONOCLE) + else if (loc.column->focused) { monocled_del(loc.monitor, loc.column, loc.client); } - else if (loc.column->mode == TILE_STACKED) - { - stacked_del(loc.monitor, loc.column, loc.client); - } else { - assert(0); + stacked_del(loc.monitor, loc.column, loc.client); } xfree(c->name); XDestroyWindow(X.disp, c->frame); diff --git a/mouse.c b/mouse.c index 3b1a93e..af0ae57 100644 --- a/mouse.c +++ b/mouse.c @@ -64,11 +64,11 @@ void mouse_click(XButtonEvent* ev, Location* loc) { float_click(ev, loc); } - else if (loc->column->mode == TILE_MONOCLE) + else if (loc->column->focused) { monocled_click(ev, loc); } - else if (loc->column->mode == TILE_STACKED) + else { stacked_click(ev, loc); } @@ -106,11 +106,11 @@ void mouse_drag(XMotionEvent* ev, Location* loc) { float_drag(ev, loc); } - else if (loc->column->mode == TILE_MONOCLE) + else if (loc->column->focused) { monocled_drag(ev, loc); } - else if (loc->column->mode == TILE_STACKED) + else { stacked_drag(ev, loc); }