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)
m_art = new wxDefaultDockArt;
m_hint_wnd = NULL;
m_flags = flags;
+ m_skipping = false;
if (managed_wnd)
{
{
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;
// 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).