]> git.saurik.com Git - wxWidgets.git/commitdiff
New "pizza" widget implementation. Window border widths now match the GtkStyle they...
authorPaul Cornett <paulcor@bullseye.com>
Tue, 6 Nov 2007 18:14:15 +0000 (18:14 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Tue, 6 Nov 2007 18:14:15 +0000 (18:14 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49687 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

17 files changed:
Makefile.in
build/bakefiles/files.bkl
include/wx/gtk/win_gtk.h
include/wx/gtk/window.h
include/wx/gtk1/window.h
src/aui/dockart.cpp
src/generic/graphicc.cpp
src/generic/statusbr.cpp
src/gtk/app.cpp
src/gtk/dcclient.cpp
src/gtk/glcanvas.cpp
src/gtk/popupwin.cpp
src/gtk/renderer.cpp
src/gtk/toplevel.cpp
src/gtk/window.cpp
src/gtk1/window.cpp
src/unix/mediactrl.cpp

index 59eb959205e8b8d4c2279684c2d81a2720222ad8..d025e6cd4fd52a6ef3f86baa0c8545151b6cacb1 100644 (file)
@@ -15622,8 +15622,8 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@monodll_utilsgtk.o: $(srcdir)/src/gtk1/utilsgtk.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk1/utilsgtk.cpp
 
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_win_gtk.o: $(srcdir)/src/gtk/win_gtk.c $(MONODLL_ODEP)
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CCC) -c -o $@ $(MONODLL_CFLAGS) $(srcdir)/src/gtk/win_gtk.c
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_win_gtk.o: $(srcdir)/src/gtk/win_gtk.cpp $(MONODLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/win_gtk.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@monodll_win_gtk.o: $(srcdir)/src/gtk1/win_gtk.c $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CCC) -c -o $@ $(MONODLL_CFLAGS) $(srcdir)/src/gtk1/win_gtk.c
@@ -20074,8 +20074,8 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@monolib_utilsgtk.o: $(srcdir)/src/gtk1/utilsgtk.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk1/utilsgtk.cpp
 
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_win_gtk.o: $(srcdir)/src/gtk/win_gtk.c $(MONOLIB_ODEP)
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CCC) -c -o $@ $(MONOLIB_CFLAGS) $(srcdir)/src/gtk/win_gtk.c
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_win_gtk.o: $(srcdir)/src/gtk/win_gtk.cpp $(MONOLIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/win_gtk.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@monolib_win_gtk.o: $(srcdir)/src/gtk1/win_gtk.c $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CCC) -c -o $@ $(MONOLIB_CFLAGS) $(srcdir)/src/gtk1/win_gtk.c
@@ -25084,8 +25084,8 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@coredll_utilsgtk.o: $(srcdir)/src/gtk1/utilsgtk.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk1/utilsgtk.cpp
 
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_win_gtk.o: $(srcdir)/src/gtk/win_gtk.c $(COREDLL_ODEP)
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CCC) -c -o $@ $(COREDLL_CFLAGS) $(srcdir)/src/gtk/win_gtk.c
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_win_gtk.o: $(srcdir)/src/gtk/win_gtk.cpp $(COREDLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/win_gtk.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@coredll_win_gtk.o: $(srcdir)/src/gtk1/win_gtk.c $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CCC) -c -o $@ $(COREDLL_CFLAGS) $(srcdir)/src/gtk1/win_gtk.c
@@ -28153,8 +28153,8 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@corelib_utilsgtk.o: $(srcdir)/src/gtk1/utilsgtk.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk1/utilsgtk.cpp
 
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_win_gtk.o: $(srcdir)/src/gtk/win_gtk.c $(CORELIB_ODEP)
-@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CCC) -c -o $@ $(CORELIB_CFLAGS) $(srcdir)/src/gtk/win_gtk.c
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_win_gtk.o: $(srcdir)/src/gtk/win_gtk.cpp $(CORELIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/win_gtk.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@corelib_win_gtk.o: $(srcdir)/src/gtk1/win_gtk.c $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1@  $(CCC) -c -o $@ $(CORELIB_CFLAGS) $(srcdir)/src/gtk1/win_gtk.c
index 6b640e9861419e2cf8b86ec624c6da8066d2e68a..cde7bbdadc5faf154771094ce8452c44695716f1 100644 (file)
@@ -984,7 +984,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/gtk/tooltip.cpp
     src/gtk/toplevel.cpp
     src/gtk/utilsgtk.cpp
-    src/gtk/win_gtk.c
+    src/gtk/win_gtk.cpp
     src/gtk/window.cpp
 </set>
 <set var="GTK_LOWLEVEL_HDR" hints="files">
index a6c5180f4e4314f634e364e11ca8916c55350146..696530f9cd22ca305b1d1b6a3f0a99ab3b54500a 100644 (file)
@@ -1,88 +1,34 @@
 /* ///////////////////////////////////////////////////////////////////////////
 // Name:        win_gtk.h
-// Purpose:     wxWidgets's GTK base widget = GtkPizza
+// Purpose:     native GTK+ widget for wxWindow
 // Author:      Robert Roebling
 // Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////// */
 
+#ifndef _WX_GTK_PIZZA_H_
+#define _WX_GTK_PIZZA_H_
 
-#ifndef __GTK_PIZZA_H__
-#define __GTK_PIZZA_H__
+#include <gtk/gtkfixed.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+#define WX_PIZZA(obj) G_TYPE_CHECK_INSTANCE_CAST(obj, wxPizza::type(), wxPizza)
+#define WX_IS_PIZZA(obj) G_TYPE_CHECK_INSTANCE_TYPE(obj, wxPizza::type())
 
-#include <gtk/gtkcontainer.h>
-
-#include "wx/dlimpexp.h"
-
-#define GTK_PIZZA(obj)          GTK_CHECK_CAST (obj, gtk_pizza_get_type (), GtkPizza)
-#define GTK_IS_PIZZA(obj)       GTK_CHECK_TYPE (obj, gtk_pizza_get_type ())
-
-typedef struct _GtkPizza        GtkPizza;
-
-struct _GtkPizza
+struct WXDLLIMPEXP_CORE wxPizza
 {
-    GtkContainer container;
-    GList *children;
-
-    guint m_xoffset;
-    guint m_yoffset;
-    
-    gboolean m_noscroll;
-    
-    GdkWindow *bin_window;
+    static GtkWidget* New(long windowStyle = 0);
+    static GType type();
+    void move(GtkWidget* widget, int x, int y);
+    void scroll(int dx, int dy);
+    void get_border_widths(int& x, int& y);
+
+    GtkFixed m_fixed;
+    GdkWindow* m_backing_window;
+    int m_scroll_x;
+    int m_scroll_y;
+    int m_border_style;
+    bool m_is_scrollable;
 };
 
-WXDLLIMPEXP_CORE
-GtkType    gtk_pizza_get_type        (void);
-WXDLLIMPEXP_CORE
-GtkWidget* gtk_pizza_new             (void);
-WXDLLIMPEXP_CORE
-GtkWidget* gtk_pizza_new_no_scroll   (void);
-
-/* accessors */
-
-WXDLLIMPEXP_CORE
-gint       gtk_pizza_get_xoffset     (GtkPizza          *pizza); 
-WXDLLIMPEXP_CORE
-gint       gtk_pizza_get_yoffset     (GtkPizza          *pizza); 
-WXDLLIMPEXP_CORE
-void       gtk_pizza_set_xoffset     (GtkPizza          *pizza, gint xoffset); 
-WXDLLIMPEXP_CORE
-void       gtk_pizza_set_yoffset     (GtkPizza          *pizza, gint yoffset); 
-
-
-WXDLLIMPEXP_CORE
-gint       gtk_pizza_get_rtl_offset  (GtkPizza          *pizza); 
-
-
-WXDLLIMPEXP_CORE
-void       gtk_pizza_scroll          (GtkPizza          *pizza,
-                                      gint               dx,
-                                      gint               dy);
-
-WXDLLIMPEXP_CORE
-void       gtk_pizza_put             (GtkPizza          *pizza,
-                                      GtkWidget         *widget,
-                                      gint               x,
-                                      gint               y,
-                                      gint               width,
-                                      gint               height);
-
-WXDLLIMPEXP_CORE
-void       gtk_pizza_set_size        (GtkPizza          *pizza,
-                                      GtkWidget         *widget,
-                                      gint               x,
-                                      gint               y,
-                                      gint               width,
-                                      gint               height);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_PIZZA_H__ */
+#endif // _WX_GTK_PIZZA_H_
index 6ed61b72cca24c3f4daccd52f75deff6b61bd7f9..3becd7bb5c01ed8b2efb05c309f55d6e63afc8c7 100644 (file)
@@ -184,6 +184,8 @@ public:
     // fire off capture lost events.
     void GTKReleaseMouseAndNotify();
 
+    GdkWindow* GTKGetDrawingWindow() const;
+
 protected:
     // Override GTKWidgetNeedsMnemonic and return true if your
     // needs to set its mnemonic widget, such as for a
index f80dd7b645b4a9458f733a52776b98dc4e3d6c86..1fb59e507e21b6e1ec44d490ae5fe1202c115a2f 100644 (file)
@@ -110,6 +110,8 @@ public:
 
     virtual bool IsDoubleBuffered() const { return false; }
 
+    GdkWindow* GTKGetDrawingWindow() const;
+
     // implementation
     // --------------
 
index 5103cc80e9aff277829d347410a85aa00dd77add..34393e5315a4fc43babcc7733b318a1b433c6c0b 100644 (file)
@@ -41,7 +41,6 @@
 
 #ifdef __WXGTK__
 #include <gtk/gtk.h>
-#include "wx/gtk/win_gtk.h"
 #include "wx/renderer.h"
 #endif
 
@@ -467,12 +466,12 @@ void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation,
 
     if (!window) return;
     if (!window->m_wxwindow) return;
-    if (!GTK_PIZZA(window->m_wxwindow)->bin_window) return;
+    if (!GTK_WIDGET_DRAWABLE(window->m_wxwindow)) return;
 
     gtk_paint_handle
     (
         window->m_wxwindow->style,
-        GTK_PIZZA(window->m_wxwindow)->bin_window,
+        window->GTKGetDrawingWindow(),
         // flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL,
         GTK_STATE_NORMAL,
         GTK_SHADOW_NONE,
index f40b1c58451d7da7805bfb198930fcb895703dbe..79e6e9387dc7b1455e0068eb3a564687b457690c 100644 (file)
@@ -33,7 +33,7 @@
 #endif
 
 #ifdef __WXGTK__
-#include "wx/gtk/win_gtk.h"
+#include <gtk/gtk.h>
 #endif
 
 #include "wx/graphics.h"
index 44fa9ad078fb59cf9a70dfd961f9f6bd4e9f64dd..d5330414b0963650c7b923093a4bb37cec24b153 100644 (file)
@@ -27,7 +27,6 @@
 
 #ifdef __WXGTK20__
     #include <gtk/gtk.h>
-    #include "wx/gtk/win_gtk.h"
 #endif
 
 // we only have to do it here when we use wxStatusBarGeneric in addition to the
@@ -204,7 +203,7 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
         if (GetLayoutDirection() == wxLayout_RightToLeft)
         {
             gtk_paint_resize_grip( m_widget->style,
-                               GTK_PIZZA(m_wxwindow)->bin_window,
+                               GTKGetDrawingWindow(),
                                (GtkStateType) GTK_WIDGET_STATE (m_widget),
                                NULL,
                                m_widget,
@@ -215,7 +214,7 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
         else
         {
             gtk_paint_resize_grip( m_widget->style,
-                               GTK_PIZZA(m_wxwindow)->bin_window,
+                               GTKGetDrawingWindow(),
                                (GtkStateType) GTK_WIDGET_STATE (m_widget),
                                NULL,
                                m_widget,
@@ -423,7 +422,7 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event)
         if (!GTK_IS_WINDOW (ancestor))
             return;
 
-        GdkWindow *source = GTK_PIZZA(m_wxwindow)->bin_window;
+        GdkWindow *source = GTKGetDrawingWindow();
 
         int org_x = 0;
         int org_y = 0;
@@ -470,7 +469,7 @@ void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event)
         if (!GTK_IS_WINDOW (ancestor))
             return;
 
-        GdkWindow *source = GTK_PIZZA(m_wxwindow)->bin_window;
+        GdkWindow *source = GTKGetDrawingWindow();
 
         int org_x = 0;
         int org_y = 0;
index e23081e0cc0ab954a516ef5df35527d5773991aa..62cf72b0bed670e3d106b35b24af0c2461f80fa2 100644 (file)
@@ -26,7 +26,6 @@
     #include <gpe/init.h>
 #endif
 
-#include "wx/gtk/win_gtk.h"
 #include "wx/gtk/private.h"
 #include "wx/apptrait.h"
 
index 3845198b4abae62fad823624a66dd547be29186b..ff4289883bec3aeb98122d005ef3d81b8a13d741 100644 (file)
@@ -28,7 +28,6 @@
 #include "wx/fontutil.h"
 #include "wx/scrolwin.h"
 
-#include "wx/gtk/win_gtk.h"
 #include "wx/gtk/private.h"
 
 #include <gdk/gdkx.h>
@@ -311,8 +310,7 @@ wxWindowDC::wxWindowDC( wxWindow *window )
     m_layout = pango_layout_new( m_context );
     m_fontdesc = pango_font_description_copy( widget->style->font_desc );
 
-    GtkPizza *pizza = GTK_PIZZA( widget );
-    m_window = pizza->bin_window;
+    m_window = widget->window;
 
     // Window not realized ?
     if (!m_window)
index 3fc37ba80ec2047f0915f15532ea296ee654c97b..df96d5d8c84f95ac6a86ad691311277a86cb907b 100644 (file)
@@ -26,8 +26,6 @@
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
-#include "wx/gtk/win_gtk.h"
-
 #if WXWIN_COMPATIBILITY_2_8
 
 //-----------------------------------------------------------------------------
@@ -234,7 +232,7 @@ bool wxGLCanvas::Create(wxWindow *parent,
 
 Window wxGLCanvas::GetXWindow() const
 {
-    GdkWindow *window = GTK_PIZZA(m_wxwindow)->bin_window;
+    GdkWindow *window = m_wxwindow->window;
     return window ? GDK_WINDOW_XWINDOW(window) : 0;
 }
 
index 2dafe977bb6b44dc31b8b2dfce309095f01bfe5d..e82b1a4b252d56cc06bf59a536f50bc8aced1804 100644 (file)
@@ -109,12 +109,10 @@ gtk_dialog_realized_callback( GtkWidget * WXUNUSED(widget), wxPopupWindow *win )
 
 static void wxInsertChildInPopupWin(wxWindowGTK* parent, wxWindowGTK* child)
 {
-    gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
-                   child->m_widget,
-                   child->m_x,
-                   child->m_y,
-                   child->m_width,
-                   child->m_height );
+    gtk_widget_set_size_request(
+        child->m_widget, child->m_width, child->m_height);
+    gtk_fixed_put(
+        GTK_FIXED(parent->m_wxwindow), child->m_widget, child->m_x, child->m_y);
 
     if (parent->HasFlag(wxTAB_TRAVERSAL))
     {
@@ -165,7 +163,7 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     g_signal_connect (m_widget, "delete_event",
                       G_CALLBACK (gtk_dialog_delete_callback), this);
 
-    m_wxwindow = gtk_pizza_new();
+    m_wxwindow = wxPizza::New(m_windowStyle);
     gtk_widget_show( m_wxwindow );
     GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
 
index d4c273d979ad21da67d5b0e4c6394a2351c40253..4eec03a12e3bbc0fd4f6365694d70b47369c422f 100644 (file)
@@ -33,7 +33,6 @@
 #endif
 
 #include <gtk/gtk.h>
-#include "wx/gtk/win_gtk.h"
 
 // ----------------------------------------------------------------------------
 // wxRendererGTK: our wxRendererNative implementation
index acaec2299a8353d33148e296b94de50e34a636a7..7ad3b37a467c3ce210bd839ebe8ad2998b15f811 100644 (file)
@@ -557,7 +557,7 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
     gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget );
 
     // m_wxwindow is the client area
-    m_wxwindow = gtk_pizza_new_no_scroll();
+    m_wxwindow = wxPizza::New();
     gtk_widget_show( m_wxwindow );
     gtk_container_add( GTK_CONTAINER(m_mainWidget), m_wxwindow );
 
@@ -1105,8 +1105,7 @@ bool wxTopLevelWindowGTK::SetShape(const wxRegion& region)
     GdkWindow *window = NULL;
     if (m_wxwindow)
     {
-        window = GTK_PIZZA(m_wxwindow)->bin_window;
-        do_shape_combine_region(window, region);
+        do_shape_combine_region(m_wxwindow->window, region);
     }
     window = m_widget->window;
     return do_shape_combine_region(window, region);
index 9134aedf1a17b29e2086efb84b7bea09a00cab2f..030666ca70341079d988f8c560d593bb65d54e99 100644 (file)
    can find in m_widget (defined in wxWindow)
 
    When the class has a client area for drawing into and for containing children
-   it has to handle the client area widget (of the type GtkPizza, defined in
-   win_gtk.c), but there could be any number of widgets, handled by a class
+   it has to handle the client area widget (of the type wxPizza, defined in
+   win_gtk.cpp), but there could be any number of widgets, handled by a class.
    The common rule for all windows is only, that the widget that interacts with
    the rest of GTK must be referenced in m_widget and all other widgets must be
    children of this widget on the GTK level. The top-most widget, which also
    represents the client area, must be in the m_wxwindow field and must be of
-   the type GtkPizza.
+   the type wxPizza.
 
    As I said, the window classes that display a GTK native widget only have
    one widget, so in the case of e.g. the wxButton class m_widget holds a
    pointer to a GtkButton widget. But windows with client areas (for drawing
    and children) have a m_widget field that is a pointer to a GtkScrolled-
-   Window and a m_wxwindow field that is pointer to a GtkPizza and this
+   Window and a m_wxwindow field that is pointer to a wxPizza and this
    one is (in the GTK sense) a child of the GtkScrolledWindow.
 
    If the m_wxwindow field is set, then all input to this widget is inter-
    clicking on a scrollbar belonging to scrolled window will inevitably move
    the window. In wxWidgets, the scrollbar will only emit an event, send this
    to (normally) a wxScrolledWindow and that class will call ScrollWindow()
-   which actually moves the window and its sub-windows. Note that GtkPizza
+   which actually moves the window and its sub-windows. Note that wxPizza
    memorizes how much it has been scrolled but that wxWidgets forgets this
    so that the two coordinates systems have to be kept in synch. This is done
-   in various places using the pizza->xoffset and pizza->yoffset values.
+   in various places using the pizza->m_scroll_x and pizza->m_scroll_y values.
 
    III)
 
@@ -312,92 +312,6 @@ static void GetScrollbarWidth(GtkWidget* widget, int& w, int& h)
     }
 }
 
-static void draw_frame( GtkWidget *widget, wxWindowGTK *win )
-{
-    // wxUniversal widgets draw the borders and scrollbars themselves
-#ifndef __WXUNIVERSAL__
-    if (!win->m_hasVMT)
-        return;
-
-    int dx = 0;
-    int dy = 0;
-    if (GTK_WIDGET_NO_WINDOW (widget))
-    {
-        dx += widget->allocation.x;
-        dy += widget->allocation.y;
-    }
-
-    int x = dx;
-    int y = dy;
-
-    int dw = 0;
-    int dh = 0;
-    if (win->m_hasScrolling)
-    {
-        GetScrollbarWidth(widget, dw, dh);
-
-        if (win->GetLayoutDirection() == wxLayout_RightToLeft)
-        {
-            // This is actually wrong for old GTK+ version
-            // which do not display the scrollbar on the
-            // left side in RTL
-            x += dw;
-        }
-    }
-
-    int w = widget->allocation.width-dw;
-    int h = widget->allocation.height-dh;
-
-    if (win->HasFlag(wxRAISED_BORDER))
-    {
-        gtk_paint_shadow (widget->style,
-                          widget->window,
-                          GTK_STATE_NORMAL,
-                          GTK_SHADOW_OUT,
-                          NULL, NULL, NULL, // FIXME: No clipping?
-                          x, y, w, h );
-        return;
-    }
-
-    if (win->HasFlag(wxSUNKEN_BORDER))
-    {
-        gtk_paint_shadow (widget->style,
-                          widget->window,
-                          GTK_STATE_NORMAL,
-                          GTK_SHADOW_IN,
-                          NULL, NULL, NULL, // FIXME: No clipping?
-                          x, y, w, h );
-        return;
-    }
-
-    if (win->HasFlag(wxSIMPLE_BORDER))
-    {
-        GdkGC *gc;
-        gc = gdk_gc_new( widget->window );
-        gdk_gc_set_foreground( gc, &widget->style->black );
-        gdk_draw_rectangle( widget->window, gc, FALSE, x, y, w-1, h-1 );
-        g_object_unref (gc);
-        return;
-    }
-#endif // __WXUNIVERSAL__
-}
-
-//-----------------------------------------------------------------------------
-// "expose_event" of m_widget
-//-----------------------------------------------------------------------------
-
-extern "C" {
-static gboolean
-gtk_window_own_expose_callback( GtkWidget *widget,
-                                GdkEventExpose *gdk_event,
-                                wxWindowGTK *win )
-{
-    if (gdk_event->count == 0)
-        draw_frame(widget, win);
-    return false;
-}
-}
-
 //-----------------------------------------------------------------------------
 // "size_request" of m_widget
 //-----------------------------------------------------------------------------
@@ -471,18 +385,9 @@ gtk_window_expose_callback( GtkWidget *widget,
 {
     DEBUG_MAIN_THREAD
 
-    // This callback gets called in drawing-idle time under
-    // GTK 2.0, so we don't need to defer anything to idle
-    // time anymore.
-
-    GtkPizza *pizza = GTK_PIZZA( widget );
-    if (gdk_event->window != pizza->bin_window)
-    {
-        // block expose events on GTK_WIDGET(pizza)->window,
-        //   all drawing is done on pizza->bin_window
-        return true;
-    }
-
+    // if this event is for the border-only GdkWindow
+    if (gdk_event->window != widget->window)
+        return false;
 
 #if 0
     if (win->GetName())
@@ -518,6 +423,53 @@ gtk_window_expose_callback( GtkWidget *widget,
 }
 }
 
+//-----------------------------------------------------------------------------
+// "expose_event" from m_widget, for drawing border
+//-----------------------------------------------------------------------------
+
+#ifndef __WXUNIVERSAL__
+extern "C" {
+static gboolean
+expose_event_border(GtkWidget* widget, GdkEventExpose* event, wxWindow* win)
+{
+    // if this event is not for the GdkWindow the border is drawn on
+    if (win->m_wxwindow == win->m_widget && event->window == widget->window)
+        return false;
+
+    int x = 0;
+    int y = 0;
+    // GtkScrolledWindow is GTK_NO_WINDOW
+    if (GTK_WIDGET_NO_WINDOW(widget))
+    {
+        x = widget->allocation.x;
+        y = widget->allocation.y;
+    }
+    int w = win->m_wxwindow->allocation.width;
+    int h = win->m_wxwindow->allocation.height;
+    if (win->HasFlag(wxBORDER_SIMPLE))
+    {
+        GdkGC* gc;
+        gc = gdk_gc_new(event->window);
+        gdk_gc_set_foreground(gc, &widget->style->black);
+        gdk_draw_rectangle(event->window, gc, false, x, y, w - 1, h - 1);
+        g_object_unref(gc);
+    }
+    else
+    {
+        GtkShadowType shadow = GTK_SHADOW_IN;
+        if (win->HasFlag(wxBORDER_RAISED))
+            shadow = GTK_SHADOW_OUT;
+        gtk_paint_shadow(
+            widget->style, event->window, GTK_STATE_NORMAL,
+            shadow, &event->area, widget, NULL, x, y, w, h);
+    }
+
+    // no further painting is needed for border-only GdkWindow
+    return win->m_wxwindow == win->m_widget;
+}
+}
+#endif // !__WXUNIVERSAL__
+
 //-----------------------------------------------------------------------------
 // "key_press_event" from any window
 //-----------------------------------------------------------------------------
@@ -1244,7 +1196,7 @@ template<typename T> void InitMouseEvent(wxWindowGTK *win,
     if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft))
     {
         // origin in the upper right corner
-        int window_width = gtk_pizza_get_rtl_offset( GTK_PIZZA(win->m_wxwindow) );
+        int window_width = win->m_wxwindow->allocation.width;
         event.m_x = window_width - event.m_x;
     }
 
@@ -1294,9 +1246,9 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y)
 
     if (win->m_wxwindow)
     {
-        GtkPizza *pizza = GTK_PIZZA(win->m_wxwindow);
-        xx += gtk_pizza_get_xoffset( pizza );
-        yy += gtk_pizza_get_yoffset( pizza );
+        wxPizza* pizza = WX_PIZZA(win->m_wxwindow);
+        xx += pizza->m_scroll_x;
+        yy += pizza->m_scroll_y;
     }
 
     wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
@@ -1863,8 +1815,7 @@ wx_window_focus_callback(GtkWidget *widget,
                          GtkDirectionType WXUNUSED(direction),
                          wxWindowGTK *win)
 {
-    // the default handler for focus signal in GtkPizza (or, rather, in
-    // GtkScrolledWindow from which GtkPizza inherits this behaviour) sets
+    // the default handler for focus signal in GtkScrolledWindow sets
     // focus to the window itself even if it doesn't accept focus, i.e. has no
     // GTK_CAN_FOCUS in its style -- work around this by forcibly preventing
     // the signal from reaching gtk_scrolled_window_focus() if we don't have
@@ -2031,15 +1982,14 @@ gtk_scrollbar_button_release_event(GtkRange* range, GdkEventButton*, wxWindow* w
 //-----------------------------------------------------------------------------
 
 static void
-gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win )
+gtk_window_realized_callback(GtkWidget* widget, wxWindow* win)
 {
     DEBUG_MAIN_THREAD
 
     if (win->m_imData)
     {
-        GtkPizza *pizza = GTK_PIZZA( m_widget );
         gtk_im_context_set_client_window( win->m_imData->context,
-                                          pizza->bin_window );
+                                          widget->window);
     }
 
     // We cannot set colours and fonts before the widget
@@ -2068,9 +2018,10 @@ size_allocate(GtkWidget*, GtkAllocation* alloc, wxWindow* win)
     int h = alloc->height;
     if (win->m_wxwindow)
     {
-        const int border = GTK_CONTAINER(win->m_wxwindow)->border_width;
-        w -= 2 * border;
-        h -= 2 * border;
+        int border_x, border_y;
+        WX_PIZZA(win->m_wxwindow)->get_border_widths(border_x, border_y);
+        w -= 2 * border_x;
+        h -= 2 * border_y;
         if (w < 0) w = 0;
         if (h < 0) h = 0;
     }
@@ -2197,16 +2148,14 @@ static void wxInsertChildInWindow( wxWindowGTK* parent, wxWindowGTK* child )
 {
     /* the window might have been scrolled already, do we
        have to adapt the position */
-    GtkPizza *pizza = GTK_PIZZA(parent->m_wxwindow);
-    child->m_x += gtk_pizza_get_xoffset( pizza );
-    child->m_y += gtk_pizza_get_yoffset( pizza );
+    wxPizza* pizza = WX_PIZZA(parent->m_wxwindow);
+    child->m_x += pizza->m_scroll_x;
+    child->m_y += pizza->m_scroll_y;
 
-    gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
-                     child->m_widget,
-                     child->m_x,
-                     child->m_y,
-                     child->m_width,
-                     child->m_height );
+    gtk_widget_set_size_request(
+        child->m_widget, child->m_width, child->m_height);
+    gtk_fixed_put(
+        GTK_FIXED(parent->m_wxwindow), child->m_widget, child->m_x, child->m_y);
 }
 
 //-----------------------------------------------------------------------------
@@ -2337,31 +2286,13 @@ bool wxWindowGTK::Create( wxWindow *parent,
         return false;
     }
 
+    m_wxwindow = wxPizza::New(m_windowStyle);
     if (!HasFlag(wxHSCROLL) && !HasFlag(wxVSCROLL))
-    {
-        m_wxwindow = gtk_pizza_new_no_scroll();
-
-#ifndef __WXUNIVERSAL__
-        if (HasFlag(wxSIMPLE_BORDER))
-            gtk_container_set_border_width((GtkContainer*)m_wxwindow, 1);
-        else if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
-            gtk_container_set_border_width((GtkContainer*)m_wxwindow, 2);
-#endif // __WXUNIVERSAL__
-
         m_widget = m_wxwindow;
-    }
     else
     {
-        m_wxwindow = gtk_pizza_new();
-
-#ifndef __WXUNIVERSAL__
-        if (HasFlag(wxSIMPLE_BORDER))
-            gtk_container_set_border_width((GtkContainer*)m_wxwindow, 1);
-        else if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
-            gtk_container_set_border_width((GtkContainer*)m_wxwindow, 2);
-#endif // __WXUNIVERSAL__
-
         m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
+        gtk_container_set_resize_mode(GTK_CONTAINER(m_widget), GTK_RESIZE_QUEUE);
 
         GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
 
@@ -2516,7 +2447,7 @@ void wxWindowGTK::PostCreation()
                               G_CALLBACK (gtk_window_expose_callback), this);
 
             if (GetLayoutDirection() == wxLayout_LeftToRight)
-                gtk_widget_set_redraw_on_allocate( GTK_WIDGET(m_wxwindow), HasFlag( wxFULL_REPAINT_ON_RESIZE ) );
+                gtk_widget_set_redraw_on_allocate(m_wxwindow, HasFlag(wxFULL_REPAINT_ON_RESIZE));
         }
 
         // Create input method handler
@@ -2528,9 +2459,14 @@ void wxWindowGTK::PostCreation()
         g_signal_connect (m_imData->context, "commit",
                           G_CALLBACK (gtk_wxwindow_commit_cb), this);
 
-        // these are called when the "sunken" or "raised" borders are drawn
-        g_signal_connect (m_widget, "expose_event",
-                          G_CALLBACK (gtk_window_own_expose_callback), this);
+        // border drawing
+#ifndef __WXUNIVERSAL__
+        if (HasFlag(wxBORDER_SIMPLE | wxBORDER_RAISED | wxBORDER_SUNKEN))
+        {
+            g_signal_connect(m_widget, "expose_event",
+                G_CALLBACK(expose_event_border), this);
+        }
+#endif
     }
 
     // focus handling
@@ -2684,9 +2620,9 @@ bool wxWindowGTK::Destroy()
 
 void wxWindowGTK::DoMoveWindow(int x, int y, int width, int height)
 {
+    gtk_widget_set_size_request(m_widget, width, height);
     // inform the parent to perform the move
-    gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height );
-
+    WX_PIZZA(m_parent->m_wxwindow)->move(m_widget, x, y);
 }
 
 void wxWindowGTK::ConstrainSize()
@@ -2740,9 +2676,9 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags
 
     if (m_parent->m_wxwindow)
     {
-        GtkPizza *pizza = GTK_PIZZA(m_parent->m_wxwindow);
-        m_x = x + gtk_pizza_get_xoffset(pizza);
-        m_y = y + gtk_pizza_get_yoffset(pizza);
+        wxPizza* pizza = WX_PIZZA(m_parent->m_wxwindow);
+        m_x = x + pizza->m_scroll_x;
+        m_y = y + pizza->m_scroll_y;
 
         int left_border = 0;
         int right_border = 0;
@@ -2838,7 +2774,7 @@ void wxWindowGTK::OnInternalIdle()
 
         if (m_wxwindow && (m_wxwindow != m_widget))
         {
-            GdkWindow *window = GTK_PIZZA(m_wxwindow)->bin_window;
+            GdkWindow *window = m_wxwindow->window;
             if (window)
                 gdk_window_set_cursor( window, cursor.GetCursor() );
 
@@ -2894,9 +2830,10 @@ void wxWindowGTK::DoGetClientSize( int *width, int *height ) const
         if (m_hasScrolling)
             GetScrollbarWidth(m_widget, dw, dh);
 
-        const int border = GTK_CONTAINER(m_wxwindow)->border_width;
-        dw += 2 * border;
-        dh += 2 * border;
+        int border_x, border_y;
+        WX_PIZZA(m_wxwindow)->get_border_widths(border_x, border_y);
+        dw += 2 * border_x;
+        dh += 2 * border_y;
 
         w -= dw;
         h -= dh;
@@ -2918,16 +2855,16 @@ void wxWindowGTK::DoGetPosition( int *x, int *y ) const
     int dy = 0;
     if (!IsTopLevel() && m_parent && m_parent->m_wxwindow)
     {
-        GtkPizza *pizza = GTK_PIZZA(m_parent->m_wxwindow);
-        dx = gtk_pizza_get_xoffset( pizza );
-        dy = gtk_pizza_get_yoffset( pizza );
+        wxPizza* pizza = WX_PIZZA(m_parent->m_wxwindow);
+        dx = pizza->m_scroll_x;
+        dy = pizza->m_scroll_y;
     }
 
     if (m_x == -1 && m_y == -1)
     {
         GdkWindow *source = (GdkWindow *) NULL;
         if (m_wxwindow)
-            source = GTK_PIZZA(m_wxwindow)->bin_window;
+            source = m_wxwindow->window;
         else
             source = m_widget->window;
 
@@ -2957,7 +2894,7 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const
 
     GdkWindow *source = (GdkWindow *) NULL;
     if (m_wxwindow)
-        source = GTK_PIZZA(m_wxwindow)->bin_window;
+        source = m_wxwindow->window;
     else
         source = m_widget->window;
 
@@ -2994,7 +2931,7 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const
 
     GdkWindow *source = (GdkWindow *) NULL;
     if (m_wxwindow)
-        source = GTK_PIZZA(m_wxwindow)->bin_window;
+        source = m_wxwindow->window;
     else
         source = m_widget->window;
 
@@ -3394,7 +3331,7 @@ wxWindowGTK::AdjustForLayoutDirection(wxCoord x,
                                       wxCoord WXUNUSED(width),
                                       wxCoord WXUNUSED(widthTotal)) const
 {
-    // We now mirrors the coordinates of RTL windows in GtkPizza
+    // We now mirror the coordinates of RTL windows in wxPizza
     return x;
 }
 
@@ -3577,7 +3514,7 @@ void wxWindowGTK::WarpPointer( int x, int y )
 
     GdkWindow *window = (GdkWindow*) NULL;
     if (m_wxwindow)
-        window = GTK_PIZZA(m_wxwindow)->bin_window;
+        window = m_wxwindow->window;
     else
         window = GetConnectWidget()->window;
 
@@ -3638,7 +3575,7 @@ void wxWindowGTK::Refresh(bool WXUNUSED(eraseBackground),
 
     if (m_wxwindow)
     {
-        if (!GTK_PIZZA(m_wxwindow)->bin_window) return;
+        if (m_wxwindow->window == NULL) return;
 
         GdkRectangle gdk_rect,
                     *p;
@@ -3658,7 +3595,7 @@ void wxWindowGTK::Refresh(bool WXUNUSED(eraseBackground),
             p = NULL;
         }
 
-        gdk_window_invalidate_rect( GTK_PIZZA(m_wxwindow)->bin_window, p, TRUE );
+        gdk_window_invalidate_rect(m_wxwindow->window, p, true);
     }
 }
 
@@ -3675,8 +3612,8 @@ void wxWindowGTK::Update()
 
 void wxWindowGTK::GtkUpdate()
 {
-    if (m_wxwindow && GTK_PIZZA(m_wxwindow)->bin_window)
-        gdk_window_process_updates( GTK_PIZZA(m_wxwindow)->bin_window, FALSE );
+    if (m_wxwindow && m_wxwindow->window)
+        gdk_window_process_updates(m_wxwindow->window, false);
     if (m_widget && m_widget->window && (m_wxwindow != m_widget))
         gdk_window_process_updates( m_widget->window, FALSE );
 
@@ -3724,8 +3661,7 @@ void wxWindowGTK::GtkSendPaintEvents()
         m_updateRegion.Clear();
 
         gint width;
-        gdk_window_get_geometry( GTK_PIZZA(m_wxwindow)->bin_window,
-                                 NULL, NULL, &width, NULL, NULL );
+        gdk_drawable_get_size(m_wxwindow->window, &width, NULL);
 
         wxRegionIterator upd( m_nativeUpdateRegion );
         while (upd)
@@ -3743,9 +3679,6 @@ void wxWindowGTK::GtkSendPaintEvents()
         }
     }
 
-    // widget to draw on
-    GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
-
     if (GetThemeEnabled() && (GetBackgroundStyle() == wxBG_STYLE_SYSTEM))
     {
         // find ancestor from which to steal background
@@ -3765,7 +3698,7 @@ void wxWindowGTK::GtkSendPaintEvents()
                 rect.height = upd.GetHeight();
 
                 gtk_paint_flat_box( parent->m_widget->style,
-                            pizza->bin_window,
+                            m_wxwindow->window,
                             (GtkStateType)GTK_WIDGET_STATE(m_wxwindow),
                             GTK_SHADOW_NONE,
                             &rect,
@@ -3992,7 +3925,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style)
         GdkWindow *window;
         if ( m_wxwindow )
         {
-            window = GTK_PIZZA(m_wxwindow)->bin_window;
+            window = m_wxwindow->window;
         }
         else
         {
@@ -4065,7 +3998,7 @@ bool wxWindowGTK::GTKIsOwnWindow(GdkWindow *window) const
 
 GdkWindow *wxWindowGTK::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
 {
-    return m_wxwindow ? GTK_PIZZA(m_wxwindow)->bin_window : m_widget->window;
+    return m_wxwindow ? m_wxwindow->window : m_widget->window;
 }
 
 bool wxWindowGTK::SetFont( const wxFont &font )
@@ -4088,7 +4021,7 @@ void wxWindowGTK::DoCaptureMouse()
 
     GdkWindow *window = (GdkWindow*) NULL;
     if (m_wxwindow)
-        window = GTK_PIZZA(m_wxwindow)->bin_window;
+        window = m_wxwindow->window;
     else
         window = GetConnectWidget()->window;
 
@@ -4121,7 +4054,7 @@ void wxWindowGTK::DoReleaseMouse()
 
     GdkWindow *window = (GdkWindow*) NULL;
     if (m_wxwindow)
-        window = GTK_PIZZA(m_wxwindow)->bin_window;
+        window = m_wxwindow->window;
     else
         window = GetConnectWidget()->window;
 
@@ -4297,10 +4230,7 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
 
     m_clipPaintRegion = true;
 
-    if (GetLayoutDirection() == wxLayout_RightToLeft)
-        gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), dx, -dy );
-    else
-        gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
+    WX_PIZZA(m_wxwindow)->scroll(dx, dy);
 
     m_clipPaintRegion = false;
 
@@ -4408,3 +4338,11 @@ void wxRemoveGrab(wxWindow* window)
 {
     gtk_grab_remove( (GtkWidget*) window->GetHandle() );
 }
+
+GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const
+{
+    GdkWindow* window = NULL;
+    if (m_wxwindow)
+        window = m_wxwindow->window;
+    return window;
+}
index d2ad366660a476f3e0ede97020bdd0a4cd7e938e..889718e44be8bf55b2f5e8f643edf689d7a7a06a 100644 (file)
@@ -4224,3 +4224,11 @@ void wxWinModule::OnExit()
     if (g_eraseGC)
         gdk_gc_unref( g_eraseGC );
 }
+
+GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const
+{
+    GdkWindow* window = NULL;
+    if (m_wxwindow)
+        window = GTK_PIZZA(m_wxwindow)->bin_window;
+    return window;
+}
index 7f4ad8b4910a281bd4c64e986a6d113b4bb34a41..c3e72b52d1cd827be9bf5c5301feb3c72a48a96d 100644 (file)
@@ -37,7 +37,7 @@
 #include "wx/thread.h"              // wxMutex/wxMutexLocker
 
 #ifdef __WXGTK__
-#    include "wx/gtk/win_gtk.h"
+    #include <gtk/gtk.h>
 #    include <gdk/gdkx.h>           // for GDK_WINDOW_XWINDOW
 #endif
 
@@ -282,7 +282,7 @@ static gboolean gtk_window_expose_callback(GtkWidget *widget,
     if(event->count > 0)
         return FALSE;
 
-    GdkWindow *window = GTK_PIZZA(be->GetControl()->m_wxwindow)->bin_window;
+    GdkWindow *window = be->GetControl()->GTKGetDrawingWindow();
 
     // I've seen this reccommended somewhere...
     // TODO: Is this needed? Maybe it is just cruft...
@@ -320,7 +320,7 @@ static gboolean gtk_window_expose_callback(GtkWidget *widget,
 //-----------------------------------------------------------------------------
 #ifdef __WXGTK__
 extern "C" {
-static gint gtk_window_realize_callback(GtkWidget* theWidget,
+static gint gtk_window_realize_callback(GtkWidget*,
                                         wxGStreamerMediaBackend* be)
 {
     DEBUG_MAIN_THREAD // TODO: Is this neccessary?
@@ -333,7 +333,7 @@ static gint gtk_window_realize_callback(GtkWidget* theWidget,
     wxYield();    // FIXME: RN: X Server gets an error/crash if I don't do
                   //       this or a messagebox beforehand?!?!??
 
-    GdkWindow *window = GTK_PIZZA(theWidget)->bin_window;
+    GdkWindow *window = be->GetControl()->GTKGetDrawingWindow();
     wxASSERT(window);
 
     gst_x_overlay_set_xwindow_id( GST_X_OVERLAY(be->m_xoverlay),
@@ -737,7 +737,7 @@ void wxGStreamerMediaBackend::SetupXOverlay()
     else
     {
         wxYield(); // see realize callback...
-        GdkWindow *window = GTK_PIZZA(m_ctrl->m_wxwindow)->bin_window;
+        GdkWindow *window = m_ctrl->m_wxwindow->GTKGetDrawingWindow();
         wxASSERT(window);
 #endif