@ -336,6 +336,43 @@ static void handle_view_state_request(wlc_handle view, enum wlc_view_state_bit s
 
			
		
	
		
			
				
						return ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  handle_bindsym ( struct  sway_binding  * binding )  {  
			
		
	
		
			
				
						bool  match  =  false ; 
 
			
		
	
		
			
				
						int  i ; 
 
			
		
	
		
			
				
						for  ( i  =  0 ;  i  <  binding - > keys - > length ;  + + i )  { 
 
			
		
	
		
			
				
							xkb_keysym_t  * key  =  binding - > keys - > items [ i ] ; 
 
			
		
	
		
			
				
							if  ( ( match  =  check_key ( * key ,  0 ) )  = =  false )  { 
 
			
		
	
		
			
				
								break ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( match )  { 
 
			
		
	
		
			
				
							struct  cmd_results  * res  =  handle_command ( binding - > command ) ; 
 
			
		
	
		
			
				
							if  ( res - > status  ! =  CMD_SUCCESS )  { 
 
			
		
	
		
			
				
								sway_log ( L_ERROR ,  " Command '%s' failed: %s " ,  res - > input ,  res - > error ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							free_cmd_results ( res ) ; 
 
			
		
	
		
			
				
							return  true ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  false ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  handle_bindsym_release ( struct  sway_binding  * binding )  {  
			
		
	
		
			
				
						if  ( binding - > keys - > length  = =  1 )  { 
 
			
		
	
		
			
				
							xkb_keysym_t  * key  =  binding - > keys - > items [ 0 ] ; 
 
			
		
	
		
			
				
							if  ( check_released_key ( * key ) )  { 
 
			
		
	
		
			
				
								struct  cmd_results  * res  =  handle_command ( binding - > command ) ; 
 
			
		
	
		
			
				
								if  ( res - > status  ! =  CMD_SUCCESS )  { 
 
			
		
	
		
			
				
									sway_log ( L_ERROR ,  " Command '%s' failed: %s " ,  res - > input ,  res - > error ) ; 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
								free_cmd_results ( res ) ; 
 
			
		
	
		
			
				
								return  true ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  false ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  handle_key ( wlc_handle  view ,  uint32_t  time ,  const  struct  wlc_modifiers  * modifiers ,  
			
		
	
		
			
				
							uint32_t  key ,  enum  wlc_key_state  state )  { 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -366,33 +403,6 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
 
			
		
	
		
			
				
							release_key ( sym ,  key ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						for  ( i  =  0 ;  i  <  mode - > bindings - > length ;  + + i )  { 
 
			
		
	
		
			
				
							struct  sway_binding  * binding  =  mode - > bindings - > items [ i ] ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( ( modifiers - > mods  ^  binding - > modifiers )  = =  0 )  { 
 
			
		
	
		
			
				
								bool  match  =  false ; 
 
			
		
	
		
			
				
								int  j ; 
 
			
		
	
		
			
				
								for  ( j  =  0 ;  j  <  binding - > keys - > length ;  + + j )  { 
 
			
		
	
		
			
				
									xkb_keysym_t  * key  =  binding - > keys - > items [ j ] ; 
 
			
		
	
		
			
				
									if  ( ( match  =  check_key ( * key ,  0 ) )  = =  false )  { 
 
			
		
	
		
			
				
										break ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
								if  ( match )  { 
 
			
		
	
		
			
				
									if  ( state  = =  WLC_KEY_STATE_PRESSED )  { 
 
			
		
	
		
			
				
										struct  cmd_results  * res  =  handle_command ( binding - > command ) ; 
 
			
		
	
		
			
				
										if  ( res - > status  ! =  CMD_SUCCESS )  { 
 
			
		
	
		
			
				
											sway_log ( L_ERROR ,  " Command '%s' failed: %s " ,  res - > input ,  res - > error ) ; 
 
			
		
	
		
			
				
										} 
 
			
		
	
		
			
				
										free_cmd_results ( res ) ; 
 
			
		
	
		
			
				
										return  EVENT_HANDLED ; 
 
			
		
	
		
			
				
									}  else  if  ( state  = =  WLC_KEY_STATE_RELEASED )  { 
 
			
		
	
		
			
				
										// TODO: --released
 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// handle bar modifiers pressed/released
 
 
			
		
	
		
			
				
						uint32_t  modifier ; 
 
			
		
	
		
			
				
						for  ( i  =  0 ;  i  <  config - > active_bar_modifiers - > length ;  + + i )  { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -409,6 +419,27 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						// update modifiers state
 
 
			
		
	
		
			
				
						modifiers_state_update ( modifiers - > mods ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// handle bindings
 
 
			
		
	
		
			
				
						for  ( 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_KEY_STATE_PRESSED :  { 
 
			
		
	
		
			
				
									if  ( ! binding - > release  & &  handle_bindsym ( binding ) )  { 
 
			
		
	
		
			
				
										return  EVENT_HANDLED ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
									break ; 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
								case  WLC_KEY_STATE_RELEASED : 
 
			
		
	
		
			
				
									if  ( binding - > release  & &  handle_bindsym_release ( binding ) )  { 
 
			
		
	
		
			
				
										return  EVENT_HANDLED ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
									break ; 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  EVENT_PASSTHROUGH ; 
 
			
		
	
		
			
				
					}