From 1bf02144e558630f36b1efca45d6074be456c0b4 Mon Sep 17 00:00:00 2001 From: taiyu Date: Tue, 18 Aug 2015 23:52:42 -0700 Subject: [PATCH 1/3] fixed floating_modifier related things --- sway/container.c | 5 +++-- sway/focus.c | 5 ++++- sway/handlers.c | 45 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/sway/container.c b/sway/container.c index ec4d48b8e..9763f3819 100644 --- a/sway/container.c +++ b/sway/container.c @@ -200,8 +200,9 @@ swayc_t *new_floating_view(wlc_handle handle) { // Set the geometry of the floating view const struct wlc_geometry* geometry = wlc_view_get_geometry(handle); - view->x = geometry->origin.x; - view->y = geometry->origin.y; + //give it requested geometry, but place in center + view->x = (active_workspace->width - geometry->size.w) / 2; + view->y = (active_workspace->height- geometry->size.h) / 2; view->width = geometry->size.w; view->height = geometry->size.h; diff --git a/sway/focus.c b/sway/focus.c index 1f17dfc9e..0ee106943 100644 --- a/sway/focus.c +++ b/sway/focus.c @@ -168,8 +168,11 @@ void set_focused_container(swayc_t *c) { } // activate current focus if (p->type == C_VIEW) { - wlc_view_focus(p->handle); wlc_view_set_state(p->handle, WLC_BIT_ACTIVATED, true); + //set focus if view_focus is unlocked + if (!locked_view_focus) { + wlc_view_focus(p->handle); + } } } } diff --git a/sway/handlers.c b/sway/handlers.c index e785e9c52..d5909c8fe 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -139,35 +139,54 @@ static void handle_output_focused(wlc_handle output, bool focus) { } static bool handle_view_created(wlc_handle handle) { - swayc_t *focused = get_focused_container(&root_container); + // if view is child of another view, the use that as focused container + wlc_handle parent = wlc_view_get_parent(handle); + swayc_t *focused = NULL; swayc_t *newview = NULL; + + // Get parent container, to add view in + if (parent) { + focused = get_swayc_for_handle(parent, &root_container); + } + if (!focused || focused->type == C_OUTPUT) { + focused = get_focused_container(&root_container); + } + sway_log(L_DEBUG, "creating view %ld with type %x, state %x, with parent %ld", + handle, wlc_view_get_type(handle), wlc_view_get_state(handle), parent); + + // TODO properly figure out how each window should be handled. switch (wlc_view_get_type(handle)) { // regular view created regularly case 0: newview = new_view(focused, handle); wlc_view_set_state(handle, WLC_BIT_MAXIMIZED, true); break; - // takes keyboard focus + + // Dmenu keeps viewfocus, but others with this flag dont, for now simulate + // dmenu case WLC_BIT_OVERRIDE_REDIRECT: - sway_log(L_DEBUG, "view %ld with OVERRIDE_REDIRECT", handle); - locked_view_focus = true; +// locked_view_focus = true; wlc_view_focus(handle); wlc_view_set_state(handle, WLC_BIT_ACTIVATED, true); wlc_view_bring_to_front(handle); break; - // Takes container focus + + // Firefox popups have this flag set. case WLC_BIT_OVERRIDE_REDIRECT|WLC_BIT_UNMANAGED: - sway_log(L_DEBUG, "view %ld with OVERRIDE_REDIRECT|WLC_BIT_MANAGED", handle); wlc_view_bring_to_front(handle); locked_container_focus = true; break; - // set modals as floating containers + + // Modals, get focus, popups do not case WLC_BIT_MODAL: + wlc_view_focus(handle); wlc_view_bring_to_front(handle); newview = new_floating_view(handle); case WLC_BIT_POPUP: + wlc_view_bring_to_front(handle); break; } + if (newview) { set_focused_container(newview); swayc_t *output = newview->parent; @@ -187,19 +206,19 @@ static void handle_view_destroyed(wlc_handle handle) { // regular view created regularly case 0: case WLC_BIT_MODAL: + case WLC_BIT_POPUP: if (view) { swayc_t *parent = destroy_view(view); arrange_windows(parent, -1, -1); } break; - // takes keyboard focus + // DMENU has this flag, and takes view_focus, but other things with this + // flag dont case WLC_BIT_OVERRIDE_REDIRECT: - locked_view_focus = false; +// locked_view_focus = false; break; - // Takes container focus case WLC_BIT_OVERRIDE_REDIRECT|WLC_BIT_UNMANAGED: locked_container_focus = false; - case WLC_BIT_POPUP: break; } set_focused_container(get_focused_view(&root_container)); @@ -279,10 +298,12 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier while (mid < head && keys_pressed[mid] != sym) { ++mid; } + //Add or remove key depending on state if (state == WLC_KEY_STATE_PRESSED && mid == head && head + 1 < QSIZE) { keys_pressed[head++] = sym; } else if (state == WLC_KEY_STATE_RELEASED && mid < head) { memmove(keys_pressed + mid, keys_pressed + mid + 1, sizeof*keys_pressed * (--head - mid)); + keys_pressed[head] = 0; } // TODO: reminder to check conflicts with mod+q+a versus mod+q int i; @@ -314,6 +335,7 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier uint8_t k; for (k = 0; k < head; ++k) { memmove(keys_pressed + k, keys_pressed + k + 1, sizeof*keys_pressed * (--head - k)); + keys_pressed[head] = 0; break; } } @@ -469,6 +491,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w arrange_windows(pointer->parent, -1, -1); dragging = m1_held; resizing = m2_held; + return true; } return (pointer && pointer != focused); } else { From e16a4015ff216594eeb237ef81534bfaea7533d6 Mon Sep 17 00:00:00 2001 From: taiyu Date: Wed, 19 Aug 2015 00:28:53 -0700 Subject: [PATCH 2/3] fixed focus key handler --- include/layout.h | 1 + sway/commands.c | 39 ++++-------- sway/handlers.c | 163 +++++++++++++++++++++++------------------------ sway/layout.c | 12 ++++ 4 files changed, 103 insertions(+), 112 deletions(-) diff --git a/include/layout.h b/include/layout.h index 282f92ee0..98fdb531f 100644 --- a/include/layout.h +++ b/include/layout.h @@ -10,6 +10,7 @@ extern swayc_t root_container; void init_layout(void); void add_child(swayc_t *parent, swayc_t *child); +void add_floating(swayc_t *ws, swayc_t *child); // Returns parent container which needs to be rearranged. swayc_t *add_sibling(swayc_t *sibling, swayc_t *child); swayc_t *replace_child(swayc_t *child, swayc_t *new_child); diff --git a/sway/commands.c b/sway/commands.c index 42d6b173e..6e1f18482 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -185,40 +185,23 @@ static bool cmd_floating(struct sway_config *config, int argc, char **argv) { int i; // Change from nonfloating to floating if (!view->is_floating) { - view->is_floating = true; - for (i = 0; i < view->parent->children->length; i++) { - if (view->parent->children->items[i] == view) { - // Try to use desired geometry to set w/h - if (view->desired_width != -1) { - view->width = view->desired_width; - } - if (view->desired_height != -1) { - view->height = view->desired_height; - } - - // Swap from the list of whatever container the view was in - // to the workspace->floating list - list_del(view->parent->children, i); - list_add(active_workspace->floating, view); - destroy_container(view->parent); - - // Set the new position of the container and arrange windows - view->x = (active_workspace->width - view->width)/2; - view->y = (active_workspace->height - view->height)/2; - sway_log(L_INFO, "Setting container %p to floating at coordinates X:%d Y:%d, W:%d, H:%d", view, view->x, view->y, view->width, view->height); - // Change parent to active_workspace - view->parent = active_workspace; - arrange_windows(active_workspace, -1, -1); - return true; - } + remove_child(view); + add_floating(active_workspace,view); + view->x = (active_workspace->width - view->width)/2; + view->y = (active_workspace->height - view->height)/2; + arrange_windows(active_workspace, -1, -1); + if (view->desired_width != -1) { + view->width = view->desired_width; + } + if (view->desired_height != -1) { + view->height = view->desired_height; } } else { // Delete the view from the floating list and unset its is_floating flag // Using length-1 as the index is safe because the view must be the currently // focused floating output - list_del(active_workspace->floating, active_workspace->floating->length - 1); + remove_child(view); view->is_floating = false; - active_workspace->focused = NULL; // Get the properly focused container, and add in the view there swayc_t *focused = container_under_pointer(); // If focused is null, it's because the currently focused container is a workspace diff --git a/sway/handlers.c b/sway/handlers.c index d5909c8fe..3ae332946 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -15,6 +15,7 @@ #include "focus.h" uint32_t keys_pressed[32]; +int keys_pressed_length = 0; static struct wlc_origin mouse_origin; @@ -23,6 +24,15 @@ static bool dragging = false; static bool m2_held = false; static bool resizing = false; +static bool floating_mod_pressed(void) { + int i = 0; + while (i < keys_pressed_length) { + if (keys_pressed[i++] == config->floating_mod) + return true; + } + return false; +} + static bool pointer_test(swayc_t *view, void *_origin) { const struct wlc_origin *origin = _origin; // Determine the output that the view is under @@ -286,7 +296,6 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier if (locked_view_focus && state == WLC_KEY_STATE_PRESSED) { return false; } - static uint8_t head = 0; bool cmd_success = false; struct sway_mode *mode = config->current_mode; @@ -295,15 +304,15 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier // Find key, if it has been pressed int mid = 0; - while (mid < head && keys_pressed[mid] != sym) { + while (mid < keys_pressed_length && keys_pressed[mid] != sym) { ++mid; } //Add or remove key depending on state - if (state == WLC_KEY_STATE_PRESSED && mid == head && head + 1 < QSIZE) { - keys_pressed[head++] = sym; - } else if (state == WLC_KEY_STATE_RELEASED && mid < head) { - memmove(keys_pressed + mid, keys_pressed + mid + 1, sizeof*keys_pressed * (--head - mid)); - keys_pressed[head] = 0; + if (state == WLC_KEY_STATE_PRESSED && mid == keys_pressed_length && keys_pressed_length + 1 < QSIZE) { + keys_pressed[keys_pressed_length++] = sym; + } else if (state == WLC_KEY_STATE_RELEASED && mid < keys_pressed_length) { + memmove(keys_pressed + mid, keys_pressed + mid + 1, sizeof*keys_pressed * (--keys_pressed_length - mid)); + keys_pressed[keys_pressed_length] = 0; } // TODO: reminder to check conflicts with mod+q+a versus mod+q int i; @@ -317,7 +326,7 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier match = false; xkb_keysym_t *key = binding->keys->items[j]; uint8_t k; - for (k = 0; k < head; ++k) { + for (k = 0; k < keys_pressed_length; ++k) { if (keys_pressed[k] == *key) { match = true; break; @@ -333,9 +342,9 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier int j; for (j = 0; j < binding->keys->length; ++j) { uint8_t k; - for (k = 0; k < head; ++k) { - memmove(keys_pressed + k, keys_pressed + k + 1, sizeof*keys_pressed * (--head - k)); - keys_pressed[head] = 0; + for (k = 0; k < keys_pressed_length; ++k) { + memmove(keys_pressed + k, keys_pressed + k + 1, sizeof*keys_pressed * (--keys_pressed_length - k)); + keys_pressed[keys_pressed_length] = 0; break; } } @@ -355,84 +364,67 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct static wlc_handle prev_handle = 0; mouse_origin = *origin; bool changed_floating = false; - int i = 0; if (!active_workspace) { return false; } // Do checks to determine if proper keys are being held - swayc_t *view = active_workspace->focused; + swayc_t *view = get_focused_view(active_workspace); uint32_t edge = 0; - if (dragging && view) { - if (view->is_floating) { - while (keys_pressed[i++]) { - if (keys_pressed[i] == config->floating_mod) { - int dx = mouse_origin.x - prev_pos.x; - int dy = mouse_origin.y - prev_pos.y; - view->x += dx; - view->y += dy; - changed_floating = true; - break; - } + if (dragging && view && view->is_floating) { + int dx = mouse_origin.x - prev_pos.x; + int dy = mouse_origin.y - prev_pos.y; + view->x += dx; + view->y += dy; + changed_floating = true; + } else if (resizing && view && view->is_floating) { + int dx = mouse_origin.x - prev_pos.x; + int dy = mouse_origin.y - prev_pos.y; + + // Move and resize the view based on the dx/dy and mouse position + int midway_x = view->x + view->width/2; + int midway_y = view->y + view->height/2; + if (dx < 0) { + changed_floating = true; + if (mouse_origin.x > midway_x) { + view->width += dx; + edge += WLC_RESIZE_EDGE_RIGHT; + } else { + view->x += dx; + view->width -= dx; + edge += WLC_RESIZE_EDGE_LEFT; + } + } else if (dx > 0){ + changed_floating = true; + if (mouse_origin.x > midway_x) { + view->width += dx; + edge += WLC_RESIZE_EDGE_RIGHT; + } else { + view->x += dx; + view->width -= dx; + edge += WLC_RESIZE_EDGE_LEFT; } } - } else if (resizing && view) { - if (view->is_floating) { - while (keys_pressed[i++]) { - if (keys_pressed[i] == config->floating_mod) { - int dx = mouse_origin.x - prev_pos.x; - int dy = mouse_origin.y - prev_pos.y; - // Move and resize the view based on the dx/dy and mouse position - int midway_x = view->x + view->width/2; - int midway_y = view->y + view->height/2; - - - if (dx < 0) { - changed_floating = true; - if (mouse_origin.x > midway_x) { - view->width += dx; - edge += WLC_RESIZE_EDGE_RIGHT; - } else { - view->x += dx; - view->width -= dx; - edge += WLC_RESIZE_EDGE_LEFT; - } - } else if (dx > 0){ - changed_floating = true; - if (mouse_origin.x > midway_x) { - view->width += dx; - edge += WLC_RESIZE_EDGE_RIGHT; - } else { - view->x += dx; - view->width -= dx; - edge += WLC_RESIZE_EDGE_LEFT; - } - } - - if (dy < 0) { - changed_floating = true; - if (mouse_origin.y > midway_y) { - view->height += dy; - edge += WLC_RESIZE_EDGE_BOTTOM; - } else { - view->y += dy; - view->height -= dy; - edge += WLC_RESIZE_EDGE_TOP; - } - } else if (dy > 0) { - changed_floating = true; - if (mouse_origin.y > midway_y) { - view->height += dy; - edge += WLC_RESIZE_EDGE_BOTTOM; - } else { - edge = WLC_RESIZE_EDGE_BOTTOM; - view->y += dy; - view->height -= dy; - edge += WLC_RESIZE_EDGE_TOP; - } - } - break; - } + if (dy < 0) { + changed_floating = true; + if (mouse_origin.y > midway_y) { + view->height += dy; + edge += WLC_RESIZE_EDGE_BOTTOM; + } else { + view->y += dy; + view->height -= dy; + edge += WLC_RESIZE_EDGE_TOP; + } + } else if (dy > 0) { + changed_floating = true; + if (mouse_origin.y > midway_y) { + view->height += dy; + edge += WLC_RESIZE_EDGE_BOTTOM; + } else { + edge = WLC_RESIZE_EDGE_BOTTOM; + view->y += dy; + view->height -= dy; + edge += WLC_RESIZE_EDGE_TOP; } } } @@ -489,9 +481,12 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w } } arrange_windows(pointer->parent, -1, -1); - dragging = m1_held; - resizing = m2_held; - return true; + if (floating_mod_pressed()) { + dragging = m1_held; + resizing = m2_held; + } + //Dont want pointer sent to window while dragging or resizing + return (dragging || resizing); } return (pointer && pointer != focused); } else { diff --git a/sway/layout.c b/sway/layout.c index e2e129019..7125ffc32 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -38,6 +38,17 @@ void add_child(swayc_t *parent, swayc_t *child) { } } +void add_floating(swayc_t *ws, swayc_t *child) { + sway_log(L_DEBUG, "Adding %p (%d, %dx%d) to %p (%d, %dx%d)", child, child->type, + child->width, child->height, ws, ws->type, ws->width, ws->height); + list_add(ws->floating, child); + child->parent = ws; + child->is_floating = true; + if (!ws->focused) { + ws->focused = child; + } +} + swayc_t *add_sibling(swayc_t *sibling, swayc_t *child) { swayc_t *parent = sibling->parent; int i = index_child(parent, sibling); @@ -76,6 +87,7 @@ swayc_t *remove_child(swayc_t *child) { break; } } + i = 0; } else { for (i = 0; i < parent->children->length; ++i) { if (parent->children->items[i] == child) { From c5a69828934bf07db9062bd5f24bb2ff94b45b4a Mon Sep 17 00:00:00 2001 From: taiyu Date: Wed, 19 Aug 2015 01:06:15 -0700 Subject: [PATCH 3/3] fixed some more bugs, moved layout_log into log.ch, restored focus_parent --- include/log.h | 2 ++ include/workspace.h | 1 - sway/commands.c | 10 +++++--- sway/container.c | 1 - sway/focus.c | 3 +++ sway/log.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ sway/workspace.c | 57 ------------------------------------------- 7 files changed, 70 insertions(+), 63 deletions(-) diff --git a/include/log.h b/include/log.h index 44f84940d..7aea2ded4 100644 --- a/include/log.h +++ b/include/log.h @@ -1,6 +1,7 @@ #ifndef _SWAY_LOG_H #define _SWAY_LOG_H #include +#include "container.h" typedef enum { L_SILENT = 0, @@ -15,4 +16,5 @@ void sway_log(int verbosity, const char* format, ...) __attribute__((format(prin void sway_abort(const char* format, ...) __attribute__((format(printf,1,2))); bool sway_assert(bool condition, const char* format, ...) __attribute__((format(printf,2,3))); +void layout_log(const swayc_t *c, int depth); #endif diff --git a/include/workspace.h b/include/workspace.h index 8ce39bbd8..042a15d9b 100644 --- a/include/workspace.h +++ b/include/workspace.h @@ -15,6 +15,5 @@ void workspace_output_next(); void workspace_next(); void workspace_output_prev(); void workspace_prev(); -void layout_log(const swayc_t *c, int depth); #endif diff --git a/sway/commands.c b/sway/commands.c index 6e1f18482..7dde78bd3 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -182,20 +182,22 @@ static bool cmd_floating(struct sway_config *config, int argc, char **argv) { if (view->type != C_VIEW) { return true; } - int i; // Change from nonfloating to floating if (!view->is_floating) { - remove_child(view); + //Remove view from its current location + destroy_container(remove_child(view)); + + //and move it into workspace floating add_floating(active_workspace,view); view->x = (active_workspace->width - view->width)/2; view->y = (active_workspace->height - view->height)/2; - arrange_windows(active_workspace, -1, -1); if (view->desired_width != -1) { view->width = view->desired_width; } if (view->desired_height != -1) { view->height = view->desired_height; } + arrange_windows(active_workspace, -1, -1); } else { // Delete the view from the floating list and unset its is_floating flag // Using length-1 as the index is safe because the view must be the currently @@ -221,10 +223,10 @@ static bool cmd_floating(struct sway_config *config, int argc, char **argv) { add_sibling(focused, view); } // Refocus on the view once its been put back into the layout - set_focused_container(view); arrange_windows(active_workspace, -1, -1); return true; } + set_focused_container(view); } return true; diff --git a/sway/container.c b/sway/container.c index 9763f3819..0a89f6344 100644 --- a/sway/container.c +++ b/sway/container.c @@ -261,7 +261,6 @@ swayc_t *destroy_container(swayc_t *container) { sway_log(L_DEBUG, "Container: Destroying container '%p'", container); swayc_t *parent = container->parent; free_swayc(container); - container = parent; } return container; diff --git a/sway/focus.c b/sway/focus.c index 0ee106943..7023d37dc 100644 --- a/sway/focus.c +++ b/sway/focus.c @@ -146,6 +146,9 @@ void set_focused_container(swayc_t *c) { // update container focus from here to root, making necessary changes along // the way swayc_t *p = c; + if (p->type != C_OUTPUT && p->type != C_ROOT) { + p->is_focused = true; + } while (p != &root_container) { update_focus(p); p = p->parent; diff --git a/sway/log.c b/sway/log.c index 5bd3c8dc1..9b9a9dc00 100644 --- a/sway/log.c +++ b/sway/log.c @@ -82,3 +82,62 @@ bool sway_assert(bool condition, const char* format, ...) { return false; } + +#include "workspace.h" + +/* XXX:DEBUG:XXX */ +static void container_log(const swayc_t *c) { + fprintf(stderr, "focus:%c|", + c->is_focused ? '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,"(h:%ld)",c->handle); + 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, d; + int e = c->children ? c->children->length : 0; + container_log(c); + if (e) { + for (i = 0; i < e; ++i) { + fputc('|',stderr); + for (d = 0; d < depth; ++d) fputc('-', stderr); + layout_log(c->children->items[i], depth + 1); + } + } + if (c->type == C_WORKSPACE) { + e = c->floating?c->floating->length:0; + if (e) { + for (i = 0; i < e; ++i) { + fputc('|',stderr); + for (d = 0; d < depth; ++d) fputc('=', stderr); + layout_log(c->floating->items[i], depth + 1); + } + } + } +} +/* XXX:DEBUG:XXX */ diff --git a/sway/workspace.c b/sway/workspace.c index 60108752a..9b407c6ac 100644 --- a/sway/workspace.c +++ b/sway/workspace.c @@ -182,60 +182,3 @@ void workspace_switch(swayc_t *workspace) { set_focused_container(get_focused_view(workspace)); arrange_windows(workspace, -1, -1); } - -/* XXX:DEBUG:XXX */ -static void container_log(const swayc_t *c) { - fprintf(stderr, "focus:%c|", - c->is_focused ? '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,"(h:%ld)",c->handle); - 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, d; - int e = c->children ? c->children->length : 0; - container_log(c); - if (e) { - for (i = 0; i < e; ++i) { - fputc('|',stderr); - for (d = 0; d < depth; ++d) fputc('-', stderr); - layout_log(c->children->items[i], depth + 1); - } - } - if (c->type == C_WORKSPACE) { - e = c->floating?c->floating->length:0; - if (e) { - for (i = 0; i < e; ++i) { - fputc('|',stderr); - for (d = 0; d < depth; ++d) fputc('-', stderr); - layout_log(c->floating->items[i], depth + 1); - } - } - } -} -/* XXX:DEBUG:XXX */