diff options
author | taiyu <taiyu.len@gmail.com> | 2015-08-26 21:25:57 -0700 |
---|---|---|
committer | taiyu <taiyu.len@gmail.com> | 2015-08-26 21:25:57 -0700 |
commit | d11533595133685d15fd6cdbf9f1611be5e8e2f3 (patch) | |
tree | eb8890eb711a55a58e3855c6d9328e3b1dd09063 /sway | |
parent | ef31ee5cf6aabfdf4730ac64c8b004be238df1a8 (diff) | |
download | sway-d11533595133685d15fd6cdbf9f1611be5e8e2f3.tar.xz |
move workspace from dead output to other output
Diffstat (limited to 'sway')
-rw-r--r-- | sway/container.c | 17 | ||||
-rw-r--r-- | sway/handlers.c | 3 | ||||
-rw-r--r-- | sway/input_state.c | 5 |
3 files changed, 21 insertions, 4 deletions
diff --git a/sway/container.c b/sway/container.c index 3558809a..a3bc9864 100644 --- a/sway/container.c +++ b/sway/container.c @@ -281,8 +281,21 @@ swayc_t *destroy_output(swayc_t *output) { if (!ASSERT_NONNULL(output)) { return NULL; } - if (output->children->length == 0) { - // TODO move workspaces to other outputs + if (output->children->length > 0) { + int i, len = root_container.children->length; + // TODO save workspaces when there are no outputs. + // TODO also check if there will ever be no outputs except for exiting + // program + if (len > 1) { + len = output->children->length; + int p = root_container.children->items[0] == output; + // Move workspace from this output to another output + for (i = 0; i < len; ++i) { + swayc_t *child = output->children->items[i]; + remove_child(child); + add_child(root_container.children->items[p], child); + } + } } sway_log(L_DEBUG, "OUTPUT: Destroying output '%lu'", output->handle); free_swayc(output); diff --git a/sway/handlers.c b/sway/handlers.c index 93b124bd..2223a98c 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -424,8 +424,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w } // set pointer mode - pointer_mode_set(button, - (modifiers->mods & config->floating_mod) == config->floating_mod); + pointer_mode_set(button, !(modifiers->mods ^ config->floating_mod)); // Return if mode has been set if (pointer_state.mode) { diff --git a/sway/input_state.c b/sway/input_state.c index 10425c57..0a7c073d 100644 --- a/sway/input_state.c +++ b/sway/input_state.c @@ -169,6 +169,11 @@ static void pointer_mode_set_left(void) { pointer_state.mode = M_DRAGGING | M_FLOATING; } else { pointer_state.mode = M_DRAGGING | M_TILING; + // unset mode if we cant drag tile + if (initial.ptr->parent->type == C_WORKSPACE && + initial.ptr->parent->children->length == 1) { + pointer_state.mode = 0; + } } } |