diff options
author | Drew DeVault <sir@cmpwn.com> | 2015-08-06 08:40:16 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2015-08-06 08:40:16 -0400 |
commit | c102f184994638155248991e50a7a8ae5c620c91 (patch) | |
tree | 2ee8ed6f0bf7e9a7249ff0a49fe83d8999fd01a1 | |
parent | 82bc36c6812b24fca27c2ec176e2c2998e4df6d5 (diff) | |
download | sway-c102f184994638155248991e50a7a8ae5c620c91.tar.xz |
Add layout containers for new outputs
-rw-r--r-- | sway/handlers.c | 1 | ||||
-rw-r--r-- | sway/layout.c | 38 | ||||
-rw-r--r-- | sway/layout.h | 16 | ||||
-rw-r--r-- | sway/main.c | 2 |
4 files changed, 55 insertions, 2 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index d6d30b71..9bf3f964 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -5,6 +5,7 @@ #include "handlers.h" bool handle_output_created(wlc_handle output) { + add_output(output); return true; } diff --git a/sway/layout.c b/sway/layout.c index aeb8167e..e61094e2 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -1,8 +1,46 @@ #include <stdlib.h> #include <stdbool.h> #include <wlc/wlc.h> +#include "list.h" #include "layout.h" +list_t *outputs; + +void init_layout() { + outputs = create_list(); +} + +struct sway_container *get_container(wlc_handle output, int *index) { + int i; + for (i = 0; i < outputs->length; ++i) { + struct sway_container *c = outputs->items[i]; + if (c->output == output) { + return c; + } + } + return NULL; +} + +void add_output(wlc_handle output) { + struct sway_container *container = malloc(sizeof(struct sway_container)); + // TODO: Get default layout from config + container->output = output; + container->children = create_list(); + container->layout = LAYOUT_TILE_HORIZ; + list_add(outputs, container); +} + +void destroy_output(wlc_handle output) { + int index; + struct sway_container *c = get_container(output, &index); + // TODO: Move all windows in this output somewhere else? + // I don't think this will ever be called unless we destroy the output ourselves + if (!c) { + return; + } + list_del(outputs, index); +} + wlc_handle get_topmost(wlc_handle output, size_t offset) { size_t memb; const wlc_handle *views = wlc_output_get_views(output, &memb); diff --git a/sway/layout.h b/sway/layout.h index a6fb35a7..24d214d8 100644 --- a/sway/layout.h +++ b/sway/layout.h @@ -4,11 +4,23 @@ #include <wlc/wlc.h> #include "list.h" +typedef enum { + LAYOUT_TILE_HORIZ, + LAYOUT_TILE_VERT, + LAYOUT_TABBED, + LAYOUT_STACKED +} container_layout_t; + struct sway_container { - wlc_handle output; // May be NULL - list_t children; + wlc_handle output; + list_t *children; + container_layout_t layout; }; +extern list_t *outputs; + +void init_layout(); +void add_output(wlc_handle output); wlc_handle get_topmost(wlc_handle output, size_t offset); #endif diff --git a/sway/main.c b/sway/main.c index 303d2776..3a6c3f9d 100644 --- a/sway/main.c +++ b/sway/main.c @@ -2,6 +2,7 @@ #include <stdlib.h> #include <stdbool.h> #include <wlc/wlc.h> +#include "layout.h" #include "config.h" #include "handlers.h" @@ -27,6 +28,7 @@ void load_config() { int main(int argc, char **argv) { load_config(); + init_layout(); static struct wlc_interface interface = { .output = { |