Implement mode toggle
This commit is contained in:
parent
e67c712f31
commit
71e0e49c0e
@ -95,6 +95,7 @@ none { return TOK_NONE; }
|
|||||||
mode { return TOK_MODE; }
|
mode { return TOK_MODE; }
|
||||||
tiling { return TOK_TILING; }
|
tiling { return TOK_TILING; }
|
||||||
floating { return TOK_FLOATING; }
|
floating { return TOK_FLOATING; }
|
||||||
|
toggle { return TOK_TOGGLE; }
|
||||||
workspace { BEGIN(WANT_WS_STRING); return TOK_WORKSPACE; }
|
workspace { BEGIN(WANT_WS_STRING); return TOK_WORKSPACE; }
|
||||||
focus { return TOK_FOCUS; }
|
focus { return TOK_FOCUS; }
|
||||||
move { return TOK_MOVE; }
|
move { return TOK_MOVE; }
|
||||||
|
@ -109,6 +109,7 @@ void parse_cmd(const char *new) {
|
|||||||
%token TOK_TILING "tiling"
|
%token TOK_TILING "tiling"
|
||||||
%token TOK_FLOATING "floating"
|
%token TOK_FLOATING "floating"
|
||||||
%token TOK_WORKSPACE "workspace"
|
%token TOK_WORKSPACE "workspace"
|
||||||
|
%token TOK_TOGGLE "toggle"
|
||||||
%token TOK_FOCUS "focus"
|
%token TOK_FOCUS "focus"
|
||||||
%token TOK_MOVE "move"
|
%token TOK_MOVE "move"
|
||||||
%token TOK_OPEN "open"
|
%token TOK_OPEN "open"
|
||||||
@ -398,14 +399,20 @@ direction:
|
|||||||
mode:
|
mode:
|
||||||
TOK_MODE WHITESPACE window_mode
|
TOK_MODE WHITESPACE window_mode
|
||||||
{
|
{
|
||||||
printf("should switch mode to %s\n", ($<number>3 == TOK_FLOATING ? "floating" : "tiling"));
|
if ($<number>3 == TOK_TOGGLE) {
|
||||||
/* TODO: actually switch mode (not toggle) */
|
printf("should toggle mode\n");
|
||||||
|
toggle_floating_mode(focused, false);
|
||||||
|
} else {
|
||||||
|
printf("should switch mode to %s\n", ($<number>3 == TOK_FLOATING ? "floating" : "tiling"));
|
||||||
|
/* TODO: actually switch mode (not toggle) */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
window_mode:
|
window_mode:
|
||||||
TOK_FLOATING { $<number>$ = TOK_FLOATING; }
|
TOK_FLOATING { $<number>$ = TOK_FLOATING; }
|
||||||
| TOK_TILING { $<number>$ = TOK_TILING; }
|
| TOK_TILING { $<number>$ = TOK_TILING; }
|
||||||
|
| TOK_TOGGLE { $<number>$ = TOK_TOGGLE; }
|
||||||
;
|
;
|
||||||
|
|
||||||
level:
|
level:
|
||||||
|
@ -37,6 +37,7 @@ void toggle_floating_mode(Con *con, bool automatic) {
|
|||||||
|
|
||||||
/* 2: kill parent container */
|
/* 2: kill parent container */
|
||||||
TAILQ_REMOVE(&(con->parent->parent->floating_head), con->parent, floating_windows);
|
TAILQ_REMOVE(&(con->parent->parent->floating_head), con->parent, floating_windows);
|
||||||
|
TAILQ_REMOVE(&(con->parent->parent->focus_head), con->parent, focused);
|
||||||
tree_close(con->parent, false);
|
tree_close(con->parent, false);
|
||||||
|
|
||||||
/* 3: re-attach to previous parent */
|
/* 3: re-attach to previous parent */
|
||||||
@ -44,6 +45,8 @@ void toggle_floating_mode(Con *con, bool automatic) {
|
|||||||
TAILQ_INSERT_TAIL(&(con->parent->nodes_head), con, nodes);
|
TAILQ_INSERT_TAIL(&(con->parent->nodes_head), con, nodes);
|
||||||
TAILQ_INSERT_TAIL(&(con->parent->focus_head), con, focused);
|
TAILQ_INSERT_TAIL(&(con->parent->focus_head), con, focused);
|
||||||
|
|
||||||
|
con->floating = FLOATING_USER_OFF;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,6 +75,7 @@ void toggle_floating_mode(Con *con, bool automatic) {
|
|||||||
nc->orientation = NO_ORIENTATION;
|
nc->orientation = NO_ORIENTATION;
|
||||||
nc->type = CT_FLOATING_CON;
|
nc->type = CT_FLOATING_CON;
|
||||||
TAILQ_INSERT_TAIL(&(nc->parent->floating_head), nc, floating_windows);
|
TAILQ_INSERT_TAIL(&(nc->parent->floating_head), nc, floating_windows);
|
||||||
|
TAILQ_INSERT_TAIL(&(nc->parent->focus_head), nc, focused);
|
||||||
|
|
||||||
/* 3: attach the child to the new parent container */
|
/* 3: attach the child to the new parent container */
|
||||||
con->old_parent = con->parent;
|
con->old_parent = con->parent;
|
||||||
|
Loading…
Reference in New Issue
Block a user