#include "wx/module.h"
#include "wx/msw/private.h"
+
+#if defined(__WXWINCE__)
+ #include <ole2.h>
+ #include <shellapi.h>
+ #if _WIN32_WCE < 400
+ #include <aygshell.h>
+ #endif
+#include "wx/msw/wince/missing.h"
+#endif
+
#include "wx/msw/winundef.h"
// This can't be undefed in winundef.h or
// wxTopLevelWindowMSW creation
// ----------------------------------------------------------------------------
+wxTopLevelWindowMSW::wxTopLevelWindowMSW()
+{
+ Init();
+}
+
+wxTopLevelWindowMSW::wxTopLevelWindowMSW(wxWindow *parent,
+ wxWindowID id,
+ const wxString& title,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString& name)
+{
+ Init();
+
+ (void)Create(parent, id, title, pos, size, style, name);
+}
+
void wxTopLevelWindowMSW::Init()
{
m_iconized =
long style,
const wxString& name)
{
- bool ret = false;
+ bool ret wxDUMMY_INITIALIZE(false);
// init our fields
Init();
else // fall back to the main desktop
#else // wxUSE_DISPLAY
{
- // FIXME: implement for WinCE
-#ifndef __WXWINCE__
// resize to the size of the desktop
wxCopyRECTToRect(wxGetWindowRect(::GetDesktopWindow()), rect);
+#ifdef __WXWINCE__
+ // FIXME: size of the bottom menu (toolbar)
+ // should be taken in account
+ rect.height += rect.y;
+ rect.y = 0;
#endif
}
#endif // wxUSE_DISPLAY
rect.x, rect.y, rect.width, rect.height,
flags);
+#if defined(__WXWINCE__) && _WIN32_WCE < 400
+ ::SHFullScreen(GetHwnd(), SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
+#endif
+
// finally send an event allowing the window to relayout itself &c
wxSizeEvent event(rect.GetSize(), GetId());
GetEventHandler()->ProcessEvent(event);
}
else // stop showing full screen
{
+#if defined(__WXWINCE__) && _WIN32_WCE < 400
+ ::SHFullScreen(GetHwnd(), SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON);
+#endif
Maximize(m_fsIsMaximized);
SetWindowLong(GetHwnd(),GWL_STYLE, m_fsOldWindowStyle);
SetWindowPos(GetHwnd(),HWND_TOP,m_fsOldSize.x, m_fsOldSize.y,
{
if ( event.GetActive() )
{
- // restore focus to the child which was last focused
-// wxLogTrace(_T("focus"), _T("wxTLW %08x activated."), (int) m_hWnd);
+ // 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"),