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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-05-17 11:56:36 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-05-17 12:17:45 +0300
commit12e523d12c88d05d220f426bdb08525a572649d6 (patch)
tree019d4d9233fcafdec11ddd391c775d8418de642b /source/blender/windowmanager
parent35a298db52094771c34320f8f1dc1d103ba8373c (diff)
Fix menu navigation and modal tools affecting the active region.
We updated the active region during redraw to fix missing updates on file load, restrict it more now to avoid unwanted updates.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c1
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c2
-rw-r--r--source/blender/windowmanager/intern/wm_window.c16
3 files changed, 13 insertions, 6 deletions
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index c7cd381747a..af70b3f1a5b 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -811,7 +811,6 @@ void wm_draw_update(bContext *C)
wm_window_make_drawable(wm, win);
/* notifiers for screen redraw */
- ED_screen_set_active_region(C, &win->eventstate->x);
ED_screen_ensure_updated(wm, win, screen);
wm_draw_window(C, win);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index b141433a58f..7963bf16534 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2818,7 +2818,7 @@ void wm_event_do_handlers(bContext *C)
/* Note: setting subwin active should be done here, after modal handlers have been done */
if (event->type == MOUSEMOVE) {
/* state variables in screen, cursors. Also used in wm_draw.c, fails for modal handlers though */
- ED_screen_set_active_region(C, &event->x);
+ ED_screen_set_active_region(C, win, &event->x);
/* for regions having custom cursors */
wm_paintcursor_test(C, event);
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 2d94cc1dae7..2c28819ee58 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -608,6 +608,16 @@ void WM_window_set_dpi(wmWindow *win)
BLF_default_dpi(U.pixelsize * U.dpi);
}
+static void wm_window_ensure_eventstate(wmWindow *win)
+{
+ if (win->eventstate) {
+ return;
+ }
+
+ win->eventstate = MEM_callocN(sizeof(wmEvent), "window event state");
+ wm_get_cursor_position(win, &win->eventstate->x, &win->eventstate->y);
+}
+
/* belongs to below */
static void wm_window_ghostwindow_add(wmWindowManager *wm, const char *title, wmWindow *win)
{
@@ -651,8 +661,7 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, const char *title, wm
win->ghostwin = ghostwin;
GHOST_SetWindowUserData(ghostwin, win); /* pointer back */
- if (win->eventstate == NULL)
- win->eventstate = MEM_callocN(sizeof(wmEvent), "window event state");
+ wm_window_ensure_eventstate(win);
/* store actual window size in blender window */
bounds = GHOST_GetClientBounds(win->ghostwin);
@@ -758,8 +767,7 @@ void wm_window_ghostwindows_ensure(wmWindowManager *wm)
wm_window_ghostwindow_add(wm, "Blender", win);
}
/* happens after fileread */
- if (win->eventstate == NULL)
- win->eventstate = MEM_callocN(sizeof(wmEvent), "window event state");
+ wm_window_ensure_eventstate(win);
/* add keymap handlers (1 handler for all keys in map!) */
keymap = WM_keymap_find(wm->defaultconf, "Window", 0, 0);