diff options
author | taiyu <taiyu.len@gmail.com> | 2015-08-19 10:45:40 -0700 |
---|---|---|
committer | taiyu <taiyu.len@gmail.com> | 2015-08-19 10:45:40 -0700 |
commit | 7bbb102e2d49e90f70fa8a954febb091a4d8bb81 (patch) | |
tree | d5669b4266d8e7b9e1d9b1a3bc8b31e0368102ec | |
parent | pointer uses its own modifiers (diff) | |
download | sway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.tar.gz sway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.tar.zst sway-7bbb102e2d49e90f70fa8a954febb091a4d8bb81.zip |
reset floating view on floating_mod repress
-rw-r--r-- | sway/handlers.c | 30 |
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 | ||
94 | static struct wlc_geometry saved_floating; | ||
95 | |||
96 | static 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 | |||
105 | static 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 | |||
94 | static bool handle_output_created(wlc_handle output) { | 119 | static 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); |