// ============================================================================
int wxTopLevelWindow::ms_drawDecorations = -1;
+int wxTopLevelWindow::ms_canIconize = -1;
void wxTopLevelWindow::Init()
{
long styleOrig = 0,
exstyleOrig = 0;
- // FIXME -- wxUniv should provide a way to force non-native decorations!
if ( ms_drawDecorations == -1 )
- ms_drawDecorations = !wxSystemSettings::HasFrameDecorations();
+ {
+ ms_drawDecorations =
+ !wxSystemSettings::GetCapability(wxSYS_CAN_DRAW_FRAME_DECORATIONS)
+ || wxGetEnv(wxT("WXDECOR"), NULL);
+ // FIXME -- wxUniv should provide a way to force non-native decorations!
+ // $WXDECOR is just a hack in absence of better wxUniv solution
+ }
+
+ if ( ms_canIconize == -1 )
+ {
+ ms_canIconize = wxSystemSettings::GetCapability(wxSYS_CAN_ICONIZE_FRAME);
+ }
if ( ms_drawDecorations )
{
if ( m_windowStyle & wxCAPTION )
{
style |= wxTOPLEVEL_TITLEBAR | wxTOPLEVEL_BUTTON_CLOSE;
- if ( m_windowStyle & wxMINIMIZE_BOX )
+ if ( (m_windowStyle & wxMINIMIZE_BOX) && ms_canIconize )
style |= wxTOPLEVEL_BUTTON_ICONIZE;
if ( m_windowStyle & wxMAXIMIZE_BOX )
{
wxTopLevelWindowNative::DoGetClientSize(&w, &h);
wxRect rect(wxTopLevelWindowNative::GetClientAreaOrigin(), wxSize(w, h));
- return m_renderer->HitTestFrame(rect, pt, GetDecorationsStyle());
+ return m_renderer->HitTestFrame(rect, pt+GetClientAreaOrigin(), GetDecorationsStyle());
}
// ----------------------------------------------------------------------------
ClickTitleBarButton(numArg);
return TRUE;
}
-
+
else if ( action == wxACTION_TOPLEVEL_MOVE )
{
InteractiveMove(wxINTERACTIVE_MOVE);
return TRUE;
}
-
+
else if ( action == wxACTION_TOPLEVEL_RESIZE )
{
int flags = wxINTERACTIVE_RESIZE;
InteractiveMove(flags);
return TRUE;
}
-
+
else
return FALSE;
}
}
else if ( consumer->GetInputWindow()->GetWindowStyle() & wxRESIZE_BORDER )
{
- wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(),
+ wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(),
wxTopLevelWindow);
long hit = win->HitTest(event.GetPosition());
-
+
if ( hit != m_winHitTest )
{
m_winHitTest = hit;
-
+
if ( m_borderCursorOn )
{
m_borderCursorOn = FALSE;
win->SetCursor(m_origCursor);
}
-
+
if ( hit & wxHT_TOPLEVEL_ANY_BORDER )
{
m_borderCursorOn = TRUE;
wxCursor cur;
-
+
switch (hit)
{
case wxHT_TOPLEVEL_BORDER_N: