// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "toplevel.h"
#endif
#include "wx/msw/private.h"
#include "wx/msw/winundef.h"
+// This can't be undefed in winundef.h or
+// there are further errors
+#if defined(__WXWINCE__) && defined(CreateDialog)
+#undef CreateDialog
+#endif
+
#include "wx/display.h"
#ifndef ICON_BIG
msflags |= WS_THICKFRAME;
#endif
}
+ else if ( exflags && ((style & wxBORDER_DOUBLE) || (style & wxBORDER_RAISED)) )
+ *exflags |= WS_EX_DLGMODALFRAME;
else if ( !(style & wxBORDER_NONE) )
msflags |= WS_BORDER;
#ifndef __WXWINCE__
if ( exflags )
{
-#if !defined(__WIN16__)
+#if !defined(__WIN16__)
if ( !(GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) )
{
if ( style & wxFRAME_TOOL_WINDOW )
{
// create the palette-like window
*exflags |= WS_EX_TOOLWINDOW;
+
+ // tool windows shouldn't appear on the taskbar (as documented)
+ style |= wxFRAME_NO_TASKBAR;
}
// We have to solve 2 different problems here:
long style,
const wxString& name)
{
- bool ret = false;
+ bool ret wxDUMMY_INITIALIZE(false);
// init our fields
Init();
{
if ( event.GetActive() )
{
- // restore focus to the child which was last focused
+ // restore focus to the child which was last focused unless we already
+ // have it
wxLogTrace(_T("focus"), _T("wxTLW %08x activated."), (int) m_hWnd);
- wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent()
- : NULL;
- if ( !parent )
+ wxWindow *winFocus = FindFocus();
+ if ( !winFocus || wxGetTopLevelParent(winFocus) != this )
{
- parent = this;
- }
+ wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent()
+ : NULL;
+ if ( !parent )
+ {
+ parent = this;
+ }
- wxSetFocusToChild(parent, &m_winLastFocused);
+ wxSetFocusToChild(parent, &m_winLastFocused);
+ }
}
else // deactivating
{
{
// let it know that it doesn't have focus any more
m_winLastFocused->HandleKillFocus((WXHWND)NULL);
- }
- // so we NULL it out if it's a child from some other frame
- wxWindow *win = m_winLastFocused;
- while ( win )
- {
- if ( win->IsTopLevel() )
+ // and don't remember it if it's a child from some other frame
+ if ( wxGetTopLevelParent(m_winLastFocused) != this )
{
- if ( win != this )
- {
- m_winLastFocused = NULL;
- }
-
- break;
+ m_winLastFocused = NULL;
}
-
- win = win->GetParent();
}
wxLogTrace(_T("focus"),