]> git.saurik.com Git - wxWidgets.git/blobdiff - src/aui/auibar.cpp
new file added
[wxWidgets.git] / src / aui / auibar.cpp
index 9d933d93d62121b3b1e4e523ef315f71a1ad117a..9cb1b9ab0a77ec7aa2e50b73b6fa45de6bcf556c 100644 (file)
@@ -1284,9 +1284,7 @@ void wxAuiToolBar::SetToolSticky(int tool_id, bool sticky)
     item->m_sticky = sticky;
 
     Refresh(false);
     item->m_sticky = sticky;
 
     Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
     Update();
     Update();
-#endif
 }
 
 bool wxAuiToolBar::GetToolSticky(int tool_id) const
 }
 
 bool wxAuiToolBar::GetToolSticky(int tool_id) const
@@ -1408,6 +1406,9 @@ bool wxAuiToolBar::SetFont(const wxFont& font)
 
 void wxAuiToolBar::SetHoverItem(wxAuiToolBarItem* pitem)
 {
 
 void wxAuiToolBar::SetHoverItem(wxAuiToolBarItem* pitem)
 {
+    if (pitem && (pitem->m_state & wxAUI_BUTTON_STATE_DISABLED))
+        pitem = NULL;
+
     wxAuiToolBarItem* former_hover = NULL;
 
     size_t i, count;
     wxAuiToolBarItem* former_hover = NULL;
 
     size_t i, count;
@@ -1427,9 +1428,7 @@ void wxAuiToolBar::SetHoverItem(wxAuiToolBarItem* pitem)
     if (former_hover != pitem)
     {
         Refresh(false);
     if (former_hover != pitem)
     {
         Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
         Update();
         Update();
-#endif
     }
 }
 
     }
 }
 
@@ -1455,9 +1454,7 @@ void wxAuiToolBar::SetPressedItem(wxAuiToolBarItem* pitem)
     if (former_item != pitem)
     {
         Refresh(false);
     if (former_item != pitem)
     {
         Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
         Update();
         Update();
-#endif
     }
 }
 
     }
 }
 
@@ -1491,9 +1488,7 @@ void wxAuiToolBar::RefreshOverflowState()
     {
         m_overflowState = overflow_state;
         Refresh(false);
     {
         m_overflowState = overflow_state;
         Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
         Update();
         Update();
-#endif
     }
 
     m_overflowState = overflow_state;
     }
 
     m_overflowState = overflow_state;
@@ -2249,9 +2244,7 @@ void wxAuiToolBar::OnSize(wxSizeEvent& WXUNUSED(evt))
     m_sizer->SetDimension(0, 0, x, y);
 
     Refresh(false);
     m_sizer->SetDimension(0, 0, x, y);
 
     Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
     Update();
     Update();
-#endif
 
     // idle events aren't sent while user is resizing frame (why?),
     // but resizing toolbar here causes havoc,
 
     // idle events aren't sent while user is resizing frame (why?),
     // but resizing toolbar here causes havoc,
@@ -2590,6 +2583,11 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt)
         if(!GetEventHandler()->ProcessEvent(e) || e.GetSkipped())
             CaptureMouse();
 
         if(!GetEventHandler()->ProcessEvent(e) || e.GetSkipped())
             CaptureMouse();
 
+        // Ensure hovered item is really ok, as mouse may have moved during
+        //  event processing
+        wxPoint cursor_pos_after_evt = ScreenToClient(wxGetMousePosition());
+        SetHoverItem(FindToolByPosition(cursor_pos_after_evt.x, cursor_pos_after_evt.y));
+
         DoIdleUpdate();
     }
 }
         DoIdleUpdate();
     }
 }
@@ -2601,11 +2599,9 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
 
     SetPressedItem(NULL);
 
 
     SetPressedItem(NULL);
 
-    wxAuiToolBarItem* hitItem = FindToolByPosition(evt.GetX(), evt.GetY());
-    if (hitItem && !(hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED))
-    {
-        SetHoverItem(hitItem);
-    }
+    wxAuiToolBarItem* hitItem;
+    hitItem = FindToolByPosition(evt.GetX(), evt.GetY());
+    SetHoverItem(hitItem);
 
     if (m_dragging)
     {
 
     if (m_dragging)
     {
@@ -2634,9 +2630,7 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
 
                 // repaint immediately
                 Refresh(false);
 
                 // repaint immediately
                 Refresh(false);
-#ifdef TODO_REMOVE_IF_NO_PROBLEMS
                 Update();
                 Update();
-#endif
 
                 e.SetInt(toggle);
             }
 
                 e.SetInt(toggle);
             }
@@ -2648,6 +2642,12 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
             ReleaseMouse();
 
             GetEventHandler()->ProcessEvent(e);
             ReleaseMouse();
 
             GetEventHandler()->ProcessEvent(e);
+
+            // Ensure hovered item is really ok, as mouse may have moved during
+            // event processing
+            wxPoint cursor_pos_after_evt = ScreenToClient(wxGetMousePosition());
+            SetHoverItem(FindToolByPosition(cursor_pos_after_evt.x, cursor_pos_after_evt.y));
+
             DoIdleUpdate();
         }
         else
             DoIdleUpdate();
         }
         else
@@ -2666,14 +2666,13 @@ void wxAuiToolBar::OnRightDown(wxMouseEvent& evt)
             return;
     }
 
             return;
     }
 
-    if (m_overflowSizerItem)
+    if (m_overflowSizerItem && m_art)
     {
         int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
         if (dropdown_size > 0 &&
             evt.m_x > cli_rect.width - dropdown_size &&
             evt.m_y >= 0 &&
     {
         int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
         if (dropdown_size > 0 &&
             evt.m_x > cli_rect.width - dropdown_size &&
             evt.m_y >= 0 &&
-            evt.m_y < cli_rect.height &&
-            m_art)
+            evt.m_y < cli_rect.height)
         {
             return;
         }
         {
             return;
         }
@@ -2733,14 +2732,13 @@ void wxAuiToolBar::OnMiddleDown(wxMouseEvent& evt)
             return;
     }
 
             return;
     }
 
-    if (m_overflowSizerItem)
+    if (m_overflowSizerItem && m_art)
     {
         int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
         if (dropdown_size > 0 &&
             evt.m_x > cli_rect.width - dropdown_size &&
             evt.m_y >= 0 &&
     {
         int dropdown_size = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
         if (dropdown_size > 0 &&
             evt.m_x > cli_rect.width - dropdown_size &&
             evt.m_y >= 0 &&
-            evt.m_y < cli_rect.height &&
-            m_art)
+            evt.m_y < cli_rect.height)
         {
             return;
         }
         {
             return;
         }
@@ -2822,10 +2820,7 @@ void wxAuiToolBar::OnMotion(wxMouseEvent& evt)
     }
     else
     {
     }
     else
     {
-        if (hitItem && (hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED))
-            SetHoverItem(NULL);
-        else
-            SetHoverItem(hitItem);
+        SetHoverItem(hitItem);
 
         // tooltips handling
         wxAuiToolBarItem* packingHitItem;
 
         // tooltips handling
         wxAuiToolBarItem* packingHitItem;