win->m_width = alloc->width;
win->m_height = alloc->height;
- if (win->m_mainWidget)
- GTK_PIZZA(win->m_mainWidget)->m_width = win->m_width;
-
win->GtkUpdateSize();
}
}
m_insertInClientArea = true;
m_isIconized = false;
m_fsIsShowing = false;
+ m_fsSaveFlag = 0;
m_themeEnabled = true;
m_gdkDecor = m_gdkFunc = 0;
m_grabbed = false;
GTK_WIDGET_UNSET_FLAGS( m_mainWidget, GTK_CAN_FOCUS );
gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget );
- GTK_PIZZA(m_mainWidget)->m_width = m_width;
-
if (m_miniEdge == 0) // wxMiniFrame has its own version.
{
// For m_mainWidget themes
g_lastActiveFrame = NULL;
}
-
+bool wxTopLevelWindowGTK::EnableCloseButton( bool enable )
+{
+ if (enable)
+ m_gdkFunc |= GDK_FUNC_CLOSE;
+ else
+ m_gdkFunc &= ~GDK_FUNC_CLOSE;
+
+ if (GTK_WIDGET_REALIZED(m_widget) && (m_widget->window))
+ gdk_window_set_functions( m_widget->window, (GdkWMFunction)m_gdkFunc );
+
+ return true;
+}
bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
{
if ( (method == wxX11_FS_WMSPEC) && !gtk_check_version(2,2,0) )
{
if (show)
+ {
+ m_fsSaveFlag = style;
gtk_window_fullscreen( GTK_WINDOW( m_widget ) );
+ }
else
+ {
+ m_fsSaveFlag = 0;
gtk_window_unfullscreen( GTK_WINDOW( m_widget ) );
+ }
}
else
#endif // GTK+ >= 2.2.0
}
else // hide
{
+ m_fsSaveFlag = 0;
if (method != wxX11_FS_WMSPEC)
{
// don't do it always, Metacity hates it
if (width != -1) m_width = width;
if (height != -1) m_height = height;
- if (m_mainWidget)
- GTK_PIZZA(m_mainWidget)->m_width = m_width;
-
/*
if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
{
{
if ((m_x != old_x) || (m_y != old_y))
{
- gtk_widget_set_uposition( m_widget, m_x, m_y );
+ gtk_window_move( GTK_WINDOW(m_widget), m_x, m_y );
}
}
if ((m_width != old_width) || (m_height != old_height))
{
- if (m_widget->window)
- gdk_window_resize( m_widget->window, m_width, m_height );
- else
- gtk_window_set_default_size( GTK_WINDOW(m_widget), m_width, m_height );
+ gtk_window_resize( GTK_WINDOW(m_widget), m_width, m_height );
/* we set the size in GtkOnSize, i.e. mostly the actual resizing is
done either directly before the frame is shown or in idle time
if (height)
{
- *height = m_height - 2 * m_miniEdge + m_miniTitle;
+ *height = m_height - 2 * m_miniEdge - m_miniTitle;
if (*height < 0)
*height = 0;
}
width + m_miniEdge*2, height + m_miniEdge*2 + m_miniTitle, 0);
}
-void wxTopLevelWindowGTK::GtkOnSize()
+void wxTopLevelWindowGTK::DoSetSizeHints( int minW, int minH,
+ int maxW, int maxH,
+ int incW, int incH )
{
- // avoid recursions
- if (m_resizing) return;
- m_resizing = true;
-
- if ( m_wxwindow == NULL ) return;
-
- /* wxMDIChildFrame derives from wxFrame but it _is_ a wxWindow as it uses
- wxWindow::Create to create it's GTK equivalent. m_mainWidget is only
- set in wxFrame::Create so it is used to check what kind of frame we
- have here. if m_mainWidget is NULL it is a wxMDIChildFrame and so we
- skip the part which handles m_frameMenuBar, m_frameToolBar and (most
- importantly) m_mainWidget */
-
- int minWidth = GetMinWidth(),
- minHeight = GetMinHeight(),
- maxWidth = GetMaxWidth(),
- maxHeight = GetMaxHeight();
-
-#ifdef __WXGPE__
- // GPE's window manager doesn't like size hints
- // at all, esp. when the user has to use the
- // virtual keyboard.
- minWidth = -1;
- minHeight = -1;
- maxWidth = -1;
- maxHeight = -1;
-#endif
-
- if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth;
- if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
- if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth;
- if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight;
-
- if (m_mainWidget)
+ wxTopLevelWindowBase::DoSetSizeHints( minW, minH, maxW, maxH, incW, incH );
+
+ if (m_widget)
{
+ int minWidth = GetMinWidth(),
+ minHeight = GetMinHeight(),
+ maxWidth = GetMaxWidth(),
+ maxHeight = GetMaxHeight();
+
// set size hints
gint flag = 0; // GDK_HINT_POS;
GdkGeometry geom;
(GtkWidget*) NULL,
&geom,
(GdkWindowHints) flag );
+ }
+}
+
+
+void wxTopLevelWindowGTK::GtkOnSize()
+{
+ // avoid recursions
+ if (m_resizing) return;
+ m_resizing = true;
+
+ if ( m_wxwindow == NULL ) return;
+
+ /* wxMDIChildFrame derives from wxFrame but it _is_ a wxWindow as it uses
+ wxWindow::Create to create it's GTK equivalent. m_mainWidget is only
+ set in wxFrame::Create so it is used to check what kind of frame we
+ have here. if m_mainWidget is NULL it is a wxMDIChildFrame and so we
+ skip the part which handles m_frameMenuBar, m_frameToolBar and (most
+ importantly) m_mainWidget */
- /* I revert back to wxGTK's original behaviour. m_mainWidget holds the
- * menubar, the toolbar and the client area, which is represented by
- * m_wxwindow.
- * this hurts in the eye, but I don't want to call SetSize()
- * because I don't want to call any non-native functions here. */
+ int minWidth = GetMinWidth(),
+ minHeight = GetMinHeight(),
+ maxWidth = GetMaxWidth(),
+ maxHeight = GetMaxHeight();
+#ifdef __WXGPE__
+ // GPE's window manager doesn't like size hints
+ // at all, esp. when the user has to use the
+ // virtual keyboard.
+ minWidth = -1;
+ minHeight = -1;
+ maxWidth = -1;
+ maxHeight = -1;
+#endif
+
+ if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth;
+ if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
+ if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth;
+ if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight;
+
+ if (m_mainWidget)
+ {
+ // m_mainWidget holds the menubar, the toolbar and the client area,
+ // which is represented by m_wxwindow.
int client_x = m_miniEdge;
int client_y = m_miniEdge + m_miniTitle;
int client_w = m_width - 2*m_miniEdge;
#if GTK_CHECK_VERSION(2,10,0)
if (!gtk_check_version(2,10,0))
{
- if (gtk_widget_is_composited (m_widget))
- return true;
+ return (gtk_widget_is_composited (m_widget));
}
else
#endif // In case of lower versions than gtk+-2.10.0 we could look for _NET_WM_CM_Sn ourselves