[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25211] trunk/blender/source/blender: UI: fix trailing tooltips when deactivating window, and when opening

Brecht Van Lommel brecht at blender.org
Tue Dec 8 14:02:03 CET 2009


Revision: 25211
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25211
Author:   blendix
Date:     2009-12-08 14:02:03 +0100 (Tue, 08 Dec 2009)

Log Message:
-----------
UI: fix trailing tooltips when deactivating window, and when opening
right click menu. Added window deactivate event for this.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c
    trunk/blender/source/blender/windowmanager/wm_event_types.h

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-12-08 12:59:21 UTC (rev 25210)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-12-08 13:02:03 UTC (rev 25211)
@@ -3405,8 +3405,9 @@
 
 	if((but->rnapoin.data && but->rnaprop)==0 && but->optype==NULL)
 		return 0;
+	
+	button_timers_tooltip_remove(C, but);
 
-
 	if(but->rnaprop)
 		name= (char*)RNA_property_ui_name(but->rnaprop);
 	else if (but->optype)
@@ -3604,7 +3605,7 @@
 				char buf[512];
 				
 				if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) {
-					
+					button_timers_tooltip_remove(C, but);
 					uiPupBlock(C, menu_change_hotkey, but);
 
 				}
@@ -3832,12 +3833,14 @@
 	return 1;
 }
 
-static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y)
+static uiBut *ui_but_find_mouse_over(wmWindow *win, ARegion *ar, int x, int y)
 {
 	uiBlock *block;
 	uiBut *but, *butover= NULL;
 	int mx, my;
 
+	if(!win->active)
+		return NULL;
 	if(!ui_mouse_inside_region(ar, x, y))
 		return NULL;
 
@@ -3859,12 +3862,14 @@
 	return butover;
 }
 
-static uiBut *ui_list_find_mouse_over(ARegion *ar, int x, int y)
+static uiBut *ui_list_find_mouse_over(wmWindow *win, ARegion *ar, int x, int y)
 {
 	uiBlock *block;
 	uiBut *but;
 	int mx, my;
 
+	if(!win->active)
+		return NULL;
 	if(!ui_mouse_inside_region(ar, x, y))
 		return NULL;
 
@@ -4171,10 +4176,11 @@
 
 static int ui_handle_button_over(bContext *C, wmEvent *event, ARegion *ar)
 {
+	wmWindow *win= CTX_wm_window(C);
 	uiBut *but;
 
 	if(event->type == MOUSEMOVE) {
-		but= ui_but_find_mouse_over(ar, event->x, event->y);
+		but= ui_but_find_mouse_over(win, ar, event->x, event->y);
 		if(but)
 			button_activate_init(C, ar, but, BUTTON_ACTIVATE_OVER);
 	}
@@ -4240,14 +4246,18 @@
 	
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
 		switch(event->type) {
-			
+			case WINDEACTIVATE:
+				data->cancel= 1;
+				button_activate_state(C, but, BUTTON_STATE_EXIT);
+				retval= WM_UI_HANDLER_CONTINUE;
+				break;
 			case MOUSEMOVE:
 				/* verify if we are still over the button, if not exit */
 				if(!ui_mouse_inside_button(ar, but, event->x, event->y)) {
 					data->cancel= 1;
 					button_activate_state(C, but, BUTTON_STATE_EXIT);
 				}
-				else if(ui_but_find_mouse_over(ar, event->x, event->y) != but) {
+				else if(ui_but_find_mouse_over(data->window, ar, event->x, event->y) != but) {
 					data->cancel= 1;
 					button_activate_state(C, but, BUTTON_STATE_EXIT);
 				}
@@ -4295,8 +4305,12 @@
 	}
 	else if(data->state == BUTTON_STATE_WAIT_RELEASE) {
 		switch(event->type) {
+			case WINDEACTIVATE:
+				data->cancel= 1;
+				button_activate_state(C, but, BUTTON_STATE_EXIT);
+				break;
+
 			case MOUSEMOVE:
-				
 				if(ELEM(but->type,LINK, INLINK)) {
 					but->flag |= UI_SELECT;
 					ui_do_button(C, block, but, event);
@@ -4341,7 +4355,7 @@
 	else if(data->state == BUTTON_STATE_MENU_OPEN) {
 		switch(event->type) {
 			case MOUSEMOVE: {
-				uiBut *bt= ui_but_find_mouse_over(ar, event->x, event->y);
+				uiBut *bt= ui_but_find_mouse_over(data->window, ar, event->x, event->y);
 
 				if(bt && bt->active != data) {
 					if(but->type != COL) /* exception */
@@ -4376,7 +4390,8 @@
 
 static int ui_handle_list_event(bContext *C, wmEvent *event, ARegion *ar)
 {
-	uiBut *but= ui_list_find_mouse_over(ar, event->x, event->y);
+	wmWindow *win= CTX_wm_window(C);
+	uiBut *but= ui_list_find_mouse_over(win, ar, event->x, event->y);
 	int retval= WM_UI_HANDLER_CONTINUE;
 	int value, min, max;
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-08 12:59:21 UTC (rev 25210)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-08 13:02:03 UTC (rev 25211)
@@ -226,6 +226,7 @@
 	{PAGEDOWNKEY, "PAGE_DOWN", 0, "Page Down", ""},
 	{ENDKEY, "END", 0, "End", ""},
 	{0, "", 0, NULL, NULL},
+	{WINDEACTIVATE, "WINDOW_DEACTIVATE", 0, "Window Deactivate", ""},
 	{TIMER, "TIMER", 0, "Timer", ""},
 	{TIMER0, "TIMER0", 0, "Timer 0", ""},
 	{TIMER1, "TIMER1", 0, "Timer 1", ""},

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-08 12:59:21 UTC (rev 25210)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-08 13:02:03 UTC (rev 25211)
@@ -837,7 +837,7 @@
 static int wm_event_always_pass(wmEvent *event)
 {
 	/* some events we always pass on, to ensure proper communication */
-	return ELEM4(event->type, TIMER, TIMER0, TIMER1, TIMER2);
+	return ELEM5(event->type, TIMER, TIMER0, TIMER1, TIMER2, WINDEACTIVATE);
 }
 
 /* operator exists */
@@ -1812,5 +1812,13 @@
 		case GHOST_kEventUnknown:
 		case GHOST_kNumEventTypes:
 			break;
+
+		case GHOST_kEventWindowDeactivate: {
+			event.type= WINDEACTIVATE;
+			wm_event_add(win, &event);
+
+			break;
+		}
+
 	}
 }

Modified: trunk/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_window.c	2009-12-08 12:59:21 UTC (rev 25210)
+++ trunk/blender/source/blender/windowmanager/intern/wm_window.c	2009-12-08 13:02:03 UTC (rev 25211)
@@ -574,6 +574,7 @@
 		
 		switch(type) {
 			case GHOST_kEventWindowDeactivate:
+				wm_event_add_ghostevent(win, type, data);
 				win->active= 0; /* XXX */
 				break;
 			case GHOST_kEventWindowActivate: 

Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm_event_types.h	2009-12-08 12:59:21 UTC (rev 25210)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h	2009-12-08 13:02:03 UTC (rev 25211)
@@ -69,6 +69,7 @@
 
 /* SYSTEM : 0x01x */
 #define	INPUTCHANGE		0x0103	/* input connected or disconnected */
+#define WINDEACTIVATE	0x0104	/* window is deactivated, focus lost */
 
 #define TIMER			0x0110	/* timer event, passed on to all queues */
 #define TIMER0			0x0111	/* timer event, slot for internal use */





More information about the Bf-blender-cvs mailing list