From decd87043fbe2dfef3b664455298b68604ee0485 Mon Sep 17 00:00:00 2001 From: Versus Void Date: Fri, 6 Oct 2017 09:41:50 +0300 Subject: [PATCH] Add config option to disable Xwayland --- include/rootston/config.h | 1 + rootston/config.c | 16 +++++++++++++++- rootston/desktop.c | 12 +++++++----- rootston/rootston.ini.example | 4 ++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/include/rootston/config.h b/include/rootston/config.h index 545b67429..66347c3ca 100644 --- a/include/rootston/config.h +++ b/include/rootston/config.h @@ -27,6 +27,7 @@ struct binding_config { }; struct roots_config { + bool xwayland; // TODO: Multiple cursors, multiseat struct { char *mapped_output; diff --git a/rootston/config.c b/rootston/config.c index d454c2d9a..4918c8dd6 100644 --- a/rootston/config.c +++ b/rootston/config.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -114,7 +115,19 @@ static const char *device_prefix = "device:"; static int config_ini_handler(void *user, const char *section, const char *name, const char *value) { struct roots_config *config = user; - if (strncmp(output_prefix, section, strlen(output_prefix)) == 0) { + if (strcmp(section, "core") == 0) { + if (strcmp(name, "xwayland") == 0) { + if (strcasecmp(value, "true") == 0) { + config->xwayland = true; + } else if (strcasecmp(value, "false") == 0) { + config->xwayland = false; + } else { + wlr_log(L_ERROR, "got unknown xwayland value: %s", value); + } + } else { + wlr_log(L_ERROR, "got unknown core config: %s", name); + } + } else if (strncmp(output_prefix, section, strlen(output_prefix)) == 0) { const char *output_name = section + strlen(output_prefix); struct output_config *oc; bool found = false; @@ -251,6 +264,7 @@ static int config_ini_handler(void *user, const char *section, const char *name, struct roots_config *parse_args(int argc, char *argv[]) { struct roots_config *config = calloc(1, sizeof(struct roots_config)); + config->xwayland = true; wl_list_init(&config->outputs); wl_list_init(&config->devices); wl_list_init(&config->bindings); diff --git a/rootston/desktop.c b/rootston/desktop.c index f99afaf56..5e85fb324 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -159,11 +159,13 @@ struct roots_desktop *desktop_create(struct roots_server *server, &desktop->wl_shell_surface); desktop->wl_shell_surface.notify = handle_wl_shell_surface; - desktop->xwayland = wlr_xwayland_create(server->wl_display, - desktop->compositor); - wl_signal_add(&desktop->xwayland->events.new_surface, - &desktop->xwayland_surface); - desktop->xwayland_surface.notify = handle_xwayland_surface; + if (config->xwayland) { + desktop->xwayland = wlr_xwayland_create(server->wl_display, + desktop->compositor); + wl_signal_add(&desktop->xwayland->events.new_surface, + &desktop->xwayland_surface); + desktop->xwayland_surface.notify = handle_xwayland_surface; + } desktop->gamma_control_manager = wlr_gamma_control_manager_create( server->wl_display); diff --git a/rootston/rootston.ini.example b/rootston/rootston.ini.example index 9960cae14..cc7d8baa5 100644 --- a/rootston/rootston.ini.example +++ b/rootston/rootston.ini.example @@ -1,3 +1,7 @@ +[core] +# Disable X11 support. Enabled by default. +xwayland=false + # Single output configuration. String after semicolon must match output's name. [output:VGA-1] # Set logical (layout) coordinates for this screen