diff --git a/config.c b/config.c index 62a060c0..19377b8a 100644 --- a/config.c +++ b/config.c @@ -58,8 +58,14 @@ static const char *binding_action_map[] = { [BIND_ACTION_FONT_SIZE_DOWN] = "font-decrease", [BIND_ACTION_FONT_SIZE_RESET] = "font-reset", [BIND_ACTION_SPAWN_TERMINAL] = "spawn-terminal", + [BIND_ACTION_MINIMIZE] = "minimize", + [BIND_ACTION_MAXIMIZE] = "maximize", + [BIND_ACTION_FULLSCREEN] = "fullscreen", }; +static_assert(ALEN(binding_action_map) == BIND_ACTION_COUNT, + "binding action map size mismatch"); + static char * get_shell(void) { diff --git a/doc/foot.5.scd b/doc/foot.5.scd index 2946ddc8..5c8becdf 100644 --- a/doc/foot.5.scd +++ b/doc/foot.5.scd @@ -194,6 +194,15 @@ Note that _Alt_ is usually called *Mod1*. *spawn-terminal* Spawns a new terminal. Default: _Control+Shift+Return_. +*minimize* + Minimizes the window. Default: _not bound_. + +*maximize* + Toggle the maximized state. Default: _not bound_. + +*fullscreen* + Toggles the fullscreen state. Default: _not bound_. + # FONT FORMAT The font is specified in FontConfig syntax. That is, a colon-separated diff --git a/footrc b/footrc index 60b2d516..468bc67d 100644 --- a/footrc +++ b/footrc @@ -53,3 +53,6 @@ # font-decrease=Control+minus Control+KP_Subtract # font-reset=Control+0 Control+KP_0 # spawn-terminal=Control+Shift+Return +# # minimize= +# # maximize= +# # fullscreen= diff --git a/input.c b/input.c index 96de8160..399d9d26 100644 --- a/input.c +++ b/input.c @@ -78,6 +78,24 @@ input_execute_binding(struct terminal *term, enum binding_action action, term_spawn_new(term); break; + case BIND_ACTION_MINIMIZE: + xdg_toplevel_set_minimized(term->window->xdg_toplevel); + break; + + case BIND_ACTION_MAXIMIZE: + if (term->window->is_maximized) + xdg_toplevel_unset_maximized(term->window->xdg_toplevel); + else + xdg_toplevel_set_maximized(term->window->xdg_toplevel); + break; + + case BIND_ACTION_FULLSCREEN: + if (term->window->is_fullscreen) + xdg_toplevel_unset_fullscreen(term->window->xdg_toplevel); + else + xdg_toplevel_set_fullscreen(term->window->xdg_toplevel, NULL); + break; + case BIND_ACTION_COUNT: assert(false); break; diff --git a/wayland.h b/wayland.h index bf765f04..a824c21f 100644 --- a/wayland.h +++ b/wayland.h @@ -52,6 +52,9 @@ enum binding_action { BIND_ACTION_FONT_SIZE_DOWN, BIND_ACTION_FONT_SIZE_RESET, BIND_ACTION_SPAWN_TERMINAL, + BIND_ACTION_MINIMIZE, + BIND_ACTION_MAXIMIZE, + BIND_ACTION_FULLSCREEN, BIND_ACTION_COUNT, };