From: Michael Stapelberg Date: Tue, 1 Jun 2010 21:20:57 +0000 (+0200) Subject: parser: implement 'layout' X-Git-Tag: tree-pr1~195 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cea8f91e18660f30c2c81a6ef4600c3f757e6fd7;p=i3%2Fi3 parser: implement 'layout' --- diff --git a/src/cmdparse.l b/src/cmdparse.l index 0102d145..8850ff64 100644 --- a/src/cmdparse.l +++ b/src/cmdparse.l @@ -88,6 +88,7 @@ global { return TOK_GLOBAL; } layout { return TOK_LAYOUT; } default { return TOK_DEFAULT; } stacked { return TOK_STACKED; } +stacking { return TOK_STACKED; } tabbed { return TOK_TABBED; } border { return TOK_BORDER; } none { return TOK_NONE; } diff --git a/src/cmdparse.y b/src/cmdparse.y index 40fd65af..51690a59 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -252,8 +252,8 @@ operation: | restart /*| reload | mark - | layout | border */ + | layout | restore | move | workspace @@ -466,3 +466,28 @@ restore: tree_append_json($3); } ; + +layout: + TOK_LAYOUT WHITESPACE layout_mode + { + printf("changing layout to %d\n", $3); + owindow *current; + + /* check if the match is empty, not if the result is empty */ + if (match_is_empty(¤t_match)) + focused->layout = $3; + else { + TAILQ_FOREACH(current, &owindows, owindows) { + printf("matching: %p / %s\n", current->con, current->con->name); + current->con->layout = $3; + } + } + + } + ; + +layout_mode: + TOK_DEFAULT { $$ = L_DEFAULT; } + | TOK_STACKED { $$ = L_STACKED; } + | TOK_TABBED { $$ = L_TABBED; } + ; diff --git a/src/render.c b/src/render.c index c0dbdd5f..51e0fc26 100644 --- a/src/render.c +++ b/src/render.c @@ -124,7 +124,8 @@ void render_con(Con *con) { /* in a stacking container, we ensure the focused client is raised */ if (con->layout == L_STACKED) { Con *foc = TAILQ_FIRST(&(con->focus_head)); - x_raise_con(foc); + if (foc != TAILQ_END(&(con->focus_head))) + x_raise_con(foc); } TAILQ_FOREACH(child, &(con->floating_head), floating_windows) {