diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 27ad2e756c..1ced733efd 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -278,8 +278,8 @@ GtkWidget* wxComboBox::GetConnectWidget() GdkWindow* wxComboBox::GTKGetWindow(wxArrayGdkWindows& /* windows */) const { #ifdef __WXGTK3__ - // no access to internal GdkWindows - return NULL; + GdkWindow* wxGTKFindWindow(GtkWidget* widget); + return wxGTKFindWindow(GTK_WIDGET(GetEntry())); #else return gtk_entry_get_text_window(GetEntry()); #endif diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 71ebdcf3a9..8ca5c034d9 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -594,7 +594,10 @@ GdkWindow *wxNotebook::GTKGetWindow(wxArrayGdkWindows& windows) const { windows.push_back(gtk_widget_get_window(m_widget)); #ifdef __WXGTK3__ - // no access to internal GdkWindows + GdkWindow* wxGTKFindWindow(GtkWidget* widget); + GdkWindow* window = wxGTKFindWindow(m_widget); + if (window) + windows.push_back(window); #else windows.push_back(GTK_NOTEBOOK(m_widget)->event_window); #endif diff --git a/src/gtk/slider.cpp b/src/gtk/slider.cpp index 17d8cf087c..37a7fd58a1 100644 --- a/src/gtk/slider.cpp +++ b/src/gtk/slider.cpp @@ -508,8 +508,8 @@ int wxSlider::GetLineSize() const GdkWindow *wxSlider::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const { #ifdef __WXGTK3__ - // no access to internal GdkWindows - return NULL; + GdkWindow* wxGTKFindWindow(GtkWidget* widget); + return wxGTKFindWindow(m_scale); #else return GTK_RANGE(m_scale)->event_window; #endif diff --git a/src/gtk/spinbutt.cpp b/src/gtk/spinbutt.cpp index fd1ee2cb9d..cdb3bcaf39 100644 --- a/src/gtk/spinbutt.cpp +++ b/src/gtk/spinbutt.cpp @@ -174,12 +174,14 @@ void wxSpinButton::GtkEnableEvents() const (gpointer)gtk_value_changed, (void*) this); } -GdkWindow *wxSpinButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const +GdkWindow *wxSpinButton::GTKGetWindow(wxArrayGdkWindows& windows) const { #ifdef __WXGTK3__ - // no access to internal GdkWindows + void wxGTKFindWindow(GtkWidget* widget, wxArrayGdkWindows& windows); + wxGTKFindWindow(m_widget, windows); return NULL; #else + wxUnusedVar(windows); return GTK_SPIN_BUTTON(m_widget)->panel; #endif } diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index b036e0bdb0..07e466296c 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -342,8 +342,8 @@ void wxSpinCtrlGTKBase::OnChar( wxKeyEvent &event ) GdkWindow *wxSpinCtrlGTKBase::GTKGetWindow(wxArrayGdkWindows& windows) const { #ifdef __WXGTK3__ - // no access to internal GdkWindows - wxUnusedVar(windows); + void wxGTKFindWindow(GtkWidget* widget, wxArrayGdkWindows& windows); + wxGTKFindWindow(m_widget, windows); #else GtkSpinButton* spinbutton = GTK_SPIN_BUTTON(m_widget); diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index d1d298aab3..492502b286 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -1650,16 +1650,8 @@ GdkWindow *wxTextCtrl::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const else { #ifdef __WXGTK3__ - GdkWindow* window = gtk_widget_get_window(m_text); - for (const GList* p = gdk_window_peek_children(window); p; p = p->next) - { - window = GDK_WINDOW(p->data); - void* data; - gdk_window_get_user_data(window, &data); - if (data == m_text) - return window; - } - return NULL; + GdkWindow* wxGTKFindWindow(GtkWidget* widget); + return wxGTKFindWindow(m_text); #else return gtk_entry_get_text_window(GTK_ENTRY(m_text)); #endif diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 9658d7b109..a686e79757 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -4370,6 +4370,35 @@ bool wxWindowGTK::IsTransparentBackgroundSupported(wxString* reason) const #endif // wxGTK_HAS_COMPOSITING_SUPPORT/!wxGTK_HAS_COMPOSITING_SUPPORT } +#ifdef __WXGTK3__ +GdkWindow* wxGTKFindWindow(GtkWidget* widget) +{ + GdkWindow* window = gtk_widget_get_window(widget); + for (const GList* p = gdk_window_peek_children(window); p; p = p->next) + { + window = GDK_WINDOW(p->data); + void* data; + gdk_window_get_user_data(window, &data); + if (data == widget) + return window; + } + return NULL; +} + +void wxGTKFindWindow(GtkWidget* widget, wxArrayGdkWindows& windows) +{ + GdkWindow* window = gtk_widget_get_window(widget); + for (const GList* p = gdk_window_peek_children(window); p; p = p->next) + { + window = GDK_WINDOW(p->data); + void* data; + gdk_window_get_user_data(window, &data); + if (data == widget) + windows.push_back(window); + } +} +#endif // __WXGTK3__ + // ---------------------------------------------------------------------------- // Pop-up menu stuff // ----------------------------------------------------------------------------