#include "gdk/gdkkeysyms.h"
#include "wx/gtk/win_gtk.h"
-#if (GTK_MINOR_VERSION == 0)
#include "gdk/gdkx.h"
-#endif
//-----------------------------------------------------------------------------
// documentation on internals
#endif // Debug
+//-----------------------------------------------------------------------------
+// missing gdk functions
+//-----------------------------------------------------------------------------
+
+void
+gdk_window_warp_pointer (GdkWindow *window,
+ gint x,
+ gint y)
+{
+ GdkWindowPrivate *priv;
+
+ if (!window)
+ window = (GdkWindow*) &gdk_root_parent;
+
+ priv = (GdkWindowPrivate*) window;
+
+ if (!priv->destroyed)
+ {
+ XWarpPointer (priv->xdisplay,
+ None, /* not source window -> move from anywhere */
+ priv->xwindow, /* dest window */
+ 0, 0, 0, 0, /* not source window -> move from anywhere */
+ x, y );
+ }
+}
+
//-----------------------------------------------------------------------------
// idle system
//-----------------------------------------------------------------------------
case GDK_Shift_R: key_code = WXK_SHIFT; break;
case GDK_Control_L:
case GDK_Control_R: key_code = WXK_CONTROL; break;
+ case GDK_Meta_L:
+ case GDK_Meta_R:
+ case GDK_Alt_L:
+ case GDK_Alt_R:
+ case GDK_Super_L:
+ case GDK_Super_R: key_code = WXK_ALT; break;
case GDK_Menu: key_code = WXK_MENU; break;
case GDK_Help: key_code = WXK_HELP; break;
case GDK_BackSpace: key_code = WXK_BACK; break;
m_scrollGC = (GdkGC*) NULL;
m_widgetStyle = (GtkStyle*) NULL;
- m_insertCallback = wxInsertChildInWindow;
+ m_insertCallback = (wxInsertChildFunction) NULL;
m_isStaticBox = FALSE;
m_acceptsFocus = FALSE;
{
PreCreation( parent, id, pos, size, style, name );
+ m_insertCallback = wxInsertChildInWindow;
+
m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
bool wxWindow::Reparent( wxWindow *newParent )
{
wxCHECK_MSG( (m_widget != NULL), (wxWindow*) NULL, _T("invalid window") );
-
- gtk_widget_unparent( m_widget );
+
+ wxWindow *oldParent = m_parent;
if ( !wxWindowBase::Reparent(newParent) )
return FALSE;
+ if (oldParent)
+ {
+ gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
+ }
+
+ if (newParent)
+ {
+ /* insert GTK representation */
+ (*(newParent->m_insertCallback))(newParent, this);
+ }
+
return TRUE;
}
+void wxWindow::DoAddChild(wxWindow *child)
+{
+ wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+
+ wxASSERT_MSG( (child != NULL), _T("invalid child window") );
+
+ wxASSERT_MSG( (m_insertCallback != NULL), _T("invalid child insertion function") );
+
+ /* add to list */
+ AddChild( child );
+
+ /* insert GTK representation */
+ (*m_insertCallback)(this, child);
+}
+
void wxWindow::Raise()
{
wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
return TRUE;
}
-void wxWindow::WarpPointer( int WXUNUSED(x), int WXUNUSED(y) )
+void wxWindow::WarpPointer( int x, int y )
{
- // TODO
+ wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+
+ GtkWidget *connect_widget = GetConnectWidget();
+ if (connect_widget->window)
+ {
+ /* we provide this function ourselves as it is
+ missing in GDK */
+ gdk_window_warp_pointer( connect_widget->window, x, y );
+ }
}
void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )