aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2015-08-06 08:40:16 -0400
committerDrew DeVault <sir@cmpwn.com>2015-08-06 08:40:16 -0400
commitc102f184994638155248991e50a7a8ae5c620c91 (patch)
tree2ee8ed6f0bf7e9a7249ff0a49fe83d8999fd01a1
parent82bc36c6812b24fca27c2ec176e2c2998e4df6d5 (diff)
downloadsway-c102f184994638155248991e50a7a8ae5c620c91.tar.xz
Add layout containers for new outputs
-rw-r--r--sway/handlers.c1
-rw-r--r--sway/layout.c38
-rw-r--r--sway/layout.h16
-rw-r--r--sway/main.c2
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 = {