}
else // just show
{
- if ( GetWindowStyle() & wxFRAME_TOOL_WINDOW )
- nShowCmd = SW_SHOWNA;
- else
- nShowCmd = SW_SHOW;
+ // we shouldn't use SW_SHOW which also activates the window for
+ // tool frames (as they shouldn't steal focus from the main window)
+ // nor for the currently disabled windows as they would be enabled
+ // as a side effect
+ if ( HasFlag(wxFRAME_TOOL_WINDOW) || !IsEnabled() )
+ nShowCmd = SW_SHOWNA;
+ else
+ nShowCmd = SW_SHOW;
}
}
else // hide
return GetLabel();
}
-void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons)
+void wxTopLevelWindowMSW::DoSelectAndSetIcon(const wxIconBundle& icons,
+ int smX,
+ int smY,
+ int i)
{
- wxTopLevelWindowBase::SetIcons(icons);
+ const wxSize size(::GetSystemMetrics(smX), ::GetSystemMetrics(smY));
-#if !defined(__WXMICROWIN__)
- const wxIcon& sml = icons.GetIconOfExactSize(16);
- if( sml.Ok() )
+ const wxIcon icon = icons.GetIconOfExactSize(size);
+ if ( icon.Ok() )
{
- ::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_SMALL,
- (LPARAM)GetHiconOf(sml) );
+ ::SendMessage(GetHwnd(), WM_SETICON, i, (LPARAM)GetHiconOf(icon));
}
+}
- const wxIcon& big = icons.GetIconOfExactSize(32);
- if( big.Ok() )
- {
- ::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_BIG,
- (LPARAM)GetHiconOf(big) );
- }
-#endif // !__WXMICROWIN__
+void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons)
+{
+ wxTopLevelWindowBase::SetIcons(icons);
+
+ DoSelectAndSetIcon(icons, SM_CXSMICON, SM_CYSMICON, ICON_SMALL);
+ DoSelectAndSetIcon(icons, SM_CXICON, SM_CYICON, ICON_BIG);
}
bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)
}
-void wxTopLevelWindowMSW::Freeze()
+void wxTopLevelWindowMSW::DoFreeze()
{
- if ( !m_frozenness++) {
- if (IsShown()) {
- for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
- node;
- node = node->GetNext() )
- {
- wxWindow *child = node->GetData();
- if ( child->IsTopLevel() )
- continue;
- else
- child->Freeze();
- }
+ if ( IsShown() )
+ {
+ for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ wxWindow *child = node->GetData();
+ if ( child->IsTopLevel() )
+ continue;
+
+ child->Freeze();
}
}
}
-void wxTopLevelWindowMSW::Thaw()
+void wxTopLevelWindowMSW::DoThaw()
{
- wxASSERT_MSG( m_frozenness > 0, _T("Thaw() without matching Freeze()") );
- if ( --m_frozenness == 0 )
+ if ( IsShown() )
{
- if ( IsShown() ) {
- for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
- node;
- node = node->GetNext() )
- {
- wxWindow *child = node->GetData();
- if ( child->IsTopLevel() )
- continue;
- else
- child->Thaw();
- }
+ for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ wxWindow *child = node->GetData();
+ if ( child->IsTopLevel() )
+ continue;
+
+ child->Thaw();
}
}
}
-void wxTopLevelWindowMSW::AddChild(wxWindowBase *child )
+void wxTopLevelWindowMSW::AddChild(wxWindowBase *child)
{
- //adding a child while frozen will assert when thawn,
- // so freeze it
- if (child && !child->IsTopLevel() && IsFrozen()) {
- //need to match our current freeze level
- for (unsigned int ii=0;ii< m_frozenness;ii++) {
- child->Freeze();
- }
+ // adding a child while frozen will assert when thawn, so freeze it as if
+ // it had been already present when we were frozen
+ if ( child && !child->IsTopLevel() && IsFrozen() )
+ {
+ child->Freeze();
}
+
wxTopLevelWindowBase::AddChild(child);
}