wxTopLevelWindow *win )
{
const bool wasIconized = win->IsIconized();
- win->SetIconizeState(false);
if (wasIconized)
{
// Because GetClientSize() returns (0,0) when IsIconized() is true,
}
//-----------------------------------------------------------------------------
-// "unmap_event" from m_widget
+// "window-state-event" from m_widget
//-----------------------------------------------------------------------------
extern "C" {
static gboolean
-gtk_frame_unmap_callback( GtkWidget * WXUNUSED(widget),
- GdkEvent * WXUNUSED(event),
+gtk_frame_window_state_callback( GtkWidget* WXUNUSED(widget),
+ GdkEventWindowState *event,
wxTopLevelWindow *win )
{
- win->SetIconizeState(true);
+ if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
+ win->SetIconizeState((event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) != 0);
+
+ // if maximized bit changed and it is now set
+ if (event->changed_mask & event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
+ {
+ wxMaximizeEvent event(win->GetId());
+ event.SetEventObject(win);
+ win->HandleWindowEvent(event);
+ }
+
return false;
}
}
g_signal_connect (m_widget, "realize",
G_CALLBACK (gtk_frame_realized_callback), this);
- // map and unmap for iconized state
+ // for some reported size corrections
g_signal_connect (m_widget, "map_event",
G_CALLBACK (gtk_frame_map_callback), this);
- g_signal_connect (m_widget, "unmap_event",
- G_CALLBACK (gtk_frame_unmap_callback), this);
+
+ // for iconized state
+ g_signal_connect (m_widget, "window_state_event",
+ G_CALLBACK (gtk_frame_window_state_callback), this);
+
// for wxMoveEvent
g_signal_connect (m_widget, "configure_event",
m_deferShowAllowed = false;
}
-wxSize wxTopLevelWindowGTK::DoGetBestSize() const
-{
- // temporarily turn off m_isIconized,
- // so we get an accurate client size from DoGetClientSize
- const bool save = m_isIconized;
- const_cast<wxTopLevelWindowGTK*>(this)->m_isIconized = false;
- const wxSize size = base_type::DoGetBestSize();
- const_cast<wxTopLevelWindowGTK*>(this)->m_isIconized = save;
- return size;
-}
-
void wxTopLevelWindowGTK::DoGetClientSize( int *width, int *height ) const
{
wxASSERT_MSG(m_widget, wxT("invalid frame"));
void wxTopLevelWindowGTK::OnInternalIdle()
{
- wxWindow::OnInternalIdle();
+ wxTopLevelWindowBase::OnInternalIdle();
// Synthetize activate events.
if ( g_sendActivateEvent != -1 )
bool wxTopLevelWindowGTK::IsMaximized() const
{
- if(!m_widget->window)
- return false;
-
- return gdk_window_get_state(m_widget->window) & GDK_WINDOW_STATE_MAXIMIZED;
+ return m_widget->window &&
+ (gdk_window_get_state(m_widget->window) & GDK_WINDOW_STATE_MAXIMIZED);
}
void wxTopLevelWindowGTK::Restore()