mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #1209 from janza/mouse-bindings
Add mouse button bindings
This commit is contained in:
		
						commit
						781fc604b4
					
				
					 2 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
#include <xkbcommon/xkbcommon.h>
 | 
					#include <xkbcommon/xkbcommon.h>
 | 
				
			||||||
#include <xkbcommon/xkbcommon-names.h>
 | 
					#include <xkbcommon/xkbcommon-names.h>
 | 
				
			||||||
 | 
					#include <strings.h>
 | 
				
			||||||
#include "sway/commands.h"
 | 
					#include "sway/commands.h"
 | 
				
			||||||
#include "sway/config.h"
 | 
					#include "sway/config.h"
 | 
				
			||||||
 | 
					#include "sway/input_state.h"
 | 
				
			||||||
#include "list.h"
 | 
					#include "list.h"
 | 
				
			||||||
#include "log.h"
 | 
					#include "log.h"
 | 
				
			||||||
#include "stringop.h"
 | 
					#include "stringop.h"
 | 
				
			||||||
| 
						 | 
					@ -52,6 +54,12 @@ struct cmd_results *cmd_bindsym(int argc, char **argv) {
 | 
				
			||||||
		// Check for xkb key
 | 
							// Check for xkb key
 | 
				
			||||||
		xkb_keysym_t sym = xkb_keysym_from_name(split->items[i],
 | 
							xkb_keysym_t sym = xkb_keysym_from_name(split->items[i],
 | 
				
			||||||
				XKB_KEYSYM_CASE_INSENSITIVE);
 | 
									XKB_KEYSYM_CASE_INSENSITIVE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Check for mouse binding
 | 
				
			||||||
 | 
							if (strncasecmp(split->items[i], "button", strlen("button")) == 0 &&
 | 
				
			||||||
 | 
									strlen(split->items[i]) == strlen("button0")) {
 | 
				
			||||||
 | 
								sym = ((char *)split->items[i])[strlen("button")] - '1' + M_LEFT_CLICK;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (!sym) {
 | 
							if (!sym) {
 | 
				
			||||||
			free_sway_binding(binding);
 | 
								free_sway_binding(binding);
 | 
				
			||||||
			free_flat_list(split);
 | 
								free_flat_list(split);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -917,6 +917,26 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
 | 
				
			||||||
	// Update view pointer is on
 | 
						// Update view pointer is on
 | 
				
			||||||
	pointer_state.view = container_under_pointer();
 | 
						pointer_state.view = container_under_pointer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct sway_mode *mode = config->current_mode;
 | 
				
			||||||
 | 
						// handle bindings
 | 
				
			||||||
 | 
						for (int i = 0; i < mode->bindings->length; ++i) {
 | 
				
			||||||
 | 
							struct sway_binding *binding = mode->bindings->items[i];
 | 
				
			||||||
 | 
							if ((modifiers->mods ^ binding->modifiers) == 0) {
 | 
				
			||||||
 | 
								switch (state) {
 | 
				
			||||||
 | 
									case WLC_BUTTON_STATE_PRESSED: {
 | 
				
			||||||
 | 
										if (!binding->release && handle_bindsym(binding, button, 0)) {
 | 
				
			||||||
 | 
											return EVENT_HANDLED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									case WLC_BUTTON_STATE_RELEASED:
 | 
				
			||||||
 | 
										if (binding->release && handle_bindsym(binding, button, 0)) {
 | 
				
			||||||
 | 
											return EVENT_HANDLED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Update pointer_state
 | 
						// Update pointer_state
 | 
				
			||||||
	switch (button) {
 | 
						switch (button) {
 | 
				
			||||||
	case M_LEFT_CLICK:
 | 
						case M_LEFT_CLICK:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue