move workspace from dead output to other output

master
taiyu 9 years ago
parent ef31ee5cf6
commit d115335951

@ -281,8 +281,21 @@ swayc_t *destroy_output(swayc_t *output) {
if (!ASSERT_NONNULL(output)) { if (!ASSERT_NONNULL(output)) {
return NULL; return NULL;
} }
if (output->children->length == 0) { if (output->children->length > 0) {
// TODO move workspaces to other outputs 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); sway_log(L_DEBUG, "OUTPUT: Destroying output '%lu'", output->handle);
free_swayc(output); free_swayc(output);

@ -424,8 +424,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
} }
// set pointer mode // set pointer mode
pointer_mode_set(button, pointer_mode_set(button, !(modifiers->mods ^ config->floating_mod));
(modifiers->mods & config->floating_mod) == config->floating_mod);
// Return if mode has been set // Return if mode has been set
if (pointer_state.mode) { if (pointer_state.mode) {

@ -169,6 +169,11 @@ static void pointer_mode_set_left(void) {
pointer_state.mode = M_DRAGGING | M_FLOATING; pointer_state.mode = M_DRAGGING | M_FLOATING;
} else { } else {
pointer_state.mode = M_DRAGGING | M_TILING; 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;
}
} }
} }

Loading…
Cancel
Save