[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56242] trunk/blender/source/blender/ editors/interface: fix [#35055] Crash in Edit Source feature for multilevel menus

Campbell Barton ideasman42 at gmail.com
Tue Apr 23 17:22:28 CEST 2013


Revision: 56242
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56242
Author:   campbellbarton
Date:     2013-04-23 15:22:22 +0000 (Tue, 23 Apr 2013)
Log Message:
-----------
fix [#35055] Crash in Edit Source feature for multilevel menus
dont show the option when operating on a menu since its not supported.

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

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c	2013-04-23 14:58:23 UTC (rev 56241)
+++ trunk/blender/source/blender/editors/interface/interface.c	2013-04-23 15:22:22 UTC (rev 56242)
@@ -94,6 +94,13 @@
 
 static void ui_free_but(const bContext *C, uiBut *but);
 
+bool ui_block_is_menu(const uiBlock *block)
+{
+	return (((block->flag & UI_BLOCK_LOOP) != 0) &&
+	        /* non-menu popups use keep-open, so check this is off */
+	        ((block->flag & UI_BLOCK_KEEP_OPEN) == 0));
+}
+
 /* ************* window matrix ************** */
 
 void ui_block_to_window_fl(const ARegion *ar, uiBlock *block, float *x, float *y)

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-04-23 14:58:23 UTC (rev 56241)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-04-23 15:22:22 UTC (rev 56242)
@@ -5338,7 +5338,9 @@
 	}
 
 	/* perhaps we should move this into (G.debug & G_DEBUG) - campbell */
-	uiItemFullO(layout, "UI_OT_editsource", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0);
+	if (ui_block_is_menu(but->block) == false) {
+		uiItemFullO(layout, "UI_OT_editsource", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0);
+	}
 	uiItemFullO(layout, "UI_OT_edittranslation_init", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0);
 
 	uiPupMenuEnd(C, pup);

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2013-04-23 14:58:23 UTC (rev 56241)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2013-04-23 15:22:22 UTC (rev 56242)
@@ -370,6 +370,7 @@
 
 void ui_fontscale(short *points, float aspect);
 
+extern bool ui_block_is_menu(const uiBlock *block);
 extern void ui_block_to_window_fl(const struct ARegion *ar, uiBlock *block, float *x, float *y);
 extern void ui_block_to_window(const struct ARegion *ar, uiBlock *block, int *x, int *y);
 extern void ui_block_to_window_rct(const struct ARegion *ar, uiBlock *block, const rctf *graph, rcti *winr);

Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c	2013-04-23 14:58:23 UTC (rev 56241)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c	2013-04-23 15:22:22 UTC (rev 56242)
@@ -2323,7 +2323,8 @@
 	uiLayout *layout;
 	uiBut *but;
 
-	int mx, my, popup, slideout;
+	int mx, my;
+	bool popup, slideout;
 	int startx, starty, maxrow;
 
 	uiMenuCreateFunc menu_func;
@@ -2440,11 +2441,7 @@
 	pup->block = uiBeginBlock(C, NULL, __func__, UI_EMBOSSP);
 	pup->block->flag |= UI_BLOCK_NUMSELECT;  /* default menus to numselect */
 	pup->layout = uiBlockLayout(pup->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_MENU, 0, 0, 200, 0, style);
-	pup->slideout = (but &&
-	                 /* check this is a menu */
-	                 ((but->block->flag & UI_BLOCK_LOOP) != 0) &&
-	                 /* non-menu popups use keep-open, so check this is off */
-	                 ((but->block->flag & UI_BLOCK_KEEP_OPEN) == 0));
+	pup->slideout = but ? ui_block_is_menu(but->block) : false;
 	pup->but = but;
 	uiLayoutSetOperatorContext(pup->layout, WM_OP_INVOKE_REGION_WIN);
 
@@ -2452,7 +2449,7 @@
 		/* no button to start from, means we are a popup */
 		pup->mx = window->eventstate->x;
 		pup->my = window->eventstate->y;
-		pup->popup = 1;
+		pup->popup = true;
 		pup->block->flag |= UI_BLOCK_NO_FLIP;
 	}
 	/* some enums reversing is strange, currently we have no good way to




More information about the Bf-blender-cvs mailing list