aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
Diffstat (limited to 'sway')
-rw-r--r--sway/container.c17
-rw-r--r--sway/handlers.c3
-rw-r--r--sway/input_state.c5
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;
+ }
}
}