diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2020-01-28 17:08:26 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2020-01-28 19:02:10 +0300 |
commit | a5790b26563c216dce262586369fdca1061b4850 (patch) | |
tree | b54b80fa02606e11f702f0cfecbbc025481483a4 /source | |
parent | ba01ea3f8bee7ea18e2bda07872668ab57d27ca6 (diff) |
Fix T63999: Filepath property won't open filebrowser from a popover
To issues caused this:
* The code to launch the filebrowser from a button didn't respect popup
menus stored in context
* There was actually no popup menu region stored in context for this
case. Doing so *may* introduce other issues, but the way I did things
already fixes all issues I've found.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 17 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_layout.c | 2 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 3 |
3 files changed, 15 insertions, 7 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index d3ffdd5386f..ad245353479 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -10599,15 +10599,11 @@ static void ui_region_handler_remove(bContext *C, void *UNUSED(userdata)) * number sliding, text editing, or when a menu block is open */ static int ui_handler_region_menu(bContext *C, const wmEvent *event, void *UNUSED(userdata)) { - ARegion *ar; + ARegion *menu_region = CTX_wm_menu(C); + ARegion *ar = menu_region ? menu_region : CTX_wm_region(C); uiBut *but; int retval = WM_UI_HANDLER_CONTINUE; - ar = CTX_wm_menu(C); - if (!ar) { - ar = CTX_wm_region(C); - } - but = ui_region_find_active_but(ar); if (but) { @@ -10670,9 +10666,18 @@ static int ui_handler_region_menu(bContext *C, const wmEvent *event, void *UNUSE ui_blocks_set_tooltips(ar, true); } + if (but && but->active && but->active->menu) { + /* Set correct context menu-region. The handling button above breaks if we set the region + * first, so only set it for executing the after-funcs. */ + CTX_wm_menu_set(C, but->active->menu->region); + } + /* delayed apply callbacks */ ui_apply_but_funcs_after(C); + /* Reset to previous context region. */ + CTX_wm_menu_set(C, menu_region); + /* Don't handle double-click events, * these will be converted into regular clicks which we handle. */ if (retval == WM_UI_HANDLER_CONTINUE) { diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 179fe84264f..64c0e11976b 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -1067,7 +1067,7 @@ void UI_context_active_but_prop_get_filebrowser(const bContext *C, PropertyRNA **r_prop, bool *r_is_undo) { - ARegion *ar = CTX_wm_region(C); + ARegion *ar = CTX_wm_menu(C) ? CTX_wm_menu(C) : CTX_wm_region(C); uiBlock *block; uiBut *but, *prevbut = NULL; diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 501c36286d0..95293a23c26 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -558,6 +558,9 @@ void ED_region_exit(bContext *C, ARegion *ar) WM_msgbus_clear_by_owner(wm->message_bus, ar); CTX_wm_region_set(C, prevar); + if (CTX_wm_menu(C) == ar) { + CTX_wm_region_set(C, NULL); + } } void ED_area_exit(bContext *C, ScrArea *sa) |