From f478fef9d6b0609f4bb60fd98e9292b60927b80e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Nov 2019 03:07:00 +1100 Subject: Fix T72000: Key shortcuts unavailable in popovers --- source/blender/windowmanager/intern/wm_tooltip.c | 32 +++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'source/blender/windowmanager/intern/wm_tooltip.c') 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. */ -- cgit v1.2.3