]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/menu.cpp
do NOT hard code univ sources in x11 port
[wxWidgets.git] / src / univ / menu.cpp
index 4151a9523661e5aecb6d2dba9a4da71d0d41d63c..682830fa704f76213e0246090ebd9c5ede8bd5d9 100644 (file)
@@ -98,7 +98,7 @@ private:
     {
         wxSize size;
         wxClientDC dc(menubar);
-        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+        dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
         dc.GetTextExtent(m_label, &size.x, &size.y);
 
         // adjust for the renderer we use and store the width
@@ -352,14 +352,9 @@ void wxPopupMenuWindow::ChangeCurrent(wxMenuItemList::Node *node)
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetPrevNode() const
 {
-    wxMenuItemList::Node *node = m_nodeCurrent;
-    if ( !node )
-    {
-        // start from the end if no current item
-        node = m_menu->GetMenuItems().GetLast();
-    }
-
-    return GetPrevNode(node);
+    // return the last node if there had been no previously selected one
+    return m_nodeCurrent ? GetPrevNode(m_nodeCurrent)
+                         : m_menu->GetMenuItems().GetLast();
 }
 
 wxMenuItemList::Node *
@@ -380,14 +375,9 @@ wxPopupMenuWindow::GetPrevNode(wxMenuItemList::Node *node) const
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetNextNode() const
 {
-    wxMenuItemList::Node *node = m_nodeCurrent;
-    if ( !node )
-    {
-        // start from the beginning if no current item
-        node = m_menu->GetMenuItems().GetFirst();
-    }
-
-    return GetNextNode(node);
+    // return the first node if there had been no previously selected one
+    return m_nodeCurrent ? GetNextNode(m_nodeCurrent)
+                         : m_menu->GetMenuItems().GetFirst();
 }
 
 wxMenuItemList::Node *
@@ -530,7 +520,7 @@ void wxPopupMenuWindow::DoDraw(wxControlRenderer *renderer)
     // never partially covered as it is always on top of everything
 
     wxDC& dc = renderer->GetDC();
-    dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+    dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
     // FIXME: this should be done in the renderer, however when it is fixed
     //        wxPopupMenuWindow::RefreshItem() should be changed too!
@@ -1547,7 +1537,10 @@ void wxMenuBar::Attach(wxFrame *frame)
 
         SetCursor(wxCURSOR_ARROW);
 
-        SetFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT));
+        SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
+
+        // calculate and set our height (it won't be changed any more)
+        SetSize(-1, GetBestSize().y);
     }
 
     // remember the last frame which had us to avoid unnecessarily reparenting
@@ -1712,7 +1705,7 @@ void wxMenuBar::RefreshItem(size_t pos)
 void wxMenuBar::DoDraw(wxControlRenderer *renderer)
 {
     wxDC& dc = renderer->GetDC();
-    dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+    dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
     // redraw only the items which must be redrawn
 
@@ -1797,7 +1790,7 @@ wxSize wxMenuBar::DoGetBestClientSize() const
     if ( GetMenuCount() > 0 )
     {
         wxClientDC dc(wxConstCast(this, wxMenuBar));
-        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+        dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
         dc.GetTextExtent(GetLabelTop(0), &size.x, &size.y);
 
         // adjust for the renderer we use
@@ -1844,6 +1837,7 @@ int wxMenuBar::GetMenuFromPoint(const wxPoint& pos) const
 void wxMenuBar::SelectMenu(size_t pos)
 {
     SetFocus();
+    wxLogTrace(_T("mousecapture"), _T("Capturing mouse from wxMenuBar::SelectMenu"));
     CaptureMouse();
 
     DoSelectMenu(pos);
@@ -1932,6 +1926,7 @@ void wxMenuBar::OnLeftDown(wxMouseEvent& event)
         }
         else // on item
         {
+               wxLogTrace(_T("mousecapture"), _T("Capturing mouse from wxMenuBar::OnLeftDown"));
             CaptureMouse();
 
             // show it as selected
@@ -2293,7 +2288,10 @@ void wxMenuBar::OnDismissMenu(bool dismissMenuBar)
 void wxMenuBar::OnDismiss()
 {
     if ( GetCapture() )
-        ReleaseMouse();
+    {
+        wxLogTrace(_T("mousecapture"), _T("Releasing mouse from wxMenuBar::OnDismiss"));
+        GetCapture()->ReleaseMouse();
+    }
 
     if ( m_current != -1 )
     {