// generate a new id if the user doesn't care about it
m_windowId = id == wxID_ANY ? NewControlId() : id;
+ // don't use SetWindowStyleFlag() here, this function should only be called
+ // to change the flag after creation as it tries to reflect the changes in
+ // flags by updating the window dynamically and we don't need this here
+ m_windowStyle = style;
+
SetName(name);
- SetWindowStyleFlag(style);
SetParent(parent);
#if wxUSE_VALIDATORS
return true;
}
+bool wxWindowBase::ToggleWindowStyle(int flag)
+{
+ wxASSERT_MSG( flag, _T("flags with 0 value can't be toggled") );
+
+ bool rc;
+ long style = GetWindowStyleFlag();
+ if ( style & flag )
+ {
+ style &= ~flag;
+ rc = false;
+ }
+ else // currently off
+ {
+ style |= flag;
+ rc = true;
+ }
+
+ SetWindowStyleFlag(style);
+
+ return rc;
+}
+
// ----------------------------------------------------------------------------
// destruction
// ----------------------------------------------------------------------------
{
wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent((wxWindow*)this),
wxTopLevelWindow);
-
+
if ( tlw && tlw->GetDefaultItem() == this )
tlw->SetDefaultItem(NULL);
if ( tlw && tlw->GetTmpDefaultItem() == this )
// helper of GetWindowBorderSize(): as many ports don't implement support for
// wxSYS_BORDER/EDGE_X/Y metrics in their wxSystemSettings, use hard coded
// fallbacks in this case
-static wxGetMetricOrDefault(wxSystemMetric what)
+static int wxGetMetricOrDefault(wxSystemMetric what)
{
int rc = wxSystemSettings::GetMetric(what);
if ( rc == -1 )