Add options to specify mouse event
This commit is contained in:
		
							parent
							
								
									6d0e20e40b
								
							
						
					
					
						commit
						fbcc26b5e1
					
				
							
								
								
									
										11
									
								
								dunstrc
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								dunstrc
									
									
									
									
									
								
							| @ -258,6 +258,17 @@ | |||||||
|     # Context menu. |     # Context menu. | ||||||
|     context = ctrl+shift+period |     context = ctrl+shift+period | ||||||
| 
 | 
 | ||||||
|  | # Defines action of mouse event | ||||||
|  | # Possible values are: | ||||||
|  | # * do_action: If the notification has exactly one action, or one is marked as default, | ||||||
|  | #              invoke it. If there are multiple and no default, open the context menu. | ||||||
|  | # * close_current: Close current notification. | ||||||
|  | # * push_all: Push all waiting and displayed notifications to history. | ||||||
|  | [mouse] | ||||||
|  |     left_click = close_current | ||||||
|  |     middle_click = do_action | ||||||
|  |     right_click = push_all | ||||||
|  | 
 | ||||||
| [urgency_low] | [urgency_low] | ||||||
|     # IMPORTANT: colors have to be defined in quotation marks. |     # IMPORTANT: colors have to be defined in quotation marks. | ||||||
|     # Otherwise the "#" and following would be interpreted as a comment. |     # Otherwise the "#" and following would be interpreted as a comment. | ||||||
|  | |||||||
| @ -516,6 +516,70 @@ void load_settings(char *cmdline_config_path) | |||||||
|                 ); |                 ); | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         { | ||||||
|  |                 char *c = option_get_string( | ||||||
|  |                         "mouse", | ||||||
|  |                         "left_click", "-left_click", "close_current", | ||||||
|  |                         "Action of Left click event" | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 if (strlen(c) > 0) { | ||||||
|  |                         if (strcmp(c, "do_action") == 0) | ||||||
|  |                                 settings.left_click = do_action; | ||||||
|  |                         else if (strcmp(c, "close_current") == 0) | ||||||
|  |                                 settings.left_click = close_current; | ||||||
|  |                         else if (strcmp(c, "push_all") == 0) | ||||||
|  |                                 settings.left_click = push_all; | ||||||
|  |                         else { | ||||||
|  |                                 LOG_W("Unknown left_click position: '%s'", c); | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |                 g_free(c); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         { | ||||||
|  |                 char *c = option_get_string( | ||||||
|  |                         "mouse", | ||||||
|  |                         "middle_click", "-middel_click", "do_action", | ||||||
|  |                         "Action of middle click event" | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 if (strlen(c) > 0) { | ||||||
|  |                         if (strcmp(c, "do_action") == 0) | ||||||
|  |                                 settings.middle_click = do_action; | ||||||
|  |                         else if (strcmp(c, "close_current") == 0) | ||||||
|  |                                 settings.middle_click = close_current; | ||||||
|  |                         else if (strcmp(c, "push_all") == 0) | ||||||
|  |                                 settings.middle_click = push_all; | ||||||
|  |                         else { | ||||||
|  |                                 LOG_W("Unknown middle_click position: '%s'", c); | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |                 g_free(c); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         { | ||||||
|  |                 char *c = option_get_string( | ||||||
|  |                         "mouse", | ||||||
|  |                         "right_click", "-right_click", "push_all", | ||||||
|  |                         "Action of right click event" | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 if (strlen(c) > 0) { | ||||||
|  |                         if (strcmp(c, "do_action") == 0) | ||||||
|  |                                 settings.right_click = do_action; | ||||||
|  |                         else if (strcmp(c, "close_current") == 0) | ||||||
|  |                                 settings.right_click = close_current; | ||||||
|  |                         else if (strcmp(c, "push_all") == 0) | ||||||
|  |                                 settings.right_click = push_all; | ||||||
|  |                         else { | ||||||
|  |                                 LOG_W("Unknown right_click position: '%s'", c); | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |                 g_free(c); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         settings.lowbgcolor = option_get_string( |         settings.lowbgcolor = option_get_string( | ||||||
|                 "urgency_low", |                 "urgency_low", | ||||||
|                 "background", "-lb", defaults.lowbgcolor, |                 "background", "-lb", defaults.lowbgcolor, | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ enum icon_position_t { icons_left, icons_right, icons_off }; | |||||||
| enum separator_color { SEP_FOREGROUND, SEP_AUTO, SEP_FRAME, SEP_CUSTOM }; | enum separator_color { SEP_FOREGROUND, SEP_AUTO, SEP_FRAME, SEP_CUSTOM }; | ||||||
| enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD }; | enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD }; | ||||||
| enum markup_mode { MARKUP_NULL, MARKUP_NO, MARKUP_STRIP, MARKUP_FULL }; | enum markup_mode { MARKUP_NULL, MARKUP_NO, MARKUP_STRIP, MARKUP_FULL }; | ||||||
|  | enum mouse_action { do_action, close_current, push_all }; | ||||||
| 
 | 
 | ||||||
| struct geometry { | struct geometry { | ||||||
|         int x; |         int x; | ||||||
| @ -85,6 +86,9 @@ typedef struct _settings { | |||||||
|         keyboard_shortcut context_ks; |         keyboard_shortcut context_ks; | ||||||
|         bool force_xinerama; |         bool force_xinerama; | ||||||
|         int corner_radius; |         int corner_radius; | ||||||
|  |         enum mouse_action left_click; | ||||||
|  |         enum mouse_action middle_click; | ||||||
|  |         enum mouse_action right_click; | ||||||
| } settings_t; | } settings_t; | ||||||
| 
 | 
 | ||||||
| extern settings_t settings; | extern settings_t settings; | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								src/x11/x.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/x11/x.c
									
									
									
									
									
								
							| @ -386,13 +386,27 @@ bool x_is_idle(void) | |||||||
|  */ |  */ | ||||||
| static void x_handle_click(XEvent ev) | static void x_handle_click(XEvent ev) | ||||||
| { | { | ||||||
|         if (ev.xbutton.button == Button3) { |         enum mouse_action act; | ||||||
|  | 
 | ||||||
|  |         switch (ev.xbutton.button) { | ||||||
|  |                 case Button1: | ||||||
|  |                         act = settings.left_click; | ||||||
|  |                         break; | ||||||
|  |                 case Button2: | ||||||
|  |                         act = settings.middle_click; | ||||||
|  |                         break; | ||||||
|  |                 case Button3: | ||||||
|  |                         act = settings.right_click; | ||||||
|  |                         break; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (act == push_all) { | ||||||
|                 queues_history_push_all(); |                 queues_history_push_all(); | ||||||
| 
 | 
 | ||||||
|                 return; |                 return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (ev.xbutton.button == Button1 || ev.xbutton.button == Button2) { |         if (act == do_action || act == close_current) { | ||||||
|                 int y = settings.separator_height; |                 int y = settings.separator_height; | ||||||
|                 notification *n = NULL; |                 notification *n = NULL; | ||||||
|                 int first = true; |                 int first = true; | ||||||
| @ -408,7 +422,7 @@ static void x_handle_click(XEvent ev) | |||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if (n) { |                 if (n) { | ||||||
|                         if (ev.xbutton.button == Button1) |                         if (act == close_current) | ||||||
|                                 queues_notification_close(n, REASON_USER); |                                 queues_notification_close(n, REASON_USER); | ||||||
|                         else |                         else | ||||||
|                                 notification_do_action(n); |                                 notification_do_action(n); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Zijung Chueh
						Zijung Chueh