Bug 659406 - Abstract what triggers a context menu
Add gdk_event_triggers_context_menu(), using the new modifier abstraction API. Remove _gtk_button_event_triggers_context_menu() and port all callers.
This commit is contained in:
		 Michael Natterer
					Michael Natterer
				
			
				
					committed by
					
						 Michael Natterer
						Michael Natterer
					
				
			
			
				
	
			
			
			 Michael Natterer
						Michael Natterer
					
				
			
						parent
						
							27cbbc4a7d
						
					
				
				
					commit
					2d3db3421f
				
			| @ -1448,6 +1448,56 @@ gdk_event_request_motions (const GdkEventMotion *event) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * gdk_event_triggers_context_menu: | ||||
|  * @event: a #GdkEvent, currently only button events are meaningful values | ||||
|  * | ||||
|  * This function returns whether a #GdkEventButton should trigger a | ||||
|  * context menu, according to platform conventions. The right mouse | ||||
|  * button always triggers context menus. Additionally, if | ||||
|  * gdk_keymap_get_modifier_mask() returns a non-0 mask for | ||||
|  * %GDK_MODIFIER_INTENT_CONTEXT_MENU, then the left mouse button will | ||||
|  * also trigger a context menu if this modifier is pressed. | ||||
|  * | ||||
|  * This function should always be used instead of simply checking for | ||||
|  * event->button == 3. | ||||
|  * | ||||
|  * Returns: %TRUE if the event should trigger a context menu. | ||||
|  * | ||||
|  * Since: 3.4 | ||||
|  **/ | ||||
| gboolean | ||||
| gdk_event_triggers_context_menu (const GdkEvent *event) | ||||
| { | ||||
|   g_return_val_if_fail (event != NULL, FALSE); | ||||
|  | ||||
|   if (event->type == GDK_BUTTON_PRESS) | ||||
|     { | ||||
|       const GdkEventButton *bevent = (const GdkEventButton *) event; | ||||
|       GdkDisplay *display; | ||||
|       GdkModifierType modifier; | ||||
|  | ||||
|       g_return_val_if_fail (GDK_IS_WINDOW (bevent->window), FALSE); | ||||
|  | ||||
|       if (bevent->button == 3 && | ||||
|           ! (bevent->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK))) | ||||
|         return TRUE; | ||||
|  | ||||
|       display = gdk_window_get_display (bevent->window); | ||||
|  | ||||
|       modifier = gdk_keymap_get_modifier_mask (gdk_keymap_get_for_display (display), | ||||
|                                                GDK_MODIFIER_INTENT_CONTEXT_MENU); | ||||
|  | ||||
|       if (modifier != 0 && | ||||
|           bevent->button == 1 && | ||||
|           ! (bevent->state & (GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) && | ||||
|           (bevent->state & modifier)) | ||||
|         return TRUE; | ||||
|     } | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| gdk_events_get_axis_distances (GdkEvent *event1, | ||||
|                                GdkEvent *event2, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user