Made toolbars sticky, i.e. you need to drag them
several (and not just one) pixels away from the docking area to make them undock/float. This removes some more toolbar jumping. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40873 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
e5e0c72763
commit
c3008402f7
@ -555,6 +555,8 @@ protected:
|
||||
wxDockUIPart* m_action_part; // ptr to the part the action happened to
|
||||
wxWindow* m_action_window; // action frame or window (NULL if none)
|
||||
wxRect m_action_hintrect; // hint rectangle for the action
|
||||
bool m_skipping;
|
||||
wxRect m_last_rect;
|
||||
wxDockUIPart* m_hover_button;// button uipart being hovered over
|
||||
wxRect m_last_hint; // last hint rectangle
|
||||
wxPoint m_last_mouse_move; // last mouse move position (see OnMotion)
|
||||
|
@ -480,6 +480,7 @@ wxFrameManager::wxFrameManager(wxWindow* managed_wnd, unsigned int flags)
|
||||
m_art = new wxDefaultDockArt;
|
||||
m_hint_wnd = NULL;
|
||||
m_flags = flags;
|
||||
m_skipping = false;
|
||||
|
||||
if (managed_wnd)
|
||||
{
|
||||
@ -2349,8 +2350,7 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks,
|
||||
{
|
||||
if (!part || !part->dock)
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
// calculate the offset from where the dock begins
|
||||
// to the point where the user dropped the pane
|
||||
int dock_drop_offset = 0;
|
||||
@ -2365,16 +2365,40 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks,
|
||||
// should float if being dragged over center pane windows
|
||||
if (!part->dock->fixed || part->dock->dock_direction == wxAUI_DOCK_CENTER)
|
||||
{
|
||||
if ((m_flags & wxAUI_MGR_ALLOW_FLOATING) &&
|
||||
if (m_last_rect.IsEmpty() || m_last_rect.Inside(pt.x, pt.y ))
|
||||
{
|
||||
m_skipping = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((m_flags & wxAUI_MGR_ALLOW_FLOATING) &&
|
||||
(drop.IsFloatable() ||
|
||||
(part->dock->dock_direction != wxAUI_DOCK_CENTER &&
|
||||
part->dock->dock_direction != wxAUI_DOCK_NONE)))
|
||||
{
|
||||
drop.Float();
|
||||
{
|
||||
drop.Float();
|
||||
}
|
||||
|
||||
m_skipping = false;
|
||||
|
||||
return ProcessDockResult(target, drop);
|
||||
}
|
||||
|
||||
drop.Position(pt.x - GetDockPixelOffset(drop) - offset.x);
|
||||
|
||||
return ProcessDockResult(target, drop);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_skipping = false;
|
||||
}
|
||||
|
||||
if (!m_skipping)
|
||||
{
|
||||
m_last_rect = part->dock->rect;
|
||||
m_last_rect.Offset( -10, -10 );
|
||||
m_last_rect.Inflate( 20, 20 );
|
||||
}
|
||||
|
||||
drop.Dock().
|
||||
Direction(part->dock->dock_direction).
|
||||
|
Loading…
Reference in New Issue
Block a user