diff options
Diffstat (limited to 'sway/input_state.c')
-rw-r--r-- | sway/input_state.c | 93 |
1 files changed, 74 insertions, 19 deletions
diff --git a/sway/input_state.c b/sway/input_state.c index 88506c92..24678f71 100644 --- a/sway/input_state.c +++ b/sway/input_state.c | |||
@@ -194,8 +194,16 @@ void center_pointer_on(swayc_t *view) { | |||
194 | 194 | ||
195 | // Mode set left/right click | 195 | // Mode set left/right click |
196 | 196 | ||
197 | static void pointer_mode_set_left(void) { | 197 | static void pointer_mode_set_dragging(void) { |
198 | set_initial_view(pointer_state.left.view); | 198 | switch (config->dragging_key) { |
199 | case M_LEFT_CLICK: | ||
200 | set_initial_view(pointer_state.left.view); | ||
201 | break; | ||
202 | case M_RIGHT_CLICK: | ||
203 | set_initial_view(pointer_state.right.view); | ||
204 | break; | ||
205 | } | ||
206 | |||
199 | if (initial.ptr->is_floating) { | 207 | if (initial.ptr->is_floating) { |
200 | pointer_state.mode = M_DRAGGING | M_FLOATING; | 208 | pointer_state.mode = M_DRAGGING | M_FLOATING; |
201 | } else { | 209 | } else { |
@@ -208,8 +216,15 @@ static void pointer_mode_set_left(void) { | |||
208 | } | 216 | } |
209 | } | 217 | } |
210 | 218 | ||
211 | static void pointer_mode_set_right(void) { | 219 | static void pointer_mode_set_resizing(void) { |
212 | set_initial_view(pointer_state.right.view); | 220 | switch (config->resizing_key) { |
221 | case M_LEFT_CLICK: | ||
222 | set_initial_view(pointer_state.left.view); | ||
223 | break; | ||
224 | case M_RIGHT_CLICK: | ||
225 | set_initial_view(pointer_state.right.view); | ||
226 | break; | ||
227 | } | ||
213 | // Setup locking information | 228 | // Setup locking information |
214 | int midway_x = initial.ptr->x + initial.ptr->width/2; | 229 | int midway_x = initial.ptr->x + initial.ptr->width/2; |
215 | int midway_y = initial.ptr->y + initial.ptr->height/2; | 230 | int midway_y = initial.ptr->y + initial.ptr->height/2; |
@@ -233,15 +248,19 @@ void pointer_mode_set(uint32_t button, bool condition) { | |||
233 | // switch on drag/resize mode | 248 | // switch on drag/resize mode |
234 | switch (pointer_state.mode & (M_DRAGGING | M_RESIZING)) { | 249 | switch (pointer_state.mode & (M_DRAGGING | M_RESIZING)) { |
235 | case M_DRAGGING: | 250 | case M_DRAGGING: |
236 | // end drag mode when left click is unpressed | 251 | // end drag mode when 'dragging' click is unpressed |
237 | if (!pointer_state.left.held) { | 252 | if (config->dragging_key == M_LEFT_CLICK && !pointer_state.left.held) { |
253 | pointer_state.mode = 0; | ||
254 | } else if (config->dragging_key == M_RIGHT_CLICK && !pointer_state.right.held) { | ||
238 | pointer_state.mode = 0; | 255 | pointer_state.mode = 0; |
239 | } | 256 | } |
240 | break; | 257 | break; |
241 | 258 | ||
242 | case M_RESIZING: | 259 | case M_RESIZING: |
243 | // end resize mode when right click is unpressed | 260 | // end resize mode when 'resizing' click is unpressed |
244 | if (!pointer_state.right.held) { | 261 | if (config->resizing_key == M_LEFT_CLICK && !pointer_state.left.held) { |
262 | pointer_state.mode = 0; | ||
263 | } else if (config->resizing_key == M_RIGHT_CLICK && !pointer_state.right.held) { | ||
245 | pointer_state.mode = 0; | 264 | pointer_state.mode = 0; |
246 | } | 265 | } |
247 | break; | 266 | break; |
@@ -255,19 +274,27 @@ void pointer_mode_set(uint32_t button, bool condition) { | |||
255 | 274 | ||
256 | // Set mode depending on current button press | 275 | // Set mode depending on current button press |
257 | switch (button) { | 276 | switch (button) { |
258 | // Start dragging mode | 277 | // Start left-click mode |
259 | case M_LEFT_CLICK: | 278 | case M_LEFT_CLICK: |
260 | // if button release dont do anything | 279 | // if button release dont do anything |
261 | if (pointer_state.left.held) { | 280 | if (pointer_state.left.held) { |
262 | pointer_mode_set_left(); | 281 | if (config->dragging_key == M_LEFT_CLICK) { |
282 | pointer_mode_set_dragging(); | ||
283 | } else if (config->resizing_key == M_LEFT_CLICK) { | ||
284 | pointer_mode_set_resizing(); | ||
285 | } | ||
263 | } | 286 | } |
264 | break; | 287 | break; |
265 | 288 | ||
266 | // Start resize mode | 289 | // Start right-click mode |
267 | case M_RIGHT_CLICK: | 290 | case M_RIGHT_CLICK: |
268 | // if button release dont do anyhting | 291 | // if button release dont do anyhting |
269 | if (pointer_state.right.held) { | 292 | if (pointer_state.right.held) { |
270 | pointer_mode_set_right(); | 293 | if (config->dragging_key == M_RIGHT_CLICK) { |
294 | pointer_mode_set_dragging(); | ||
295 | } else if (config->resizing_key == M_RIGHT_CLICK) { | ||
296 | pointer_mode_set_resizing(); | ||
297 | } | ||
271 | } | 298 | } |
272 | break; | 299 | break; |
273 | } | 300 | } |
@@ -287,8 +314,17 @@ void pointer_mode_update(void) { | |||
287 | switch (pointer_state.mode) { | 314 | switch (pointer_state.mode) { |
288 | case M_FLOATING | M_DRAGGING: | 315 | case M_FLOATING | M_DRAGGING: |
289 | // Update position | 316 | // Update position |
290 | dx -= pointer_state.left.x; | 317 | switch (config->resizing_key) { |
291 | dy -= pointer_state.left.y; | 318 | case M_LEFT_CLICK: |
319 | dx -= pointer_state.left.x; | ||
320 | dy -= pointer_state.left.y; | ||
321 | break; | ||
322 | case M_RIGHT_CLICK: | ||
323 | dx -= pointer_state.right.x; | ||
324 | dy -= pointer_state.right.y; | ||
325 | break; | ||
326 | } | ||
327 | |||
292 | if (initial.x + dx != initial.ptr->x) { | 328 | if (initial.x + dx != initial.ptr->x) { |
293 | initial.ptr->x = initial.x + dx; | 329 | initial.ptr->x = initial.x + dx; |
294 | } | 330 | } |
@@ -299,9 +335,19 @@ void pointer_mode_update(void) { | |||
299 | break; | 335 | break; |
300 | 336 | ||
301 | case M_FLOATING | M_RESIZING: | 337 | case M_FLOATING | M_RESIZING: |
302 | dx -= pointer_state.right.x; | 338 | switch (config->resizing_key) { |
303 | dy -= pointer_state.right.y; | 339 | case M_LEFT_CLICK: |
304 | initial.ptr = pointer_state.right.view; | 340 | dx -= pointer_state.left.x; |
341 | dy -= pointer_state.left.y; | ||
342 | initial.ptr = pointer_state.left.view; | ||
343 | break; | ||
344 | case M_RIGHT_CLICK: | ||
345 | dx -= pointer_state.right.x; | ||
346 | dy -= pointer_state.right.y; | ||
347 | initial.ptr = pointer_state.right.view; | ||
348 | break; | ||
349 | } | ||
350 | |||
305 | if (lock.left) { | 351 | if (lock.left) { |
306 | if (initial.w + dx > min_sane_w) { | 352 | if (initial.w + dx > min_sane_w) { |
307 | initial.ptr->width = initial.w + dx; | 353 | initial.ptr->width = initial.w + dx; |
@@ -341,8 +387,17 @@ void pointer_mode_update(void) { | |||
341 | break; | 387 | break; |
342 | 388 | ||
343 | case M_TILING | M_RESIZING: | 389 | case M_TILING | M_RESIZING: |
344 | dx -= pointer_state.right.x; | 390 | switch (config->resizing_key) { |
345 | dy -= pointer_state.right.y; | 391 | case M_LEFT_CLICK: |
392 | dx -= pointer_state.left.x; | ||
393 | dy -= pointer_state.left.y; | ||
394 | break; | ||
395 | case M_RIGHT_CLICK: | ||
396 | dx -= pointer_state.right.x; | ||
397 | dy -= pointer_state.right.y; | ||
398 | break; | ||
399 | } | ||
400 | |||
346 | // resize if we can | 401 | // resize if we can |
347 | if (initial.horiz.ptr) { | 402 | if (initial.horiz.ptr) { |
348 | if (lock.left) { | 403 | if (lock.left) { |