mirror of
https://github.com/swaywm/sway.git
synced 2026-05-03 06:46:26 -04:00
basic backend commands
This commit is contained in:
parent
5648a51805
commit
997c70a035
7 changed files with 111 additions and 8 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
23
sway/commands/backend.c
Normal 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;
|
||||||
|
}
|
||||||
38
sway/commands/backend/add.c
Normal file
38
sway/commands/backend/add.c
Normal 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);
|
||||||
|
}
|
||||||
19
sway/commands/backend/del.c
Normal file
19
sway/commands/backend/del.c
Normal 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);
|
||||||
|
}
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue