Fix T96701: RMB select fails to show gizmo on mouse button release
Regression in [0] which removed a special check when tweak events ended.
Add a similar check for drag events that runs drag is disabled in the
main event handling loop.
[0]: 4986f71848
This commit is contained in:
parent
540bfbbb27
commit
d4bdf21929
Notes:
blender-bot
2023-02-13 15:55:54 +01:00
Referenced by commit 4ee8dfa8b3
, Fix use after free error when exiting a temp screen
Referenced by issue #96701, Gizmo does not show unless screen is updated(?) for right click select.
|
@ -1130,7 +1130,12 @@ void WM_gizmo_group_refresh(const bContext *C, wmGizmoGroup *gzgroup)
|
|||
const wmGizmoGroupType *gzgt = gzgroup->type;
|
||||
if (gzgt->flag & WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK) {
|
||||
wmGizmoMap *gzmap = gzgroup->parent_gzmap;
|
||||
wmGizmo *gz = wm_gizmomap_highlight_get(gzmap);
|
||||
wmGizmo *gz = NULL;
|
||||
/* Without the check for refresh, any highlighted gizmo will prevent hiding
|
||||
* when selecting with RMB when the cursor happens to be over a gizmo. */
|
||||
if ((gzgroup->init_flag & WM_GIZMOGROUP_INIT_REFRESH) == 0) {
|
||||
gz = wm_gizmomap_highlight_get(gzmap);
|
||||
}
|
||||
if (!gz || gz->parent_gzgroup != gzgroup) {
|
||||
wmWindow *win = CTX_wm_window(C);
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
|
|
@ -1297,6 +1297,23 @@ static wmOperator *wm_operator_create(wmWindowManager *wm,
|
|||
return op;
|
||||
}
|
||||
|
||||
/**
|
||||
* This isn't very nice but needed to redraw gizmos which are hidden while tweaking,
|
||||
* See #WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK for details.
|
||||
*/
|
||||
static void wm_region_tag_draw_on_gizmo_delay_refresh_for_tweak(wmWindow *win, bScreen *screen)
|
||||
{
|
||||
ED_screen_areas_iter (win, screen, area) {
|
||||
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
|
||||
if (region->gizmo_map != NULL) {
|
||||
if (WM_gizmomap_tag_delay_refresh_for_tweak_check(region->gizmo_map)) {
|
||||
ED_region_tag_redraw(region);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void wm_region_mouse_co(bContext *C, wmEvent *event)
|
||||
{
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
@ -3711,6 +3728,7 @@ void wm_event_do_handlers(bContext *C)
|
|||
event->flag |= WM_EVENT_FORCE_DRAG_THRESHOLD;
|
||||
}
|
||||
}
|
||||
const bool event_queue_check_drag_prev = win->event_queue_check_drag;
|
||||
|
||||
/* Active screen might change during handlers, update pointer. */
|
||||
screen = WM_window_get_active_screen(win);
|
||||
|
@ -3870,6 +3888,10 @@ void wm_event_do_handlers(bContext *C)
|
|||
win->event_queue_check_drag_handled = false;
|
||||
}
|
||||
|
||||
if (event_queue_check_drag_prev && (win->event_queue_check_drag == false)) {
|
||||
wm_region_tag_draw_on_gizmo_delay_refresh_for_tweak(win, screen);
|
||||
}
|
||||
|
||||
/* Update previous mouse position for following events to use. */
|
||||
copy_v2_v2_int(win->eventstate->prev_xy, event->xy);
|
||||
|
||||
|
|
Loading…
Reference in New Issue