diff --git a/debian/patches/regolith-trawl.patch b/debian/patches/regolith-trawl.patch new file mode 100644 index 000000000..b562231ea --- /dev/null +++ b/debian/patches/regolith-trawl.patch @@ -0,0 +1,200 @@ +Index: sway-regolith/include/sway/commands.h +=================================================================== +--- sway-regolith.orig/include/sway/commands.h ++++ sway-regolith/include/sway/commands.h +@@ -172,6 +172,7 @@ sway_cmd cmd_resize; + sway_cmd cmd_scratchpad; + sway_cmd cmd_seamless_mouse; + sway_cmd cmd_set; ++sway_cmd cmd_set_from_resource; + sway_cmd cmd_shortcuts_inhibitor; + sway_cmd cmd_show_marks; + sway_cmd cmd_smart_borders; +Index: sway-regolith/meson.build +=================================================================== +--- sway-regolith.orig/meson.build ++++ sway-regolith/meson.build +@@ -1,5 +1,5 @@ + project( +- 'sway', ++ 'sway-regolith', + 'c', + version: '1.9', + license: 'MIT', +@@ -45,6 +45,27 @@ subproject( + version: wlroots_version, + ) + wlroots = dependency('wlroots', version: wlroots_version) ++xkbcommon = dependency('xkbcommon') ++cairo = dependency('cairo') ++pango = dependency('pango') ++pangocairo = dependency('pangocairo') ++gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf')) ++pixman = dependency('pixman-1') ++glesv2 = dependency('glesv2') ++libevdev = dependency('libevdev') ++libinput = dependency('libinput', version: '>=1.6.0') ++xcb = dependency('xcb', required: get_option('xwayland')) ++drm_full = dependency('libdrm') # only needed for drm_fourcc.h ++drm = drm_full.partial_dependency(compile_args: true, includes: true) ++libudev = dependency('libudev') ++bash_comp = dependency('bash-completion', required: false) ++fish_comp = dependency('fish', required: false) ++math = cc.find_library('m') ++rt = cc.find_library('rt') ++xcb_icccm = dependency('xcb-icccm', required: get_option('xwayland')) ++threads = dependency('threads') # for pthread_setschedparam ++trawldb = dependency('trawldb-0') ++ + wlroots_features = { + 'xwayland': false, + 'libinput_backend': false, +@@ -248,7 +269,7 @@ configure_file( + ) + + install_data( +- 'sway.desktop', ++ 'sway-regolith.desktop', + install_dir: join_paths(datadir, 'wayland-sessions') + ) + +Index: sway-regolith/sway-regolith.desktop +=================================================================== +--- /dev/null ++++ sway-regolith/sway-regolith.desktop +@@ -0,0 +1,5 @@ ++[Desktop Entry] ++Name=Sway Regolith ++Comment=A sway variant with support for trawl resource manager ++Exec=sway ++Type=Application +Index: sway-regolith/sway/commands.c +=================================================================== +--- sway-regolith.orig/sway/commands.c ++++ sway-regolith/sway/commands.c +@@ -84,6 +84,7 @@ static const struct cmd_handler handlers + { "popup_during_fullscreen", cmd_popup_during_fullscreen }, + { "seat", cmd_seat }, + { "set", cmd_set }, ++ { "set_from_resource", cmd_set_from_resource}, + { "show_marks", cmd_show_marks }, + { "smart_borders", cmd_smart_borders }, + { "smart_gaps", cmd_smart_gaps }, +@@ -279,8 +280,8 @@ list_t *execute_command(char *_exec, str + goto cleanup; + } + +- // Var replacement, for all but first argument of set +- for (int i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { ++ // Var replacement, for all but first argument of set and xresource ++ for (int i = handler->handle == cmd_set || handler->handle == cmd_set_from_resource ? 2 : 1; i < argc; ++i) { + argv[i] = do_var_replacement(argv[i]); + } + +@@ -392,7 +393,7 @@ struct cmd_results *config_command(char + } + + // Do variable replacement +- if (handler->handle == cmd_set && argc > 1 && *argv[1] == '$') { ++ if ((handler->handle == cmd_set || handler->handle == cmd_set_from_resource )&& argc > 1 && *argv[1] == '$') { + // Escape the variable name so it does not get replaced by one shorter + char *temp = calloc(1, strlen(argv[1]) + 2); + temp[0] = '$'; +@@ -407,7 +408,7 @@ struct cmd_results *config_command(char + free(command); + + // Strip quotes and unescape the string +- for (int i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { ++ for (int i = handler->handle == cmd_set || handler->handle == cmd_set_from_resource ? 2 : 1; i < argc; ++i) { + if (handler->handle != cmd_exec && handler->handle != cmd_exec_always + && handler->handle != cmd_mode + && handler->handle != cmd_bindsym +@@ -415,6 +416,7 @@ struct cmd_results *config_command(char + && handler->handle != cmd_bindswitch + && handler->handle != cmd_bindgesture + && handler->handle != cmd_set ++ && handler->handle != cmd_set_from_resource + && handler->handle != cmd_for_window + && (*argv[i] == '\"' || *argv[i] == '\'')) { + strip_quotes(argv[i]); +Index: sway-regolith/sway/commands/set_from_resource.c +=================================================================== +--- /dev/null ++++ sway-regolith/sway/commands/set_from_resource.c +@@ -0,0 +1,47 @@ ++#define _POSIX_C_SOURCE 200809L ++#include "log.h" ++#include "stringop.h" ++#include "sway/commands.h" ++#include "sway/config.h" ++#include ++#include ++#include ++#include ++ ++struct cmd_results *cmd_set_from_resource(int argc, char **argv) { ++ struct cmd_results *error = NULL; ++ if ((error = checkarg(argc, "set", EXPECTED_AT_LEAST, 2))) { ++ return error; ++ } ++ if (argv[0][0] != '$') { ++ return cmd_results_new(CMD_INVALID, "variable '%s' must start with $", ++ argv[0]); ++ } ++ ++ conf_client proxy = NULL; ++ GError *err = NULL; ++ conf_client_init(&proxy, &err); ++ ++ char *resource_value = NULL; ++ conf_client_get(proxy, argv[1], &resource_value, &err); ++ ++ if (err || resource_value == NULL || strlen(resource_value) == 0) { ++ if (argc < 3) { ++ return cmd_results_new(CMD_FAILURE, ++ "failed to fetch value of resource '%s' and " ++ "fallback value not provided", ++ argv[1]); ++ } ++ resource_value = join_args(argv + 2, argc - 2); ++ } ++ char **argv_new = calloc(argc - 1, sizeof(char *)); ++ argv_new[0] = strdup(argv[0]); ++ for (int i = 2; i < argc; i++) { ++ argv_new[i - 1] = argv[i]; ++ } ++ ++ argv_new[1] = strdup(resource_value); ++ ++ free(resource_value); ++ return cmd_set(2, argv_new); ++} +Index: sway-regolith/sway/meson.build +=================================================================== +--- sway-regolith.orig/sway/meson.build ++++ sway-regolith/sway/meson.build +@@ -102,6 +102,7 @@ sway_sources = files( + 'commands/seat/shortcuts_inhibitor.c', + 'commands/seat/xcursor_theme.c', + 'commands/set.c', ++ 'commands/set_from_resource.c', + 'commands/show_marks.c', + 'commands/shortcuts_inhibitor.c', + 'commands/smart_borders.c', +@@ -230,6 +231,7 @@ sway_deps = [ + xkbcommon, + xcb, + xcb_icccm, ++ trawldb, + ] + + if have_xwayland +@@ -241,7 +243,7 @@ if wlroots_features['libinput_backend'] + endif + + executable( +- 'sway', ++ 'sway-regolith', + sway_sources + wl_protos_src, + include_directories: [sway_inc], + dependencies: sway_deps, diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 000000000..8457df631 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +regolith-trawl.patch