[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52701] trunk/blender/source/blender/ editors/interface/interface_handlers.c: UI: allow middlemouse in addition to leftmouse for clicking on various buttons ,

Brecht Van Lommel brechtvanlommel at pandora.be
Sat Dec 1 20:14:56 CET 2012


Revision: 52701
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52701
Author:   blendix
Date:     2012-12-01 19:14:55 +0000 (Sat, 01 Dec 2012)
Log Message:
-----------
UI: allow middlemouse in addition to leftmouse for clicking on various buttons,
means that if you have emulate 3 button mouse enabled and still have alt pressed
when clicking, it works.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2012-12-01 18:07:45 UTC (rev 52700)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2012-12-01 19:14:55 UTC (rev 52701)
@@ -1886,6 +1886,7 @@
 			retval = WM_UI_HANDLER_BREAK;
 			break;
 		case LEFTMOUSE:
+		case MIDDLEMOUSE:
 		{
 			/* exit on LMB only on RELEASE for searchbox, to mimic other popups, and allow multiple menu levels */
 			if (data->searchbox)
@@ -2249,11 +2250,11 @@
 static int ui_do_but_BUT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_WAIT_RELEASE);
 			return WM_UI_HANDLER_BREAK;
 		}
-		else if (event->type == LEFTMOUSE && but->block->handle) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && but->block->handle) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 			return WM_UI_HANDLER_BREAK;
 		}
@@ -2263,7 +2264,7 @@
 		}
 	}
 	else if (data->state == BUTTON_STATE_WAIT_RELEASE) {
-		if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			if (!(but->flag & UI_SELECT))
 				data->cancel = TRUE;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
@@ -2277,7 +2278,7 @@
 static int ui_do_but_HOTKEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+		if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
 			but->drawstr[0] = 0;
 			but->modifier_key = 0;
 			button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
@@ -2338,7 +2339,7 @@
 static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+		if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
 			return WM_UI_HANDLER_BREAK;
 		}
@@ -2363,7 +2364,7 @@
 static int ui_do_but_TEX(bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (ELEM(event->type, LEFTMOUSE, EVT_BUT_OPEN) && event->val == KM_PRESS) {
+		if (ELEM3(event->type, LEFTMOUSE, MIDDLEMOUSE, EVT_BUT_OPEN) && event->val == KM_PRESS) {
 			if (but->dt == UI_EMBOSSN && !event->ctrl) {
 				/* pass */
 			}
@@ -2388,7 +2389,7 @@
 static int ui_do_but_TOG(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+		if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
 			data->togdual = event->ctrl;
 			data->togonly = !event->shift;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
@@ -2404,7 +2405,7 @@
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
 
 		/* first handle click on icondrag type button */
-		if (event->type == LEFTMOUSE && but->dragpoin) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && but->dragpoin) {
 			if (ui_but_mouse_inside_icon(but, data->region, event)) {
 				
 				/* tell the button to wait and keep checking further events to
@@ -2416,7 +2417,7 @@
 			}
 		}
 		
-		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+		if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
 			int ret = WM_UI_HANDLER_BREAK;
 			/* XXX (a bit ugly) Special case handling for filebrowser drag button */
 			if (but->dragpoin && but->imb && ui_but_mouse_inside_icon(but, data->region, event)) {
@@ -2436,7 +2437,7 @@
 		/* If the mouse has been pressed and released, getting to 
 		 * this point without triggering a drag, then clear the 
 		 * drag state for this button and continue to pass on the event */
-		if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_RELEASE) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 			return WM_UI_HANDLER_CONTINUE;
 		}
@@ -2678,11 +2679,11 @@
 			click = 1;
 		}
 		else if (event->val == KM_PRESS) {
-			if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->ctrl) {
+			if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->ctrl) {
 				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
 				retval = WM_UI_HANDLER_BREAK;
 			}
-			else if (event->type == LEFTMOUSE) {
+			else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) {
 				data->dragstartx = data->draglastx = ui_is_a_warp_but(but) ? screen_mx : mx;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 				retval = WM_UI_HANDLER_BREAK;
@@ -2705,7 +2706,7 @@
 			data->escapecancel = TRUE;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			if (data->dragchange)
 				button_activate_state(C, but, BUTTON_STATE_EXIT);
 			else
@@ -2902,12 +2903,12 @@
 			click = 2;
 		}
 		else if (event->val == KM_PRESS) {
-			if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->ctrl) {
+			if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->ctrl) {
 				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
 				retval = WM_UI_HANDLER_BREAK;
 			}
 			/* alt-click on sides to get "arrows" like in NUM buttons, and match wheel usage above */
-			else if (event->type == LEFTMOUSE && event->alt) {
+			else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->alt) {
 				int halfpos = BLI_rctf_cent_x(&but->rect);
 				click = 2;
 				if (mx < halfpos)
@@ -2915,7 +2916,7 @@
 				else
 					mx = but->rect.xmax;
 			}
-			else if (event->type == LEFTMOUSE) {
+			else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) {
 				data->dragstartx = mx;
 				data->draglastx = mx;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
@@ -2938,7 +2939,7 @@
 			data->escapecancel = TRUE;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			if (data->dragchange)
 				button_activate_state(C, but, BUTTON_STATE_EXIT);
 			else
@@ -3030,7 +3031,7 @@
 
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
 		if (event->val == KM_PRESS) {
-			if (event->type == LEFTMOUSE) {
+			if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) {
 				if (horizontal) {
 					data->dragstartx = mx;
 					data->draglastx = mx;
@@ -3055,7 +3056,7 @@
 			data->escapecancel = TRUE;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
 		else if (event->type == MOUSEMOVE) {
@@ -3076,7 +3077,7 @@
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
 		
 		/* first handle click on icondrag type button */
-		if (event->type == LEFTMOUSE && but->dragpoin && event->val == KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && but->dragpoin && event->val == KM_PRESS) {
 			if (ui_but_mouse_inside_icon(but, data->region, event)) {
 				button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
 				data->dragstartx = event->x;
@@ -3086,7 +3087,7 @@
 		}
 		
 		/* regular open menu */
-		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+		if (ELEM4(event->type, LEFTMOUSE, MIDDLEMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
 			return WM_UI_HANDLER_BREAK;
 		}
@@ -3158,7 +3159,7 @@
 			return WM_UI_HANDLER_BREAK;
 		}
 		
-		if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_RELEASE) {
 			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
 			return WM_UI_HANDLER_BREAK;
 		}
@@ -3238,7 +3239,7 @@
 	ui_window_to_block(data->region, block, &mx, &my);
 
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_PRESS) {
 			data->dragstartx = mx;
 			data->dragstarty = my;
 			data->draglastx = mx;
@@ -3259,7 +3260,7 @@
 					ui_numedit_apply(C, block, but, data);
 			}
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
 
@@ -3424,7 +3425,7 @@
 	ui_window_to_block(data->region, block, &mx, &my);
 
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_PRESS) {
 			data->dragstartx = mx;
 			data->dragstarty = my;
 			data->draglastx = mx;
@@ -3493,7 +3494,7 @@
 					ui_numedit_apply(C, block, but, data);
 			}
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
 		
@@ -3623,7 +3624,7 @@
 	ui_window_to_block(data->region, block, &mx, &my);
 	
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
+		if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val == KM_PRESS) {
 			data->dragstartx = mx;
 			data->dragstarty = my;
 			data->draglastx = mx;
@@ -3703,7 +3704,7 @@
 					ui_numedit_apply(C, block, but, data);
 			}
 		}
-		else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
+		else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE) && event->val != KM_PRESS) {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list