summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar taiyu <taiyu.len@gmail.com>2015-08-19 10:45:40 -0700
committerLibravatar taiyu <taiyu.len@gmail.com>2015-08-19 10:45:40 -0700
commit7bbb102e2d49e90f70fa8a954febb091a4d8bb81 (patch)
treed5669b4266d8e7b9e1d9b1a3bc8b31e0368102ec
parentpointer uses its own modifiers (diff)
downloadsway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.tar.gz
sway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.tar.zst
sway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.zip
reset floating view on floating_mod repress
-rw-r--r--sway/handlers.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/sway/handlers.c b/sway/handlers.c
index 71691d7d..46d1fff5 100644
--- a/sway/handlers.c
+++ b/sway/handlers.c
@@ -91,6 +91,31 @@ swayc_t *container_under_pointer(void) {
91 return lookup; 91 return lookup;
92} 92}
93 93
94static struct wlc_geometry saved_floating;
95
96static void start_floating(swayc_t *view) {
97 if (view->is_floating) {
98 saved_floating.origin.x = view->x;
99 saved_floating.origin.y = view->y;
100 saved_floating.size.w = view->width;
101 saved_floating.size.h = view->height;
102 }
103}
104
105static void reset_floating(swayc_t *view) {
106 if (view->is_floating) {
107 view->x = saved_floating.origin.x;
108 view->y = saved_floating.origin.y;
109 view->width = saved_floating.size.w;
110 view->height = saved_floating.size.h;
111 arrange_windows(view->parent, -1, -1);
112 }
113 dragging = resizing = false;
114 lock_left = lock_right = lock_top = lock_bottom = false;
115}
116
117/* Handles */
118
94static bool handle_output_created(wlc_handle output) { 119static bool handle_output_created(wlc_handle output) {
95 swayc_t *op = new_output(output); 120 swayc_t *op = new_output(output);
96 121
@@ -291,6 +316,10 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
291 } 316 }
292 bool cmd_success = false; 317 bool cmd_success = false;
293 318
319 if ((modifiers->mods & config->floating_mod) && (dragging||resizing)) {
320 reset_floating(get_focused_view(&root_container));
321 }
322
294 struct sway_mode *mode = config->current_mode; 323 struct sway_mode *mode = config->current_mode;
295 // Lowercase if necessary 324 // Lowercase if necessary
296 sym = tolower(sym); 325 sym = tolower(sym);
@@ -500,6 +529,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
500 lock_top = !lock_bottom; 529 lock_top = !lock_bottom;
501 lock_right = origin->x < midway_x; 530 lock_right = origin->x < midway_x;
502 lock_left = !lock_right; 531 lock_left = !lock_right;
532 start_floating(pointer);
503 } 533 }
504 //Dont want pointer sent to window while dragging or resizing 534 //Dont want pointer sent to window while dragging or resizing
505 return (dragging || resizing); 535 return (dragging || resizing);