[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17692] branches/blender2.5/blender/source /blender/editors/interface/interface_ops.c: 2.5

Ton Roosendaal ton at blender.org
Wed Dec 3 15:22:44 CET 2008


Revision: 17692
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17692
Author:   ton
Date:     2008-12-03 15:22:42 +0100 (Wed, 03 Dec 2008)

Log Message:
-----------
2.5

Fix: the main button handler was swallowing all events. Now every button
type returns 'handled' only if it did something, so other events get nicely
processed.

This will enable MMB pan in dataviewer.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c	2008-12-03 13:44:16 UTC (rev 17691)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c	2008-12-03 14:22:42 UTC (rev 17692)
@@ -1331,32 +1331,40 @@
 
 /* ***************** events for different button types *************** */
 
-static void ui_do_but_BUT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_BUT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
-		if(event->type == LEFTMOUSE && event->val)
+		if(event->type == LEFTMOUSE && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_WAIT_RELEASE);
-		else if(ELEM(event->type, PADENTER, RETKEY) && event->val)
+			return 1;
+		}
+		else if(ELEM(event->type, PADENTER, RETKEY) && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_WAIT_FLASH);
+			return 1;
+		}
 	}
 	else if(data->state == BUTTON_STATE_WAIT_RELEASE) {
 		if(event->type == LEFTMOUSE && event->val==0) {
 			if(!(but->flag & UI_SELECT))
 				data->cancel= 1;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			return 1;
 		}
 	}
+	return 0;
 }
 
-static void ui_do_but_KEYEVT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
-		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val)
+		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
+			return 1;
+		}
 	}
 	else if(data->state == BUTTON_STATE_WAIT_KEY_EVENT) {
 		if(event->type == MOUSEMOVE)
-			return;
+			return 0;
 
 		/* XXX 2.50 missing function */
 #if 0
@@ -1370,36 +1378,50 @@
 		}
 #endif
 	}
+	return 0;
 }
 
-static void ui_do_but_TEX(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_TEX(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
-		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val)
+		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
+			return 1;
+		}
 	}
-	else if(data->state == BUTTON_STATE_TEXT_EDITING)
+	else if(data->state == BUTTON_STATE_TEXT_EDITING) {
 		ui_do_but_textedit(C, block, but, data, event);
-	else if(data->state == BUTTON_STATE_TEXT_SELECTING)
+		return 1;
+	}
+	else if(data->state == BUTTON_STATE_TEXT_SELECTING) {
 		ui_do_but_textedit_select(C, block, but, data, event);
+		return 1;
+	}
+	return 0;
 }
 
-static void ui_do_but_TOG(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_TOG(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
 		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val) {
 			data->togdual= event->ctrl;
 			data->togonly= !event->shift;
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			return 1;
 		}
 	}
+	return 0;
 }
 
-static void ui_do_but_EXIT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_EXIT(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
-	if(data->state == BUTTON_STATE_HIGHLIGHT)
-		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val)
+	if(data->state == BUTTON_STATE_HIGHLIGHT) {
+		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			return 1;
+		}
+	}
+	return 0;
 }
 
 static int ui_numedit_but_NUM(uiBut *but, uiActivateBut *data, float fac, int snap, int mx)
@@ -1492,10 +1514,11 @@
 	return changed;
 }
 
-static void ui_do_but_NUM(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_NUM(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	int mx, my, click= 0;
-
+	int handled= 0;
+	
 	mx= event->x;
 	my= event->y;
 	ui_window_to_block(data->region, block, &mx, &my);
@@ -1504,11 +1527,13 @@
 		if(event->val) {
 			if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->shift) {
 				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
+				handled= 1;
 			}
 			else if(event->type == LEFTMOUSE) {
 				data->dragstartx= mx;
 				data->draglastx= mx;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
+				handled= 1;
 			}
 			else if(ELEM(event->type, PADENTER, RETKEY) && event->val)
 				click= 1;
@@ -1542,12 +1567,17 @@
 			if(ui_numedit_but_NUM(but, data, fac, snap, mx))
 				ui_numedit_apply(C, block, but, data);
 		}
+		handled= 1;
 	}
-	else if(data->state == BUTTON_STATE_TEXT_EDITING)
+	else if(data->state == BUTTON_STATE_TEXT_EDITING) {
 		ui_do_but_textedit(C, block, but, data, event);
-	else if(data->state == BUTTON_STATE_TEXT_SELECTING)
+		handled= 1;
+	}
+	else if(data->state == BUTTON_STATE_TEXT_SELECTING) {
 		ui_do_but_textedit_select(C, block, but, data, event);
-
+		handled= 1;
+	}
+	
 	if(click) {
 		/* we can click on the side arrows to increment/decrement,
 		 * or click inside to edit the value directly */
@@ -1602,7 +1632,10 @@
 			else
 				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
 		}
+		handled= 1;
 	}
+	
+	return handled;
 }
 
 static int ui_numedit_but_SLI(uiBut *but, uiActivateBut *data, int shift, int ctrl, int mx)
@@ -1665,9 +1698,10 @@
 	return changed;
 }
 
-static void ui_do_but_SLI(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_SLI(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	int mx, my, click= 0;
+	int handled= 0;
 
 	mx= event->x;
 	my= event->y;
@@ -1687,6 +1721,8 @@
 			}
 			else
 				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
+			
+			handled= 1;
 		}
 	}
 	else if(data->state == BUTTON_STATE_NUM_EDITING) {
@@ -1700,11 +1736,16 @@
 			if(ui_numedit_but_SLI(but, data, event->shift, event->ctrl, mx))
 				ui_numedit_apply(C, block, but, data);
 		}
+		handled= 1;
 	}
-	else if(data->state == BUTTON_STATE_TEXT_EDITING)
+	else if(data->state == BUTTON_STATE_TEXT_EDITING) {
 		ui_do_but_textedit(C, block, but, data, event);
-	else if(data->state == BUTTON_STATE_TEXT_SELECTING)
+		handled= 1;
+	}
+	else if(data->state == BUTTON_STATE_TEXT_SELECTING) {
 		ui_do_but_textedit_select(C, block, but, data, event);
+		handled= 1;
+	}
 
 	if(click) {
 		float f, h;
@@ -1743,14 +1784,19 @@
 		}
 
 		button_activate_state(C, but, BUTTON_STATE_EXIT);
+		handled= 1;
 	}
+	
+	return handled;
 }
 
-static void ui_do_but_BLOCK(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
-		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val)
+		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val) {
 			button_activate_state(C, but, BUTTON_STATE_BLOCK_OPEN);
+			return 1;
+		}
 	}
 	else if(data->state == BUTTON_STATE_BLOCK_OPEN) {
 		if(event->type == MESSAGE) {
@@ -1772,9 +1818,12 @@
 				else
 					/* ok/cancel, we exit and will send message in _exit */
 					button_activate_state(C, but, BUTTON_STATE_EXIT);
+
+				return 1;
 			}
 		}
 	}
+	return 0;
 }
 
 static int ui_numedit_but_NORMAL(uiBut *but, uiActivateBut *data, int mx, int my)
@@ -1833,7 +1882,7 @@
 	return changed;
 }
 
-static void ui_do_but_NORMAL(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_NORMAL(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	int mx, my;
 
@@ -1852,6 +1901,8 @@
 			/* also do drag the first time */
 			if(ui_numedit_but_NORMAL(but, data, mx, my))
 				ui_numedit_apply(C, block, but, data);
+			
+			return 1;
 		}
 	}
 	else if(data->state == BUTTON_STATE_NUM_EDITING) {
@@ -1863,7 +1914,10 @@
 		}
 		else if(event->type==LEFTMOUSE && event->val==0)
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+		return 1;
 	}
+	
+	return 0;
 }
 
 static int ui_numedit_but_HSVCUBE(uiBut *but, uiActivateBut *data, int mx, int my)
@@ -1903,7 +1957,7 @@
 	return changed;
 }
 
-static void ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	int mx, my;
 
@@ -1922,6 +1976,8 @@
 			/* also do drag the first time */
 			if(ui_numedit_but_HSVCUBE(but, data, mx, my))
 				ui_numedit_apply(C, block, but, data);
+			
+			return 1;
 		}
 	}
 	else if(data->state == BUTTON_STATE_NUM_EDITING) {
@@ -1933,7 +1989,10 @@
 		}
 		else if(event->type==LEFTMOUSE && event->val==0)
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+		
+		return 1;
 	}
+	return 0;
 }
 
 static int verg_colorband(const void *a1, const void *a2)
@@ -1982,7 +2041,7 @@
 	return changed;
 }
 
-static void ui_do_but_COLORBAND(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_COLORBAND(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	ColorBand *coba;
 	CBData *cbd;
@@ -2038,6 +2097,7 @@
 				data->dragcbd= coba->data + coba->cur;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 			}
+			return 1;
 		}
 	}
 	else if(data->state == BUTTON_STATE_NUM_EDITING) {
@@ -2049,7 +2109,10 @@
 		}
 		else if(event->type==LEFTMOUSE && event->val==0)
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
+		
+		return 1;
 	}
+	return 0;
 }
 
 static int ui_numedit_but_CURVE(uiBut *but, uiActivateBut *data, int snap, int mx, int my)
@@ -2124,7 +2187,7 @@
 	return changed;
 }
 
-static void ui_do_but_CURVE(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
+static int ui_do_but_CURVE(bContext *C, uiBlock *block, uiBut *but, uiActivateBut *data, wmEvent *event)
 {
 	int mx, my, a, changed= 0;
 
@@ -2219,6 +2282,7 @@
 			data->draglasty= my;
 
 			button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
+			return 1;
 		}
 	}
 	else if(data->state == BUTTON_STATE_NUM_EDITING) {
@@ -2248,11 +2312,13 @@
 
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
 		}
+		return 1;
 	}
+	return 0;
 }
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list