5dbbab7bdc
When we have type safety we'll need to have functions for workspace_add_tiling and so on. This means the existing container functions will be just for containers, so they are being moved to container.c. At this point layout.c doesn't contain much else, so I've relocated everything and removed the file. * container_swap and its static functions have been moved to the swap command and made static. * container_recursive_resize has been moved to the resize command and made static. * The following have been moved to container.c: * container_handle_fullscreen_reparent * container_insert_child * container_add_sibling * container_add_child * container_remove_child * container_replace_child * container_split * enum movement_direction and sway_dir_to_wlr have been moved to util.c. Side note: Several commands included layout.h which then included root.h. With layout.h gone, root.h has to be included by those commands.
62 lines
1.7 KiB
C
62 lines
1.7 KiB
C
#define _POSIX_C_SOURCE 200809L
|
|
#include <string.h>
|
|
#include "sway/commands.h"
|
|
#include "sway/config.h"
|
|
#include "sway/tree/root.h"
|
|
#include "sway/tree/view.h"
|
|
#include "list.h"
|
|
#include "log.h"
|
|
#include "stringop.h"
|
|
|
|
static void remove_all_marks_iterator(struct sway_container *con, void *data) {
|
|
if (con->type == C_VIEW) {
|
|
view_clear_marks(con->sway_view);
|
|
view_update_marks_textures(con->sway_view);
|
|
}
|
|
}
|
|
|
|
// unmark Remove all marks from all views
|
|
// unmark foo Remove single mark from whichever view has it
|
|
// [criteria] unmark Remove all marks from matched view
|
|
// [criteria] unmark foo Remove single mark from matched view
|
|
|
|
struct cmd_results *cmd_unmark(int argc, char **argv) {
|
|
// Determine the view
|
|
struct sway_view *view = NULL;
|
|
if (config->handler_context.using_criteria) {
|
|
struct sway_container *container =
|
|
config->handler_context.current_container;
|
|
if (container->type != C_VIEW) {
|
|
return cmd_results_new(CMD_INVALID, "unmark",
|
|
"Only views can have marks");
|
|
}
|
|
view = container->sway_view;
|
|
}
|
|
|
|
// Determine the mark
|
|
char *mark = NULL;
|
|
if (argc > 0) {
|
|
mark = join_args(argv, argc);
|
|
}
|
|
|
|
if (view && mark) {
|
|
// Remove the mark from the given view
|
|
if (view_has_mark(view, mark)) {
|
|
view_find_and_unmark(mark);
|
|
}
|
|
} else if (view && !mark) {
|
|
// Clear all marks from the given view
|
|
view_clear_marks(view);
|
|
view_update_marks_textures(view);
|
|
} else if (!view && mark) {
|
|
// Remove mark from whichever view has it
|
|
view_find_and_unmark(mark);
|
|
} else {
|
|
// Remove all marks from all views
|
|
root_for_each_container(remove_all_marks_iterator, NULL);
|
|
}
|
|
free(mark);
|
|
|
|
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
|
|
}
|