Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSebastian Parborg <zeddb>2019-01-04 16:23:49 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-04 16:45:16 +0300
commite571f0255f2b045efb0525ebe104322bc331d584 (patch)
tree931d8532d9c8785cdaa52e7a50a89516104965b7 /source
parentf2ebb7bb793308a9d222f67ef93fe2a2c014d414 (diff)
Fix T59946: multiple quit dialogs possible.
Differential Revision: https://developer.blender.org/D4147
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface_region_menu_popup.c16
-rw-r--r--source/blender/windowmanager/intern/wm_window.c4
3 files changed, 21 insertions, 1 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index c525d9cffe6..2e31a1a9ae5 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -493,6 +493,8 @@ void UI_popup_block_ex(struct bContext *C, uiBlockCreateFunc func, uiBlockHandle
void UI_popup_block_close(struct bContext *C, struct wmWindow *win, uiBlock *block);
+bool UI_popup_block_name_exists(struct bContext *C, const char *name);
+
/* Blocks
*
* Functions for creating, drawing and freeing blocks. A Block is a
diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c
index bdac03de86b..e136614d30e 100644
--- a/source/blender/editors/interface/interface_region_menu_popup.c
+++ b/source/blender/editors/interface/interface_region_menu_popup.c
@@ -648,4 +648,20 @@ void UI_popup_block_close(bContext *C, wmWindow *win, uiBlock *block)
}
}
+bool UI_popup_block_name_exists(bContext *C, const char *name)
+{
+ bScreen *sc = CTX_wm_screen(C);
+ uiBlock *block;
+ ARegion *ar;
+
+ for (ar = sc->regionbase.first; ar; ar = ar->next) {
+ for (block = ar->uiblocks.first; block; block = block->next) {
+ if (STREQ(block->name, name)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
/** \} */
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 8be35c10ae9..281a556a62d 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -444,7 +444,9 @@ static void wm_confirm_quit(bContext *C)
wmWindow *win = CTX_wm_window(C);
if (GHOST_SupportsNativeDialogs() == 0) {
- UI_popup_block_invoke(C, block_create_confirm_quit, NULL);
+ if (!UI_popup_block_name_exists(C, "confirm_quit_popup")) {
+ UI_popup_block_invoke(C, block_create_confirm_quit, NULL);
+ }
}
else if (GHOST_confirmQuit(win->ghostwin)) {
wm_exit_schedule_delayed(C);