mirror of
https://github.com/cage-kiosk/cage.git
synced 2025-10-29 05:40:19 -04:00
Add option to allow changing VT
Code that does the VT switch taken from sway.
This commit is contained in:
parent
bd961db6f5
commit
79992f39f3
3 changed files with 28 additions and 13 deletions
21
cage.c
21
cage.c
|
|
@ -192,6 +192,7 @@ usage(FILE *file, const char *cage)
|
|||
" -m extend Extend the display across all connected outputs (default)\n"
|
||||
" -m last Use only the last connected output\n"
|
||||
" -r\t Rotate the output 90 degrees clockwise, specify up to three times\n"
|
||||
" -s\t Allow VT switching\n"
|
||||
" -v\t Show the version number and exit\n"
|
||||
"\n"
|
||||
" Use -- when you want to pass arguments to APPLICATION\n",
|
||||
|
|
@ -203,9 +204,9 @@ parse_args(struct cg_server *server, int argc, char *argv[])
|
|||
{
|
||||
int c;
|
||||
#ifdef DEBUG
|
||||
while ((c = getopt(argc, argv, "dDhm:rv")) != -1) {
|
||||
while ((c = getopt(argc, argv, "dDhm:rsv")) != -1) {
|
||||
#else
|
||||
while ((c = getopt(argc, argv, "dhm:rv")) != -1) {
|
||||
while ((c = getopt(argc, argv, "dhm:rsv")) != -1) {
|
||||
#endif
|
||||
switch (c) {
|
||||
case 'd':
|
||||
|
|
@ -232,6 +233,9 @@ parse_args(struct cg_server *server, int argc, char *argv[])
|
|||
server->output_transform = WL_OUTPUT_TRANSFORM_NORMAL;
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
server->allow_vt_switch = true;
|
||||
break;
|
||||
case 'v':
|
||||
fprintf(stdout, "Cage version " CAGE_VERSION "\n");
|
||||
exit(0);
|
||||
|
|
@ -257,7 +261,6 @@ main(int argc, char *argv[])
|
|||
struct wl_event_source *sigint_source = NULL;
|
||||
struct wl_event_source *sigterm_source = NULL;
|
||||
struct wl_event_source *sigchld_source = NULL;
|
||||
struct wlr_backend *backend = NULL;
|
||||
struct wlr_renderer *renderer = NULL;
|
||||
struct wlr_compositor *compositor = NULL;
|
||||
struct wlr_data_device_manager *data_device_manager = NULL;
|
||||
|
|
@ -301,8 +304,8 @@ main(int argc, char *argv[])
|
|||
sigint_source = wl_event_loop_add_signal(event_loop, SIGINT, handle_signal, &server.wl_display);
|
||||
sigterm_source = wl_event_loop_add_signal(event_loop, SIGTERM, handle_signal, &server.wl_display);
|
||||
|
||||
backend = wlr_backend_autocreate(server.wl_display, NULL);
|
||||
if (!backend) {
|
||||
server.backend = wlr_backend_autocreate(server.wl_display, NULL);
|
||||
if (!server.backend) {
|
||||
wlr_log(WLR_ERROR, "Unable to create the wlroots backend");
|
||||
ret = 1;
|
||||
goto end;
|
||||
|
|
@ -313,7 +316,7 @@ main(int argc, char *argv[])
|
|||
goto end;
|
||||
}
|
||||
|
||||
renderer = wlr_backend_get_renderer(backend);
|
||||
renderer = wlr_backend_get_renderer(server.backend);
|
||||
wlr_renderer_init_wl_display(renderer, server.wl_display);
|
||||
|
||||
wl_list_init(&server.views);
|
||||
|
|
@ -344,9 +347,9 @@ main(int argc, char *argv[])
|
|||
* available on the backend. We use this only to detect the
|
||||
* first output and ignore subsequent outputs. */
|
||||
server.new_output.notify = handle_new_output;
|
||||
wl_signal_add(&backend->events.new_output, &server.new_output);
|
||||
wl_signal_add(&server.backend->events.new_output, &server.new_output);
|
||||
|
||||
server.seat = seat_create(&server, backend);
|
||||
server.seat = seat_create(&server, server.backend);
|
||||
if (!server.seat) {
|
||||
wlr_log(WLR_ERROR, "Unable to create the seat");
|
||||
ret = 1;
|
||||
|
|
@ -467,7 +470,7 @@ main(int argc, char *argv[])
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (!wlr_backend_start(backend)) {
|
||||
if (!wlr_backend_start(server.backend)) {
|
||||
wlr_log(WLR_ERROR, "Unable to start the wlroots backend");
|
||||
ret = 1;
|
||||
goto end;
|
||||
|
|
|
|||
18
seat.c
18
seat.c
|
|
@ -12,6 +12,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/backend/multi.h>
|
||||
#include <wlr/types/wlr_cursor.h>
|
||||
#include <wlr/types/wlr_data_device.h>
|
||||
#include <wlr/types/wlr_idle.h>
|
||||
|
|
@ -225,13 +226,22 @@ handle_modifier_event(struct wlr_input_device *device, struct cg_seat *seat)
|
|||
static bool
|
||||
handle_keybinding(struct cg_server *server, xkb_keysym_t sym)
|
||||
{
|
||||
switch (sym) {
|
||||
#ifdef DEBUG
|
||||
case XKB_KEY_Escape:
|
||||
if (sym == XKB_KEY_Escape) {
|
||||
wl_display_terminate(server->wl_display);
|
||||
break;
|
||||
} else
|
||||
#endif
|
||||
default:
|
||||
if (server->allow_vt_switch && sym >= XKB_KEY_XF86Switch_VT_1
|
||||
&& sym <= XKB_KEY_XF86Switch_VT_12) {
|
||||
if (wlr_backend_is_multi(server->backend)) {
|
||||
struct wlr_session *session =
|
||||
wlr_backend_get_session(server->backend);
|
||||
if (session) {
|
||||
unsigned vt = sym - XKB_KEY_XF86Switch_VT_1 + 1;
|
||||
wlr_session_change_vt(session, vt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
wlr_idle_notify_activity(server->idle, server->seat->seat);
|
||||
|
|
|
|||
2
server.h
2
server.h
|
|
@ -24,6 +24,7 @@ enum cg_multi_output_mode {
|
|||
struct cg_server {
|
||||
struct wl_display *wl_display;
|
||||
struct wl_list views;
|
||||
struct wlr_backend *backend;
|
||||
|
||||
struct cg_seat *seat;
|
||||
struct wlr_idle *idle;
|
||||
|
|
@ -45,6 +46,7 @@ struct cg_server {
|
|||
#endif
|
||||
|
||||
bool xdg_decoration;
|
||||
bool allow_vt_switch;
|
||||
enum wl_output_transform output_transform;
|
||||
#ifdef DEBUG
|
||||
bool debug_damage_tracking;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue