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:
authorCampbell Barton <ideasman42@gmail.com>2019-11-29 19:07:00 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-11-29 19:09:04 +0300
commitf478fef9d6b0609f4bb60fd98e9292b60927b80e (patch)
tree59964110828a62432e310d786503723161e8dd05 /source/blender/windowmanager/intern/wm_tooltip.c
parent56283464b8b4b2df9c42acf1edfd810c026796a4 (diff)
Fix T72000: Key shortcuts unavailable in popovers
Diffstat (limited to 'source/blender/windowmanager/intern/wm_tooltip.c')
-rw-r--r--source/blender/windowmanager/intern/wm_tooltip.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/source/blender/windowmanager/intern/wm_tooltip.c b/source/blender/windowmanager/intern/wm_tooltip.c
index 3a219d7a573..b192ea94010 100644
--- a/source/blender/windowmanager/intern/wm_tooltip.c
+++ b/source/blender/windowmanager/intern/wm_tooltip.c
@@ -42,7 +42,8 @@ double WM_tooltip_time_closed(void)
return g_tooltip_time_closed;
}
-void WM_tooltip_immediate_init(bContext *C, wmWindow *win, ARegion *ar, wmTooltipInitFn init)
+void WM_tooltip_immediate_init(
+ bContext *C, wmWindow *win, ScrArea *sa, ARegion *ar, wmTooltipInitFn init)
{
WM_tooltip_timer_clear(C, win);
@@ -50,13 +51,14 @@ void WM_tooltip_immediate_init(bContext *C, wmWindow *win, ARegion *ar, wmToolti
if (screen->tool_tip == NULL) {
screen->tool_tip = MEM_callocN(sizeof(*screen->tool_tip), __func__);
}
+ screen->tool_tip->area_from = sa;
screen->tool_tip->region_from = ar;
screen->tool_tip->init = init;
WM_tooltip_init(C, win);
}
void WM_tooltip_timer_init_ex(
- bContext *C, wmWindow *win, ARegion *ar, wmTooltipInitFn init, double delay)
+ bContext *C, wmWindow *win, ScrArea *sa, ARegion *ar, wmTooltipInitFn init, double delay)
{
WM_tooltip_timer_clear(C, win);
@@ -65,14 +67,16 @@ void WM_tooltip_timer_init_ex(
if (screen->tool_tip == NULL) {
screen->tool_tip = MEM_callocN(sizeof(*screen->tool_tip), __func__);
}
+ screen->tool_tip->area_from = sa;
screen->tool_tip->region_from = ar;
screen->tool_tip->timer = WM_event_add_timer(wm, win, TIMER, delay);
screen->tool_tip->init = init;
}
-void WM_tooltip_timer_init(bContext *C, wmWindow *win, ARegion *ar, wmTooltipInitFn init)
+void WM_tooltip_timer_init(
+ bContext *C, wmWindow *win, ScrArea *sa, ARegion *ar, wmTooltipInitFn init)
{
- WM_tooltip_timer_init_ex(C, win, ar, init, UI_TOOLTIP_DELAY);
+ WM_tooltip_timer_init_ex(C, win, sa, ar, init, UI_TOOLTIP_DELAY);
}
void WM_tooltip_timer_clear(bContext *C, wmWindow *win)
@@ -112,11 +116,21 @@ void WM_tooltip_init(bContext *C, wmWindow *win)
}
const int pass_prev = screen->tool_tip->pass;
double pass_delay = 0.0;
- screen->tool_tip->region = screen->tool_tip->init(C,
- screen->tool_tip->region_from,
- &screen->tool_tip->pass,
- &pass_delay,
- &screen->tool_tip->exit_on_event);
+
+ {
+ ScrArea *area_prev = CTX_wm_area(C);
+ ARegion *ar_prev = CTX_wm_region(C);
+ CTX_wm_area_set(C, screen->tool_tip->area_from);
+ CTX_wm_region_set(C, screen->tool_tip->region_from);
+ screen->tool_tip->region = screen->tool_tip->init(C,
+ screen->tool_tip->region_from,
+ &screen->tool_tip->pass,
+ &pass_delay,
+ &screen->tool_tip->exit_on_event);
+ CTX_wm_area_set(C, area_prev);
+ CTX_wm_region_set(C, ar_prev);
+ }
+
copy_v2_v2_int(screen->tool_tip->event_xy, &win->eventstate->x);
if (pass_prev != screen->tool_tip->pass) {
/* The pass changed, add timer for next pass. */