aboutsummaryrefslogtreecommitdiff
path: root/sway/commands.c
diff options
context:
space:
mode:
authorTaiyu <taiyu.len@gmail.com>2015-08-14 12:42:19 -0700
committerTaiyu <taiyu.len@gmail.com>2015-08-14 12:42:19 -0700
commitb8cba33c013e580e6e793ec67a5442407d94a002 (patch)
treed3a197d4297269716049fa6c09ad59ef350cfff5 /sway/commands.c
parent3a3c50135fabc6a23f7b130effef9b642e54bf3c (diff)
changed swayc related functions, cleaned up some functions, moved wlc related things into handlers
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c93
1 files changed, 71 insertions, 22 deletions
diff --git a/sway/commands.c b/sway/commands.c
index cae35237..a0a95eef 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -228,33 +228,25 @@ static bool cmd_set(struct sway_config *config, int argc, char **argv) {
}
static bool _do_split(struct sway_config *config, int argc, char **argv, int layout) {
- char *name = layout == L_VERT ? "splitv":
- layout == L_HORIZ ? "splith":"split";
+ char *name = layout == L_VERT ? "splitv" :
+ layout == L_HORIZ ? "splith" : "split";
if (!checkarg(argc, name, EXPECTED_EQUAL_TO, 0)) {
return false;
}
swayc_t *focused = get_focused_container(&root_container);
+
+ /* Case that focus is on an empty workspace. change its layout */
if (focused->type == C_WORKSPACE) {
- sway_log(L_DEBUG, "Dont split workspaces");
- if (focused->children->length == 0) {
- focused->layout = layout;
- }
+ focused->layout = layout;
+ return true;
+ }
+ /* Case of no siblings. change parent layout */
+ if (focused->parent->children->length == 1) {
+ focused->parent->layout = layout;
return true;
}
- swayc_t *parent = focused->parent;
- sway_log(L_DEBUG, "Splitting %p vertically with %p", parent, focused);
- int index = remove_container_from_parent(parent, focused);
- swayc_t *new_container = create_container(parent, -1);
- new_container->layout = layout;
- new_container->weight = focused->weight;
- new_container->width = focused->width;
- new_container->height = focused->height;
- new_container->x = focused->x;
- new_container->y = focused->y;
- focused->weight = 1;
- focused->parent = new_container;
- list_insert(parent->children, index, new_container);
- list_add(new_container->children, focused);
+ /* regular case where new split container is build around focused container */
+ swayc_t *parent = new_container(focused, layout);
focus_view(focused);
arrange_windows(parent, -1, -1);
return true;
@@ -302,15 +294,72 @@ static bool cmd_workspace(struct sway_config *config, int argc, char **argv) {
swayc_t *workspace = workspace_find_by_name(argv[0]);
if (!workspace) {
workspace = workspace_create(argv[0]);
- } else sway_log(L_DEBUG, "workspace exists, all ok");
-
+ }
workspace_switch(workspace);
return true;
}
+/* XXX:DEBUG:XXX */
+static void container_log(const swayc_t *c) {
+ fprintf(stderr, "focus:%c|",
+ c == get_focused_container(&root_container) ? 'F' : //Focused
+ c == active_workspace ? 'W' : //active workspace
+ c == &root_container ? 'R' : //root
+ 'X');//not any others
+ fprintf(stderr,"(%p)",c);
+ fprintf(stderr,"(p:%p)",c->parent);
+ fprintf(stderr,"(f:%p)",c->focused);
+ fprintf(stderr,"Type:");
+ fprintf(stderr,
+ c->type == C_ROOT ? "Root|" :
+ c->type == C_OUTPUT ? "Output|" :
+ c->type == C_WORKSPACE ? "Workspace|" :
+ c->type == C_CONTAINER ? "Container|" :
+ c->type == C_VIEW ? "View|" :
+ "Unknown|");
+ fprintf(stderr,"layout:");
+ fprintf(stderr,
+ c->layout == L_NONE ? "NONE|" :
+ c->layout == L_HORIZ ? "Horiz|":
+ c->layout == L_VERT ? "Vert|":
+ c->layout == L_STACKED ? "Stacked|":
+ c->layout == L_FLOATING ? "Floating|":
+ "Unknown|");
+ fprintf(stderr, "w:%d|h:%d|", c->width, c->height);
+ fprintf(stderr, "x:%d|y:%d|", c->x, c->y);
+ fprintf(stderr, "vis:%c|", c->visible?'t':'f');
+ fprintf(stderr, "wgt:%d|", c->weight);
+ fprintf(stderr, "name:%.16s|", c->name);
+ fprintf(stderr, "children:%d\n",c->children?c->children->length:0);
+}
+void layout_log(const swayc_t *c, int depth) {
+ int i;
+ int e = c->children?c->children->length:0;
+ for (i = 0; i < depth; ++i) fputc(' ', stderr);
+ container_log(c);
+ if (e) {
+ for (i = 0; i < depth; ++i) fputc(' ', stderr);
+ fprintf(stderr,"(\n");
+ for (i = 0; i < e; ++i) {
+ layout_log(c->children->items[i], depth + 1);
+ }
+ for (i = 0; i < depth; ++i) fputc(' ', stderr);
+ fprintf(stderr,")\n");
+ }
+}
+bool cmd_debug_print_layout(struct sway_config *config, int argc, char **argv) {
+ fprintf(stderr,"root:%p\nactive workspace:%p\n",&root_container, active_workspace);
+ layout_log(&root_container, 0);
+ return true;
+}
+/* XXX:DEBUG:XXX */
+
/* Keep alphabetized */
static struct cmd_handler handlers[] = {
{ "bindsym", cmd_bindsym },
+ //DEBUG
+ { "debug_print_layout", cmd_debug_print_layout },
+ //DEBUG
{ "exec", cmd_exec },
{ "exec_always", cmd_exec_always },
{ "exit", cmd_exit },