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:
@@ -555,6 +555,8 @@ protected:
|
|||||||
wxDockUIPart* m_action_part; // ptr to the part the action happened to
|
wxDockUIPart* m_action_part; // ptr to the part the action happened to
|
||||||
wxWindow* m_action_window; // action frame or window (NULL if none)
|
wxWindow* m_action_window; // action frame or window (NULL if none)
|
||||||
wxRect m_action_hintrect; // hint rectangle for the action
|
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
|
wxDockUIPart* m_hover_button;// button uipart being hovered over
|
||||||
wxRect m_last_hint; // last hint rectangle
|
wxRect m_last_hint; // last hint rectangle
|
||||||
wxPoint m_last_mouse_move; // last mouse move position (see OnMotion)
|
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_art = new wxDefaultDockArt;
|
||||||
m_hint_wnd = NULL;
|
m_hint_wnd = NULL;
|
||||||
m_flags = flags;
|
m_flags = flags;
|
||||||
|
m_skipping = false;
|
||||||
|
|
||||||
if (managed_wnd)
|
if (managed_wnd)
|
||||||
{
|
{
|
||||||
@@ -2349,8 +2350,7 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks,
|
|||||||
{
|
{
|
||||||
if (!part || !part->dock)
|
if (!part || !part->dock)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
// calculate the offset from where the dock begins
|
// calculate the offset from where the dock begins
|
||||||
// to the point where the user dropped the pane
|
// to the point where the user dropped the pane
|
||||||
int dock_drop_offset = 0;
|
int dock_drop_offset = 0;
|
||||||
@@ -2365,16 +2365,40 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks,
|
|||||||
// should float if being dragged over center pane windows
|
// should float if being dragged over center pane windows
|
||||||
if (!part->dock->fixed || part->dock->dock_direction == wxAUI_DOCK_CENTER)
|
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() ||
|
(drop.IsFloatable() ||
|
||||||
(part->dock->dock_direction != wxAUI_DOCK_CENTER &&
|
(part->dock->dock_direction != wxAUI_DOCK_CENTER &&
|
||||||
part->dock->dock_direction != wxAUI_DOCK_NONE)))
|
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);
|
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().
|
drop.Dock().
|
||||||
Direction(part->dock->dock_direction).
|
Direction(part->dock->dock_direction).
|
||||||
|
Reference in New Issue
Block a user