]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
Forward-ported wxPython-bindings related cleanup from 2.9.0 branch
[wxWidgets.git] / src / msw / frame.cpp
index 2477f815d82dbd1588f6245520f40b8081a1665a..33b6df22bb8275b70ab22190dc38097e90120875 100644 (file)
@@ -209,7 +209,8 @@ bool wxFrame::Create(wxWindow *parent,
 
 wxFrame::~wxFrame()
 {
-    m_isBeingDeleted = true;
+    SendDestroyEvent();
+
     DeleteAllBars();
 }
 
@@ -434,19 +435,23 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar)
         SetToolBar(toolBar);
         menubar->SetToolBar(toolBar);
     }
-    // Now adjust size for menu bar
-    int menuHeight = 26;
 
-    //When the main window is created using CW_USEDEFAULT the height of the
-    // is created is not taken into account). So we resize the window after
-    // if a menubar is present
+    // When the main window is created using CW_USEDEFAULT the height of the
+    // menubar is not taken into account, so we resize it afterwards if a
+    // menubar is present
+    HWND hwndMenuBar = SHFindMenuBar(GetHwnd());
+    if ( hwndMenuBar )
     {
+        RECT mbRect;
+        ::GetWindowRect(hwndMenuBar, &mbRect);
+        const int menuHeight = mbRect.bottom - mbRect.top;
+
         RECT rc;
-        ::GetWindowRect((HWND) GetHWND(), &rc);
+        ::GetWindowRect(GetHwnd(), &rc);
         // adjust for menu / titlebar height
         rc.bottom -= (2*menuHeight-1);
 
-        ::MoveWindow((HWND) GetHWND(), rc.left, rc.top, rc.right, rc.bottom, FALSE);
+        ::MoveWindow(Gethwnd(), rc.left, rc.top, rc.right, rc.bottom, FALSE);
     }
 #endif
 
@@ -575,24 +580,9 @@ bool wxFrame::ShowFullScreen(bool show, long style)
 #if wxUSE_MENUS
         if (m_fsStyle & wxFULLSCREEN_NOMENUBAR)
         {
-            WXHMENU menu = m_hMenu;
-
-#if wxUSE_MDI_ARCHITECTURE
-            wxMDIParentFrame *frame = wxDynamicCast(this, wxMDIParentFrame);
-            if (frame)
-            {
-                wxMDIChildFrame *child = frame->GetActiveChild();
-                if (child)
-                {
-                    menu = child->GetWinMenu();
-                }
-            }
-#endif // wxUSE_MDI_ARCHITECTURE
-
-            if (menu)
-            {
-                ::SetMenu(GetHwnd(), (HMENU)menu);
-            }
+            const WXHMENU hmenu = MSWGetActiveMenu();
+            if ( hmenu )
+                ::SetMenu(GetHwnd(), (HMENU)hmenu);
         }
 #endif // wxUSE_MENUS
 
@@ -658,7 +648,7 @@ void wxFrame::PositionToolBar()
         toolbar->GetPosition( &tx, &ty );
         toolbar->GetSize( &tw, &th );
 
-        int x = 0, y = 0;
+        int x, y;
         if ( toolbar->HasFlag(wxTB_BOTTOM) )
         {
             x = 0;
@@ -900,8 +890,9 @@ bool wxFrame::HandleSize(int WXUNUSED(x), int WXUNUSED(y), WXUINT id)
     return false;
 }
 
-bool wxFrame::HandleCommand(WXWORD id_, WXWORD cmd, WXHWND control)
+bool wxFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND control)
 {
+#if wxUSE_MENUS
     // we only need to handle the menu and accelerator commands from the items
     // of our menu bar, base wxWindow class already handles the rest
     if ( !control && (cmd == 0 /* menu */ || cmd == 1 /* accel */) )
@@ -910,54 +901,40 @@ bool wxFrame::HandleCommand(WXWORD id_, WXWORD cmd, WXHWND control)
         if ( !wxCurrentPopupMenu )
 #endif // wxUSE_MENUS_NATIVE
         {
-            wxMenuBar * const mbar = GetMenuBar();
-            if ( mbar )
-            {
-                // sign extend to int from short before comparing with the
-                // other int ids
-                const int id = (signed short)id_;
-
-                wxMenuItem * const mitem = mbar->FindItem(id);
-                if ( mitem )
-                    return ProcessCommand(mitem);
-            }
+            wxMenuItem * const mitem = FindItemInMenuBar((signed short)id);
+            if ( mitem )
+                return ProcessCommand(mitem);
         }
     }
+#endif // wxUSE_MENUS
 
-    return wxFrameBase::HandleCommand(id_, cmd, control);;
+    return wxFrameBase::HandleCommand(id, cmd, control);;
 }
 
 #if wxUSE_MENUS
 
-bool wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu)
+bool
+wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU WXUNUSED(hMenu))
 {
-    int item;
-    if ( flags == 0xFFFF && hMenu == 0 )
-    {
-        // menu was removed from screen
-        item = -1;
-    }
-#ifndef __WXMICROWIN__
-    else if ( !(flags & MF_POPUP) && !(flags & MF_SEPARATOR) )
-    {
-        item = nItem;
-    }
-#endif
-    else
-    {
-        // don't give hints for separators (doesn't make sense) nor for the
-        // items opening popup menus (they don't have them anyhow) but do clear
-        // the status line - otherwise, we would be left with the help message
-        // for the previous item which doesn't apply any more
-        DoGiveHelp(wxEmptyString, true);
-
-        return false;
-    }
+    // WM_MENUSELECT is generated for both normal items and menus, including
+    // the top level menus of the menu bar, which can't be represented using
+    // any valid identifier in wxMenuEvent so use -1 for them
+    // the menu highlight events for n
+    const int item = flags & (MF_POPUP | MF_SEPARATOR) ? -1 : nItem;
 
     wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item);
     event.SetEventObject(this);
 
-    return HandleWindowEvent(event);
+    if ( HandleWindowEvent(event) )
+        return true;
+
+    // by default, i.e. if the event wasn't handled above, clear the status bar
+    // text when an item which can't have any associated help string in wx API
+    // is selected
+    if ( item == -1 )
+        DoGiveHelp(wxEmptyString, true);
+
+    return false;
 }
 
 bool wxFrame::HandleMenuLoop(const wxEventType& evtType, WXWORD isPopup)