[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