diff options
author | Hans Goudey <h.goudey@me.com> | 2020-04-30 22:21:14 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2020-04-30 22:21:14 +0300 |
commit | 1960b8a361eedf2f1717e8525c54de21d6ac7d82 (patch) | |
tree | 39c95570a136390175f11454447734f478b6a1e4 /source/blender/editors/interface/interface_panel.c | |
parent | 713ad9d9715a570627e762b16fda110476e3ba2b (diff) |
UI: Fix animating panels after drag changing region size
The previous commit for this issue, 8e08d80e52d6, missed the case
where the panel animates to its aligned position when the mouse is
released.
Diffstat (limited to 'source/blender/editors/interface/interface_panel.c')
-rw-r--r-- | source/blender/editors/interface/interface_panel.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 911250891f0..04179721305 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -102,6 +102,7 @@ typedef struct uiHandlePanelData { double starttime; /* dragging */ + bool is_drag_drop; int startx, starty; int startofsx, startofsy; int startsizex, startsizey; @@ -883,7 +884,7 @@ bool UI_panel_is_dragging(const struct Panel *panel) return false; } - return (data->state == PANEL_STATE_DRAG); + return data->is_drag_drop; } typedef struct PanelSort { @@ -2496,6 +2497,8 @@ static void panel_activate_state(const bContext *C, Panel *panel, uiHandlePanelS return; } + bool was_drag_drop = (data && data->state == PANEL_STATE_DRAG); + if (state == PANEL_STATE_EXIT || state == PANEL_STATE_ANIMATION) { if (data && data->state != PANEL_STATE_ANIMATION) { /* XXX: @@ -2547,6 +2550,12 @@ static void panel_activate_state(const bContext *C, Panel *panel, uiHandlePanelS data->startsizex = panel->sizex; data->startsizey = panel->sizey; data->starttime = PIL_check_seconds_timer(); + + /* Remember drag drop state even when animating to the aligned position after dragging. */ + data->is_drag_drop = was_drag_drop; + if (state == PANEL_STATE_DRAG) { + data->is_drag_drop = true; + } } ED_region_tag_redraw(region); |