revert
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25009 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a685e84a97
commit
c4053ed35a
@ -36,7 +36,6 @@
|
|||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/mdi.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxUSE_OWNER_DRAWN
|
#if wxUSE_OWNER_DRAWN
|
||||||
@ -1046,11 +1045,8 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
|||||||
if ( !menu )
|
if ( !menu )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
size_t arraypos = pos;
|
|
||||||
|
|
||||||
if ( IsAttached() )
|
if ( IsAttached() )
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef __WXWINCE__
|
#ifdef __WXWINCE__
|
||||||
if (GetToolBar())
|
if (GetToolBar())
|
||||||
{
|
{
|
||||||
@ -1060,85 +1056,12 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#if wxUSE_MDI_ARCHITECTURE
|
|
||||||
//MDI - window menu stuff
|
|
||||||
if (GetFrame() && GetFrame()->IsKindOf(CLASSINFO(wxMDIParentFrame)))
|
|
||||||
{
|
|
||||||
//There's two cases which we need to deal with in order
|
|
||||||
//to remove at the correct index with MDI windows
|
|
||||||
|
|
||||||
//#1 is due to the fact that wxWindows sneakely creates
|
|
||||||
//a new menu item "Window" on the menu bar natively, without
|
|
||||||
//notifying the actual wxMenuBar. Therefore, the Window
|
|
||||||
//menu never go into the actual calculations...
|
|
||||||
//So if a user tries to insert a menu after the Window menu
|
|
||||||
//his/her calculations will be one(1) index off, since the
|
|
||||||
//Window menu is before the to-be-removed menu and
|
|
||||||
//wxMenuBar doesn't know about the existance of it.
|
|
||||||
|
|
||||||
//There are two ways to deal with this -
|
|
||||||
//1 - is to force the window menu to always be at the end
|
|
||||||
//of the menu bar (rightmost, greatest index), I.E.
|
|
||||||
//override remove and insert functions to force
|
|
||||||
//the window (and help) menus to be at the rightmost positions
|
|
||||||
//2 - is to increment pos here if the user is trying
|
|
||||||
//to remove a menu after the Window menu
|
|
||||||
|
|
||||||
//Solution #2 (which if chosen would go here)
|
|
||||||
//is a little involved
|
|
||||||
//1. Search for Window menu
|
|
||||||
//2. If found note where it is
|
|
||||||
//3. If the removal point is at or above where the Window
|
|
||||||
// menu is, ++pos
|
|
||||||
|
|
||||||
|
|
||||||
//Case #2 is a MSW MDI "feature", where if a child MDI
|
|
||||||
//frame is maximized, the system menu of the child MDI
|
|
||||||
//frame is inserted at index 0 of the parent frame.
|
|
||||||
|
|
||||||
//To deal with this we simply check to see if a child MDI
|
|
||||||
//frame is maximized, then increment the position we
|
|
||||||
//are going to remove the menu at.
|
|
||||||
|
|
||||||
//Get a pointer to the children of the wxMDIParentFrame
|
|
||||||
wxWindowList* pParentsChildren = &(GetFrame()->GetChildren());
|
|
||||||
|
|
||||||
//Iterate through the children
|
|
||||||
for (size_t n = 0; n < pParentsChildren->GetCount(); ++n)
|
|
||||||
{
|
|
||||||
//Check to see if this particular child window is a
|
|
||||||
//MDI child
|
|
||||||
if(pParentsChildren->Item(n)->GetData()->IsKindOf(CLASSINFO(wxMDIChildFrame)))
|
|
||||||
{
|
|
||||||
//If so then we need to see if it's maximized
|
|
||||||
|
|
||||||
//Get a pointer to the child...
|
|
||||||
wxMDIChildFrame* pData = (wxMDIChildFrame*) pParentsChildren->Item(n)->GetData();
|
|
||||||
|
|
||||||
//Is it maximized?
|
|
||||||
if(pData->IsMaximized())
|
|
||||||
{
|
|
||||||
//Increase the removal position by one
|
|
||||||
++pos;
|
|
||||||
|
|
||||||
//Note that in Windows there can
|
|
||||||
//Only be one maximized child window
|
|
||||||
//(well not technically, but there
|
|
||||||
//can only be one child system menu
|
|
||||||
//prepended to the parent's menu
|
|
||||||
//bar, which is what we're concerned about)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}//end if child == wxMDIChildFrame
|
|
||||||
}//end children iteration loop
|
|
||||||
}//end if GetFrame()->IsKindOf(CLASSINFO(wxMDIParentFrame))
|
|
||||||
#endif //wxUSE_MDI_ARCHITECTURE
|
|
||||||
|
|
||||||
if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) )
|
if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) )
|
||||||
{
|
{
|
||||||
wxLogLastError(wxT("RemoveMenu"));
|
wxLogLastError(wxT("RemoveMenu"));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
if ( menu->HasAccels() )
|
if ( menu->HasAccels() )
|
||||||
{
|
{
|
||||||
@ -1150,7 +1073,8 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
|||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_titles.RemoveAt(arraypos);
|
|
||||||
|
m_titles.RemoveAt(pos);
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user