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
- *
*/
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;
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;
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);
}
{
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);
{
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);
}
{
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);
}