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:
authorCampbell Barton <ideasman42@gmail.com>2020-05-08 11:57:32 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-08 11:57:32 +0300
commitc532c6c10913540d748392b61d176ae7e65b8c38 (patch)
treeed910bcc589578532faf3c5bbded4e024225ba4e /source
parentfc3cc2ca3a2bfb3b2e63a7e64e0b0a4fa92aad38 (diff)
parentb1c4db1fbe8075e57c7c174ffd07481c3d56fee4 (diff)
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 560581a56e2..75cd04b70e9 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3110,6 +3110,25 @@ static bool wm_event_pie_filter(wmWindow *win, const wmEvent *event)
}
}
+/**
+ * Account for the special case when events are being handled and a file is loaded.
+ * In this case event handling exits early, however when "Load UI" is disabled
+ * the even will still be in #wmWindow.queue.
+ *
+ * Without this it's possible to continuously handle the same event, see: T76484.
+ */
+static void wm_event_free_and_remove_from_queue_if_valid(wmEvent *event)
+{
+ LISTBASE_FOREACH (wmWindowManager *, wm, &G_MAIN->wm) {
+ LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
+ if (BLI_remlink_safe(&win->queue, event)) {
+ wm_event_free(event);
+ return;
+ }
+ }
+ }
+}
+
/* called in main loop */
/* goes over entire hierarchy: events -> window -> screen -> area -> region */
void wm_event_do_handlers(bContext *C)
@@ -3232,6 +3251,7 @@ void wm_event_do_handlers(bContext *C)
/* fileread case */
if (CTX_wm_window(C) == NULL) {
+ wm_event_free_and_remove_from_queue_if_valid(event);
return;
}
@@ -3306,6 +3326,7 @@ void wm_event_do_handlers(bContext *C)
/* fileread case (python), [#29489] */
if (CTX_wm_window(C) == NULL) {
+ wm_event_free_and_remove_from_queue_if_valid(event);
return;
}
@@ -3340,6 +3361,7 @@ void wm_event_do_handlers(bContext *C)
/* fileread case */
if (CTX_wm_window(C) == NULL) {
+ wm_event_free_and_remove_from_queue_if_valid(event);
return;
}
}