From e505abfe75923d06098f6230e5a7ba39c091d3ce Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 13 Sep 2015 19:46:16 -0400 Subject: Revert "new_workspace null behavior + testmap functions + regex" This reverts commit e1d18e42a8f3a597b9bf5f1bb2ab6c346e4e7983. Fixes #180 cc @taiyu-len --- include/container.h | 139 +++++++++++++++++----------------------------------- 1 file changed, 45 insertions(+), 94 deletions(-) (limited to 'include/container.h') diff --git a/include/container.h b/include/container.h index b164af95..ae9a9fc5 100644 --- a/include/container.h +++ b/include/container.h @@ -2,25 +2,29 @@ #define _SWAY_CONTAINER_H #include typedef struct sway_container swayc_t; + #include "layout.h" -enum swayc_types { - C_ROOT = 1 << 0, - C_OUTPUT = 1 << 1, - C_WORKSPACE = 1 << 2, - C_CONTAINER = 1 << 3, - C_VIEW = 1 << 4, - C_TYPES = 5, +enum swayc_types{ + C_ROOT, + C_OUTPUT, + C_WORKSPACE, + C_CONTAINER, + C_VIEW, + // Keep last + C_TYPES, }; -enum swayc_layouts { - L_NONE = 1 << 0, - L_HORIZ = 1 << 1, - L_VERT = 1 << 2, - L_STACKED = 1 << 3, - L_TABBED = 1 << 4, - L_FLOATING = 1 << 5, - L_LAYOUTS = 6, + +enum swayc_layouts{ + L_NONE, + L_HORIZ, + L_VERT, + L_STACKED, + L_TABBED, + L_FLOATING, + // Keep last + L_LAYOUTS, }; struct sway_container { @@ -31,16 +35,13 @@ struct sway_container { // Not including borders or margins double width, height; - double x, y; // Used for setting floating geometry int desired_width, desired_height; - enum visibility_mask { - INVISIBLE = false, - VISIBLE = true, - } visible; + double x, y; + bool visible; bool is_floating; bool is_focused; @@ -55,120 +56,70 @@ struct sway_container { struct sway_container *focused; }; -// swayc Creation +enum visibility_mask { + VISIBLE = true +} visible; -/* Creates and returns new, or an already created output. - * If it creates a new output, it also creates a workspace using - * `new_workspace(outputname, NULL);` */ -swayc_t *new_output(wlc_handle handle); +// Container Creation -/* Creates workspace with given name, under given output. - * If workspace with that name already exists, returns that workspace - * If name is NULL, it will choose a name automatically. - * If output is NULL, it will choose an output automatically. */ +swayc_t *new_output(wlc_handle handle); swayc_t *new_workspace(swayc_t *output, const char *name); - // Creates container Around child (parent child) -> (parent (container child)) swayc_t *new_container(swayc_t *child, enum swayc_layouts layout); - // Creates view as a sibling of current focused container, or as child of a workspace swayc_t *new_view(swayc_t *sibling, wlc_handle handle); - // Creates view as a new floating view which is in the active workspace swayc_t *new_floating_view(wlc_handle handle); // Container Destroying -// Destroys output and moves workspaces to another output -swayc_t *destroy_output(swayc_t *output); +swayc_t *destroy_output(swayc_t *output); // Destroys workspace if empty and returns parent pointer, else returns NULL swayc_t *destroy_workspace(swayc_t *workspace); - // Destroyes container and all parent container if they are empty, returns // topmost non-empty parent. returns NULL otherwise swayc_t *destroy_container(swayc_t *container); - // Destroys view and all empty parent containers. return topmost non-empty // parent swayc_t *destroy_view(swayc_t *view); -// Container Mapping and testing functions -typedef bool swayc_test_func(swayc_t *view, void *data); -typedef void swayc_map_func(swayc_t *view, void *data); - -// Returns the first swayc that matches test() -swayc_t *swayc_by_test_r(swayc_t *root, swayc_test_func test, void *data); -swayc_t *swayc_by_test(swayc_test_func test, void *data); - -// Calls func for all children. -void swayc_map_r(swayc_t *root, swayc_map_func func, void *data); -void swayc_map(swayc_map_func func, void *data); - - -// Call func on container if test passes -void swayc_map_by_test_r(swayc_t *root, - swayc_map_func func, swayc_test_func test, - void *funcdata, void *testdata); -void swayc_map_by_test( - swayc_map_func func, swayc_test_func test, - void *funcdata, void *testdata); - -// Map functions -swayc_map_func set_gaps; -swayc_map_func add_gaps; - -// Test functions -// generic swayc tests -swayc_test_func test_name; -swayc_test_func test_name_regex; -swayc_test_func test_layout; -swayc_test_func test_type; -swayc_test_func test_visibility; -swayc_test_func test_handle; - -// C_VIEW tests -// See wlc_view_*_bit enums -swayc_test_func test_view_state; -swayc_test_func test_view_type; -swayc_test_func test_view_title; -swayc_test_func test_view_class; -swayc_test_func test_view_appid; -swayc_test_func test_view_title_regex; -swayc_test_func test_view_class_regex; -swayc_test_func test_view_appid_regex; - -// functions for test_*_regex -void *compile_regex(const char *regex); -void free_regex(void *); - -// these take a NULL terminated array of test_list struct. -struct test_list { swayc_test_func *test; void *data ; }; -swayc_test_func test_and; -swayc_test_func test_or; +// Container Lookup +swayc_t *swayc_by_test(swayc_t *container, bool (*test)(swayc_t *view, void *data), void *data); swayc_t *swayc_parent_by_type(swayc_t *container, enum swayc_types); swayc_t *swayc_parent_by_layout(swayc_t *container, enum swayc_layouts); // Follow focused until type/layout swayc_t *swayc_focus_by_type(swayc_t *container, enum swayc_types); swayc_t *swayc_focus_by_layout(swayc_t *container, enum swayc_layouts); + +swayc_t *swayc_by_handle(wlc_handle handle); +swayc_t *swayc_by_name(const char *name); swayc_t *swayc_active_output(void); swayc_t *swayc_active_workspace(void); swayc_t *swayc_active_workspace_for(swayc_t *view); // Container information -// if `parent` is the parent of `child` + +bool swayc_is_fullscreen(swayc_t *view); +bool swayc_is_active(swayc_t *view); +// Is `parent` the parent of `child` bool swayc_is_parent_of(swayc_t *parent, swayc_t *child); -// If `child` is a child of `parent` +// Is `child` a child of `parent` bool swayc_is_child_of(swayc_t *child, swayc_t *parent); // Return gap of specified container int swayc_gap(swayc_t *container); -bool swayc_is_fullscreen(swayc_t *view); -bool swayc_is_active(swayc_t *view); +// Mapping functions + +void container_map(swayc_t *, void (*f)(swayc_t *, void *), void *); +// Mappings +void set_view_visibility(swayc_t *view, void *data); +// Set or add to gaps +void set_gaps(swayc_t *view, void *amount); +void add_gaps(swayc_t *view, void *amount); -// Specialized mapping functions void update_visibility(swayc_t *container); #endif -- cgit v1.2.3