/////////////////////////////////////////////////////////////////////////////
-// Name: toplevel.cpp
+// Name: src/gtk/toplevel.cpp
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "toplevel.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
XFree(wm_hints);
}
-static gint gtk_frame_urgency_timer_callback( GtkWidget *win )
+static gint gtk_frame_urgency_timer_callback( wxTopLevelWindowGTK *win )
{
-#if __WXGTK20__ && GTK_CHECK_VERSION(2,7,0)
+#if defined(__WXGTK20__) && GTK_CHECK_VERSION(2,7,0)
if(!gtk_check_version(2,7,0))
- gtk_window_set_urgency_hint(GTK_WINDOW( win ), FALSE);
+ gtk_window_set_urgency_hint(GTK_WINDOW( win->m_widget ), FALSE);
else
#endif
- wxgtk_window_set_urgency_hint(GTK_WINDOW( win ), FALSE);
+ wxgtk_window_set_urgency_hint(GTK_WINDOW( win->m_widget ), FALSE);
- //BCI: argument from GtkWidget* to wxTopLevelWindowGTK* && win->m_urgency_hint = -2;
- gtk_object_set_data(GTK_OBJECT(win), "m_urgency_hint", GINT_TO_POINTER(-2));
+ win->m_urgency_hint = -2;
return FALSE;
}
}
// wxPrintf( wxT("active: %s\n"), win->GetTitle().c_str() );
// MR: wxRequestUserAttention related block
- //BCI: switch(win->m_urgency_hint)
- switch( GPOINTER_TO_INT(gtk_object_get_data( GTK_OBJECT(widget), "m_urgency_hint") ) )
+ switch( win->m_urgency_hint )
{
default:
- //BCI:
- gtk_timeout_remove( GPOINTER_TO_INT(gtk_object_get_data( GTK_OBJECT(widget), "m_urgency_hint") ) );
+ gtk_timeout_remove( win->m_urgency_hint );
// no break, fallthrough to remove hint too
case -1:
-#if __WXGTK20__ && GTK_CHECK_VERSION(2,7,0)
+#if defined(__WXGTK20__) && GTK_CHECK_VERSION(2,7,0)
if(!gtk_check_version(2,7,0))
gtk_window_set_urgency_hint(GTK_WINDOW( widget ), FALSE);
else
wxgtk_window_set_urgency_hint(GTK_WINDOW( widget ), FALSE);
}
- //BCI: win->m_urgency_hint = -2;
- gtk_object_set_data( GTK_OBJECT(widget), "m_urgency_hint", GINT_TO_POINTER(-2) );
+ win->m_urgency_hint = -2;
break;
case -2: break;
GdkEvent * WXUNUSED(event),
wxTopLevelWindow *win )
{
- win->SetIconizeState(TRUE);
+ win->SetIconizeState(true);
}
}
m_gdkDecor = m_gdkFunc = 0;
m_grabbed = false;
- //BCI: header wx/gtk/toplevel.h:
- // 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;
-
- //BCI: m_urgency_hint = -2;
+ m_urgency_hint = -2;
}
bool wxTopLevelWindowGTK::Create( wxWindow *parent,
}
}
- // BCI:
- gtk_object_set_data( GTK_OBJECT(m_widget), "m_urgency_hint", GINT_TO_POINTER(-2) );
-
wxWindow *topParent = wxGetTopLevelParent(m_parent);
if (topParent && (((GTK_IS_WINDOW(topParent->m_widget)) &&
(GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)) ||
}
#endif
-#if GTK_CHECK_VERSION(2,4,0)
+#ifdef __WXGTK24__
if (!gtk_check_version(2,4,0))
{
if (style & wxSTAY_ON_TOP)
gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
GTK_SIGNAL_FUNC(gtk_frame_realized_callback), (gpointer) this );
- // the only way to get the window size is to connect to this event
- gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
- GTK_SIGNAL_FUNC(gtk_frame_configure_callback), (gpointer)this );
-
// map and unmap for iconized state
gtk_signal_connect( GTK_OBJECT(m_widget), "map_event",
GTK_SIGNAL_FUNC(gtk_frame_map_callback), (gpointer)this );
{
if (m_grabbed)
{
- wxASSERT_MSG( FALSE, _T("Window still grabbed"));
+ wxASSERT_MSG( false, _T("Window still grabbed"));
RemoveGrab();
}
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
+ if ( title == m_title )
+ return;
+
m_title = title;
+
gtk_window_set_title( GTK_WINDOW(m_widget), wxGTK_CONV( title ) );
}
// wxYieldIfNeeded ensures the processing of it, but can have unwanted side effects - MR
::wxYieldIfNeeded();
- /*BCI:
if(m_urgency_hint >= 0)
gtk_timeout_remove(m_urgency_hint);
- */
- int urgency_hint = GPOINTER_TO_INT( gtk_object_get_data( GTK_OBJECT(m_widget), "m_urgency_hint") );
- if(urgency_hint >= 0)
- gtk_timeout_remove(urgency_hint);
- //BCI: END
- //BCI: m_urgency_hint = -2;
- gtk_object_set_data( GTK_OBJECT(m_widget), "m_urgency_hint", GINT_TO_POINTER(-2));
+ m_urgency_hint = -2;
if( GTK_WIDGET_REALIZED(m_widget) && !IsActive() )
{
if (flags & wxUSER_ATTENTION_INFO)
{
- //BCI: m_urgency_hint = gtk_timeout_add(5000, (GtkFunction)gtk_frame_urgency_timer_callback, this);
- gtk_object_set_data( GTK_OBJECT(m_widget), "m_urgency_hint",
- GINT_TO_POINTER( gtk_timeout_add(5000,
- (GtkFunction)gtk_frame_urgency_timer_callback,
- m_widget) ) );
+ m_urgency_hint = gtk_timeout_add(5000, (GtkFunction)gtk_frame_urgency_timer_callback, this);
} else {
- //BCI: m_urgency_hint = -1;
- gtk_object_set_data( GTK_OBJECT(m_widget), "m_urgency_hint", GINT_TO_POINTER(-1) );
+ m_urgency_hint = -1;
}
}
-#if __WXGTK20__ && GTK_CHECK_VERSION(2,7,0)
+#if defined(__WXGTK20__) && GTK_CHECK_VERSION(2,7,0)
if(!gtk_check_version(2,7,0))
gtk_window_set_urgency_hint(GTK_WINDOW( m_widget ), new_hint_value);
else
#endif
wxgtk_window_set_urgency_hint(GTK_WINDOW( m_widget ), new_hint_value);
}
+
+void wxTopLevelWindowGTK::SetWindowStyleFlag( long style )
+{
+#ifdef __WXGTK20__
+ // Store which styles were changed
+ long styleChanges = style ^ m_windowStyle;
+#endif
+
+ // Process wxWindow styles. This also updates the internal variable
+ // Therefore m_windowStyle bits carry now the _new_ style values
+ wxWindow::SetWindowStyleFlag(style);
+
+#ifdef __WXGTK20__
+ // just return for now if widget does not exist yet
+ if (!m_widget)
+ return;
+
+#ifdef __WXGTK24__
+ if ( (styleChanges & wxSTAY_ON_TOP) && !gtk_check_version(2,4,0) )
+ gtk_window_set_keep_above(GTK_WINDOW(m_widget), m_windowStyle & wxSTAY_ON_TOP);
+#endif // GTK+ 2.4
+#if GTK_CHECK_VERSION(2,2,0)
+ if ( (styleChanges & wxFRAME_NO_TASKBAR) && !gtk_check_version(2,2,0) )
+ {
+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(m_widget), m_windowStyle & wxFRAME_NO_TASKBAR);
+ }
+#endif // GTK+ 2.2
+#endif // GTK+ 2.0
+}