git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53059
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// size of WM decorations
wxSize m_decorSize;
// size of WM decorations
wxSize m_decorSize;
+ // shape of the frame
+ wxRegion m_shape;
+
// private gtk_timeout_add result for mimicing wxUSER_ATTENTION_INFO and
// wxUSER_ATTENTION_ERROR difference, -2 for no hint, -1 for ERROR hint, rest for GtkTimeout handle.
int m_urgency_hint;
// private gtk_timeout_add result for mimicing wxUSER_ATTENTION_INFO and
// wxUSER_ATTENTION_ERROR difference, -2 for no hint, -1 for ERROR hint, rest for GtkTimeout handle.
int m_urgency_hint;
void OnMouseMove(wxMouseEvent& evt);
void OnExit(wxMouseEvent& evt);
void OnPaint(wxPaintEvent& evt);
void OnMouseMove(wxMouseEvent& evt);
void OnExit(wxMouseEvent& evt);
void OnPaint(wxPaintEvent& evt);
- void OnWindowCreate(wxWindowCreateEvent& evt);
private:
bool m_hasShape;
private:
bool m_hasShape;
EVT_LEFT_UP(ShapedFrame::OnLeftUp)
EVT_MOTION(ShapedFrame::OnMouseMove)
EVT_RIGHT_UP(ShapedFrame::OnExit)
EVT_LEFT_UP(ShapedFrame::OnLeftUp)
EVT_MOTION(ShapedFrame::OnMouseMove)
EVT_RIGHT_UP(ShapedFrame::OnExit)
EVT_PAINT(ShapedFrame::OnPaint)
EVT_PAINT(ShapedFrame::OnPaint)
-
-#ifdef __WXGTK__
- EVT_WINDOW_CREATE(ShapedFrame::OnWindowCreate)
-#endif
m_bmp = wxBitmap(_T("star.png"), wxBITMAP_TYPE_PNG);
SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight()));
SetToolTip(wxT("Right-click to close"));
m_bmp = wxBitmap(_T("star.png"), wxBITMAP_TYPE_PNG);
SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight()));
SetToolTip(wxT("Right-click to close"));
-
-#ifndef __WXGTK__
- // On wxGTK we can't do this yet because the window hasn't been created
- // yet so we wait until the EVT_WINDOW_CREATE event happens. On wxMSW and
- // wxMac the window has been created at this point so we go ahead and set
- // the shape now.
}
void ShapedFrame::SetWindowShape()
}
void ShapedFrame::SetWindowShape()
dc.DrawBitmap(m_bmp, 0, 0, true);
}
dc.DrawBitmap(m_bmp, 0, 0, true);
}
-void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt))
-{
- SetWindowShape();
-}
-
// ----------------------------------------------------------------------------
// see-through frame
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// see-through frame
// ----------------------------------------------------------------------------
win->SetIcon( wxNullIcon );
win->SetIcons( iconsOld );
}
win->SetIcon( wxNullIcon );
win->SetIcons( iconsOld );
}
+
+ if (win->HasFlag(wxFRAME_SHAPED))
+ win->SetShape(win->m_shape); // it will really set the window shape now
wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
_T("Shaped windows must be created with the wxFRAME_SHAPED style."));
wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
_T("Shaped windows must be created with the wxFRAME_SHAPED style."));
- GdkWindow *window = NULL;
- if (m_wxwindow)
+ if ( GTK_WIDGET_REALIZED(m_widget) )
+ {
+ if ( m_wxwindow )
+ do_shape_combine_region(m_wxwindow->window, region);
+
+ return do_shape_combine_region(m_widget->window, region);
+ }
+ else // not realized yet
- do_shape_combine_region(m_wxwindow->window, region);
+ // store the shape to set, it will be really set once we're realized
+ m_shape = region;
+
+ // we don't know if we're going to succeed or fail, be optimistic by
+ // default
+ return true;
- window = m_widget->window;
- return do_shape_combine_region(window, region);
}
bool wxTopLevelWindowGTK::IsActive()
}
bool wxTopLevelWindowGTK::IsActive()