Commit eda920e395627606974e1258c85716b06b421eac Parent: 8d6521d17956052473d173e77655a717b19a75b2 Author: mcol <mcol@posteo.net> Date: 2020-11-22 21:53:52 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-11-22 21:53:52 +0000 implement VT switching
src/types.h Modified
@@ -65,6 +65,8 @@ struct wlr_box grab_geobox; uint32_t resize_edges; double zoom_min, zoom_max; + + bool vt_switching; }; struct view {
src/input.c Modified
@@ -219,7 +219,6 @@ if (modifiers == kb->mods) { switch (kb->key) { case MOTION: - printf("MOTION\n"); server->on_mouse_motion = kb->action; break; case SCROLL:
src/config.c Modified
@@ -137,9 +137,10 @@ return; } } - wl_list_insert(bindings, &kb->link); + wl_list_insert(bindings->prev, &kb->link); } + void assign_colour(char *hex, float dest[4]) { if (strlen(hex) != 7 || hex[0] != '#') { wlr_log(WLR_INFO, "Invalid colour: %s. Should be in the form #rrggbb.", hex); @@ -224,6 +225,33 @@ server->zoom_min = 0.5; server->zoom_max = 3; server->reverse_scrolling = false; + server->vt_switching = true; +} + + +static void setup_vt_switching(struct server *server) { + if (!server->vt_switching) + return; + + uint32_t func_keys[] = { + XKB_KEY_F1, + XKB_KEY_F2, + XKB_KEY_F3, + XKB_KEY_F4, + XKB_KEY_F5, + XKB_KEY_F6, + }; + struct binding *kb; + + for (unsigned i = 0; i < 6; i++) { + kb = calloc(1, sizeof(struct binding)); + kb->mods = WLR_MODIFIER_CTRL; + kb->key = func_keys[i]; + kb->action = &change_vt; + kb->data = calloc(1, sizeof(unsigned)); + *(unsigned *)(kb->data) = i + 1; + wl_list_insert(server->key_bindings.prev, &kb->link); + } } @@ -281,7 +309,13 @@ } } else if (!strcasecmp(s, "bind")) { add_binding(server, strtok(NULL, ""), line); + } else if (!strcasecmp(s, "vt_switching")) { + s = strtok(NULL, " \t\n\r"); + if (!strcasecmp(s, "off")) + server->vt_switching = false; } } fclose(fd); + + setup_vt_switching(server); }
src/action.h Modified
@@ -5,6 +5,7 @@ void shutdown(struct server *server, void *data); void exec_command(struct server *server, void *data); +void change_vt(struct server *server, void *data); void close_current_window(struct server *server, void *data); void next_desk(struct server *server, void *data); void prev_desk(struct server *server, void *data);
src/action.c Modified
@@ -1,3 +1,7 @@ +#include <sys/vt.h> +#include <wlr/backend.h> +#include <wlr/backend/session.h> + #include "desk.h" #include "types.h" @@ -14,6 +18,13 @@ } +void change_vt(struct server *server, void *data) { + unsigned vt = *(unsigned*)data; + struct wlr_session *session = wlr_backend_get_session(server->backend); + wlr_session_change_vt(session, vt); +} + + void close_current_window(struct server *server, void *data) { struct wlr_surface *surface = server->seat->keyboard_state.focused_surface; if (surface) {
readme.rst Modified
@@ -24,4 +24,3 @@ - handle fullscreening - pinch gestures for desk zooming - draw rect with mouse when zoomed out to set new view - - handle TTY changing
deskwm.conf Modified
@@ -19,6 +19,9 @@ #zoom_min 0.5 #zoom_max 3 +# Whether to allow VT switching: on or off. +#vt_switching on + ## Bindings @@ -46,6 +49,7 @@ # Scroll direction. Can be one of: natural, reverse #scroll_direction natural + ## Configure desks # Commands until a further desk is added pertain to desk 1.