X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ddb6bc71266486f2e7222915740393eddea620f5..dafb7332056d68f0daa76a77ca6bbcb28e1a5a00:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index d12fcf4e69..0200936cf0 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -44,9 +44,7 @@ #include "gdk/gdkkeysyms.h" #include "wx/gtk/win_gtk.h" -#if (GTK_MINOR_VERSION == 0) #include "gdk/gdkx.h" -#endif //----------------------------------------------------------------------------- // documentation on internals @@ -179,6 +177,32 @@ void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window #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 //----------------------------------------------------------------------------- @@ -626,6 +650,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e ret = (ret || win->GetEventHandler()->ProcessEvent( event2 )); } +#if wxUSE_ACCEL if (!ret) { wxWindow *ancestor = win; @@ -641,6 +666,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e ancestor = ancestor->GetParent(); } } +#endif // wxUSE_ACCEL /* win is a control: tab can be propagated up */ if ( (!ret) && @@ -682,8 +708,8 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e wxNode *node = menubar->GetMenus().First(); if (node) { - wxMenu *firstMenu = (wxMenu*) node->Data(); // doesn't work correctly + // wxMenu *firstMenu = (wxMenu*) node->Data(); // gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) ); // ret = TRUE; break; @@ -2359,12 +2385,23 @@ bool wxWindow::AcceptsFocus() const 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; } @@ -2430,9 +2467,17 @@ bool wxWindow::SetCursor( const wxCursor &cursor ) 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 )