basic backend commands

This commit is contained in:
Tony Crisci 2017-12-22 07:17:11 -05:00
parent 5648a51805
commit 997c70a035
7 changed files with 111 additions and 8 deletions

View file

@ -111,6 +111,7 @@ sway_cmd cmd_hide_edge_borders;
sway_cmd cmd_include; sway_cmd cmd_include;
sway_cmd cmd_input; sway_cmd cmd_input;
sway_cmd cmd_seat; sway_cmd cmd_seat;
sway_cmd cmd_backend;
sway_cmd cmd_ipc; sway_cmd cmd_ipc;
sway_cmd cmd_kill; sway_cmd cmd_kill;
sway_cmd cmd_layout; sway_cmd cmd_layout;
@ -143,6 +144,9 @@ sway_cmd cmd_workspace;
sway_cmd cmd_ws_auto_back_and_forth; sway_cmd cmd_ws_auto_back_and_forth;
sway_cmd cmd_workspace_layout; sway_cmd cmd_workspace_layout;
sway_cmd backend_cmd_add;
sway_cmd backend_cmd_del;
sway_cmd bar_cmd_activate_button; sway_cmd bar_cmd_activate_button;
sway_cmd bar_cmd_binding_mode_indicator; sway_cmd bar_cmd_binding_mode_indicator;
sway_cmd bar_cmd_bindsym; sway_cmd bar_cmd_bindsym;

View file

@ -127,6 +127,7 @@ struct cmd_results *add_color(const char *name, char *buffer, const char *color)
/* Keep alphabetized */ /* Keep alphabetized */
static struct cmd_handler handlers[] = { static struct cmd_handler handlers[] = {
{ "backend", cmd_backend },
{ "exec", cmd_exec }, { "exec", cmd_exec },
{ "exec_always", cmd_exec_always }, { "exec_always", cmd_exec_always },
{ "exit", cmd_exit }, { "exit", cmd_exit },

23
sway/commands/backend.c Normal file
View file

@ -0,0 +1,23 @@
#include <strings.h>
#include "sway/commands.h"
#include "log.h"
struct cmd_results *cmd_backend(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "backend", EXPECTED_AT_LEAST, 2))) {
return error;
}
int argc_new = argc-1;
char **argv_new = argv+1;
struct cmd_results *res;
if (strcasecmp("add", argv[0]) == 0) {
res = backend_cmd_add(argc_new, argv_new);
} else if (strcasecmp("del", argv[0]) == 0) {
res = backend_cmd_del(argc_new, argv_new);
} else {
res = cmd_results_new(CMD_INVALID, "backend <cmd> [args]", "Unknown command %s", argv[1]);
}
return res;
}

View file

@ -0,0 +1,38 @@
#define _XOPEN_SOURCE 700
#include <string.h>
#include <strings.h>
#include "sway/commands.h"
#include "sway/config.h"
#include "sway/server.h"
#include "log.h"
#include "stringop.h"
struct cmd_results *backend_cmd_add(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "add", EXPECTED_AT_LEAST, 1))) {
return error;
}
const char *type_name = argv[0];
enum sway_subbackend_type type;
if (strcasecmp(type_name, "wayland") == 0) {
type = SWAY_SUBBACKEND_WAYLAND;
} else if (strcasecmp(type_name, "x11") == 0) {
type = SWAY_SUBBACKEND_X11;
} else if (strcasecmp(type_name, "drm") == 0) {
type = SWAY_SUBBACKEND_DRM;
} else if (strcasecmp(type_name, "headless") == 0) {
type = SWAY_SUBBACKEND_HEADLESS;
} else {
error =
cmd_results_new(CMD_INVALID,
"add", "Expected 'add <wayland|x11|drm|headless>'");
return error;
}
struct sway_subbackend *subbackend =
sway_subbackend_create(type, NULL);
sway_server_add_subbackend(&server, subbackend);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}

View file

@ -0,0 +1,19 @@
#define _XOPEN_SOURCE 700
#include <string.h>
#include <strings.h>
#include "sway/commands.h"
#include "sway/config.h"
#include "sway/server.h"
#include "log.h"
#include "stringop.h"
struct cmd_results *backend_cmd_del(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "del", EXPECTED_AT_LEAST, 1))) {
return error;
}
sway_server_remove_subbackend(&server, argv[0]);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}

View file

@ -6,6 +6,9 @@ sway_sources = files(
'input/seat.c', 'input/seat.c',
'input/cursor.c', 'input/cursor.c',
'input/keyboard.c', 'input/keyboard.c',
'commands/backend.c',
'commands/backend/add.c',
'commands/backend/del.c',
'commands/exit.c', 'commands/exit.c',
'commands/exec.c', 'commands/exec.c',
'commands/exec_always.c', 'commands/exec_always.c',

View file

@ -6,6 +6,8 @@
#include <wlr/backend.h> #include <wlr/backend.h>
#include <wlr/backend/session.h> #include <wlr/backend/session.h>
#include <wlr/backend/multi.h> #include <wlr/backend/multi.h>
#include <wlr/backend/wayland.h>
#include <wlr/backend/headless.h>
#include <wlr/render.h> #include <wlr/render.h>
#include <wlr/render/gles2.h> #include <wlr/render/gles2.h>
#include <wlr/types/wlr_compositor.h> #include <wlr/types/wlr_compositor.h>
@ -123,22 +125,34 @@ static void handle_subbackend_backend_destroy(struct wl_listener *listener,
sway_subbackend_destroy(subbackend); sway_subbackend_destroy(subbackend);
} }
static struct wlr_backend *wayland_backend_create() { static struct wlr_backend *wayland_backend_create(struct sway_server *server) {
sway_log(L_DEBUG, "TODO: create wayland backend"); sway_log(L_DEBUG, "TODO: create wayland backend");
return NULL; return NULL;
/*
struct wlr_backend *backend =
wlr_wl_backend_create(server->wl_display);
wlr_wl_output_create(backend);
return backend;
*/
} }
static struct wlr_backend *x11_backend_create() { static struct wlr_backend *x11_backend_create(struct sway_server *server) {
sway_log(L_DEBUG, "TODO: create x11 backend"); sway_log(L_DEBUG, "TODO: create x11 backend");
return NULL; return NULL;
} }
static struct wlr_backend *headless_backend_create() { static struct wlr_backend *headless_backend_create(
struct sway_server *server) {
sway_log(L_DEBUG, "TODO: create headless backend"); sway_log(L_DEBUG, "TODO: create headless backend");
return NULL; return NULL;
/*
struct wlr_backend *backend =
wlr_headless_backend_create(server->wl_display);
return backend;
*/
} }
static struct wlr_backend *drm_backend_create() { static struct wlr_backend *drm_backend_create(struct sway_server *server) {
sway_log(L_DEBUG, "TODO: create drm backend"); sway_log(L_DEBUG, "TODO: create drm backend");
return NULL; return NULL;
} }
@ -149,16 +163,16 @@ void sway_server_add_subbackend(struct sway_server *server,
switch (subbackend->type) { switch (subbackend->type) {
case SWAY_SUBBACKEND_WAYLAND: case SWAY_SUBBACKEND_WAYLAND:
backend = wayland_backend_create(); backend = wayland_backend_create(server);
break; break;
case SWAY_SUBBACKEND_X11: case SWAY_SUBBACKEND_X11:
backend = x11_backend_create(); backend = x11_backend_create(server);
break; break;
case SWAY_SUBBACKEND_DRM: case SWAY_SUBBACKEND_DRM:
backend = drm_backend_create(); backend = drm_backend_create(server);
break; break;
case SWAY_SUBBACKEND_HEADLESS: case SWAY_SUBBACKEND_HEADLESS:
backend = headless_backend_create(); backend = headless_backend_create(server);
break; break;
} }
@ -175,6 +189,7 @@ void sway_server_add_subbackend(struct sway_server *server,
subbackend->backend_destroy.notify = handle_subbackend_backend_destroy; subbackend->backend_destroy.notify = handle_subbackend_backend_destroy;
wlr_multi_backend_add(server->backend, backend); wlr_multi_backend_add(server->backend, backend);
wlr_backend_start(backend);
} }
void sway_server_remove_subbackend(struct sway_server *server, char *name) { void sway_server_remove_subbackend(struct sway_server *server, char *name) {