From a56fcaaf46ccce9f6f79b8fad977dfe5a721ea61 Mon Sep 17 00:00:00 2001
From: Robert Roebling <robert@roebling.de>
Date: Sat, 4 Mar 2000 18:40:52 +0000
Subject: [PATCH 1/1]   Some more drawing things,   Tried to make miniframe
 stay on top, doesn't work,   Make radio box big enough for its title,   Can't
 anylong close disabled toplevel windows,   Minor other changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 samples/drawing/drawing.cpp    |  2 +
 samples/html/widget/widget.cpp |  2 +-
 samples/minifram/test.cpp      | 16 +++---
 src/common/prntbase.cpp        |  2 +
 src/gtk/dcclient.cpp           | 97 ++++++++++++++++++++++------------
 src/gtk/dialog.cpp             |  3 +-
 src/gtk/frame.cpp              |  2 +-
 src/gtk/minifram.cpp           |  3 ++
 src/gtk/radiobox.cpp           |  6 +++
 src/gtk/window.cpp             |  7 ++-
 src/gtk1/dcclient.cpp          | 97 ++++++++++++++++++++++------------
 src/gtk1/dialog.cpp            |  3 +-
 src/gtk1/frame.cpp             |  2 +-
 src/gtk1/minifram.cpp          |  3 ++
 src/gtk1/radiobox.cpp          |  6 +++
 src/gtk1/window.cpp            |  7 ++-
 16 files changed, 175 insertions(+), 83 deletions(-)

diff --git a/samples/drawing/drawing.cpp b/samples/drawing/drawing.cpp
index 7e6f40b2cb..c0bd806ac8 100644
--- a/samples/drawing/drawing.cpp
+++ b/samples/drawing/drawing.cpp
@@ -392,6 +392,8 @@ void MyCanvas::DrawTestPoly( int x, int y,wxDC &dc,int transparent )
                 dc.SetTextBackground(m_owner->m_colourBackground);
                 dc.DrawRectangle( x+50, y+50, 200, 200 );
                 
+                dc.DrawCircle( x+400, y+50, 130 );
+                
                 dc.SetBrush(wxNullBrush);
                 dc.SetPen(wxNullPen);
                 break;
diff --git a/samples/html/widget/widget.cpp b/samples/html/widget/widget.cpp
index c2aaf87f3b..c0f8105a8c 100644
--- a/samples/html/widget/widget.cpp
+++ b/samples/html/widget/widget.cpp
@@ -203,7 +203,7 @@ wxHtmlWindow *html;
     // ... and attach this menu bar to the frame
       SetMenuBar(menuBar);
    
-      CreateStatusBar(1);
+      CreateStatusBar(2);
 
       html = new wxHtmlWindow(this);
       html -> SetRelatedFrame(this, "VFS Demo: '%s'");
diff --git a/samples/minifram/test.cpp b/samples/minifram/test.cpp
index 6d1b34c895..1906176c68 100644
--- a/samples/minifram/test.cpp
+++ b/samples/minifram/test.cpp
@@ -51,14 +51,6 @@ wxButton      *button     = (wxButton*) NULL;
 // main frame
 bool MyApp::OnInit()
 {
-  // Create the mini frame window
-  mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
-     wxPoint(100, 100), wxSize(220, 100));
-  mini_frame_exists = TRUE;
-
-  mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
-  InitToolbar(mini_frame->GetToolBar());
-
   // Create the main frame window
   main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
      wxPoint(100, 100), wxSize(300, 200));
@@ -68,6 +60,14 @@ bool MyApp::OnInit()
 
   button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
 
+  // Create the mini frame window
+  mini_frame = new MyMiniFrame( main_frame, -1, "wxMiniFrame sample",
+     wxPoint(100, 100), wxSize(220, 100));
+  mini_frame_exists = TRUE;
+
+  mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+  InitToolbar(mini_frame->GetToolBar());
+
 #ifdef __WXMSW__
   main_frame->SetIcon(wxIcon("mondrian"));
   mini_frame->SetIcon(wxIcon("mondrian"));
diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp
index 6709e37217..059fa64f8c 100644
--- a/src/common/prntbase.cpp
+++ b/src/common/prntbase.cpp
@@ -195,10 +195,12 @@ void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
     wxPaintDC dc(this);
     PrepareDC( dc );
 
+/*
 #ifdef __WXGTK__
     if (!GetUpdateRegion().IsEmpty())
         dc.SetClippingRegion( GetUpdateRegion() );
 #endif
+*/
 
     if (m_printPreview)
     {
diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp
index 465a33f868..ee0bc00929 100644
--- a/src/gtk/dcclient.cpp
+++ b/src/gtk/dcclient.cpp
@@ -302,7 +302,6 @@ void wxWindowDC::SetUpDC()
     gdk_gc_set_background( m_penGC, bg_col );
     
     gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
     
     /* m_brushGC */
     m_brush.GetColour().CalcPixel( m_cmap );
@@ -311,7 +310,6 @@ void wxWindowDC::SetUpDC()
     
     gdk_gc_set_fill( m_brushGC, GDK_SOLID );
     
-    
     /* m_bgGC */
     gdk_gc_set_background( m_bgGC, bg_col );
     gdk_gc_set_foreground( m_bgGC, bg_col );
@@ -552,8 +550,6 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoor
             }
         }
 
-        // To do: Fillstyle
-
         if (m_pen.GetStyle() != wxTRANSPARENT)
         {
             for (i = 0 ; i < n ; i++)
@@ -666,12 +662,41 @@ void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wx
 
         if (m_brush.GetStyle() != wxTRANSPARENT)
         {
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            }
         }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
@@ -708,7 +733,28 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
     if (m_window)
     {
         if (m_brush.GetStyle() != wxTRANSPARENT)
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+        {
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+            }
+        }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
             gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
@@ -798,14 +844,6 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
                 gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
                 gdk_gc_set_stipple( gc, mask );
                 gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*                
-                gdk_gc_set_clip_mask( m_brushGC, NULL );
-                gdk_gc_set_clip_mask( m_textGC, NULL );
-                SetBrush( *wxRED_BRUSH );
-                DrawRectangle( 70, 0, 70, 1000 );
-                gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
-                gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/                
                 gdk_gc_unref( gc );
             }
         
@@ -1060,27 +1098,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
 
             wxBitmap bitmap( width, height );
             
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
                 
             /* scale image */
-
             wxImage image( bitmap );
             image = image.Scale( ww, hh );
 
             /* convert to bitmap */
-
             bitmap = image.ConvertToBitmap();
 
             /* draw scaled bitmap */
-
             gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
 
         }
@@ -1088,15 +1120,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
         {
             /* No scaling and not a memory dc with a mask either */
 
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( m_window, m_penGC, xx, yy,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-                                  
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
         }
     }
 
diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp
index fbc1793ea9..70c83e3c77 100644
--- a/src/gtk/dialog.cpp
+++ b/src/gtk/dialog.cpp
@@ -59,7 +59,8 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    win->Close();
+    if (win->IsEnabled())
+        win->Close();
 
     return TRUE;
 }
diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp
index cf54c400db..301a3b309d 100644
--- a/src/gtk/frame.cpp
+++ b/src/gtk/frame.cpp
@@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    if (g_openDialogs == 0)
+    if ((g_openDialogs == 0) && (win->IsEnabled()))
         win->Close();
 
     return TRUE;
diff --git a/src/gtk/minifram.cpp b/src/gtk/minifram.cpp
index fb7412dba9..7b0c2ad433 100644
--- a/src/gtk/minifram.cpp
+++ b/src/gtk/minifram.cpp
@@ -318,6 +318,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
     
     wxFrame::Create( parent, id, title, pos, size, style, name );
 
+    if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+        gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
     if ((style & wxSYSTEM_MENU) &&
         ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
     {
diff --git a/src/gtk/radiobox.cpp b/src/gtk/radiobox.cpp
index a65b078435..10044f42a1 100644
--- a/src/gtk/radiobox.cpp
+++ b/src/gtk/radiobox.cpp
@@ -192,6 +192,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
 
     wxSize ls = LayoutItems();
 
+    GtkRequisition req;
+    req.width = 2;
+    req.height = 2;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    if (req.width > ls.x) ls.x = req.width;
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = ls.x;
     if (newSize.y == -1) newSize.y = ls.y;
diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp
index befad324ff..7525485937 100644
--- a/src/gtk/window.cpp
+++ b/src/gtk/window.cpp
@@ -208,6 +208,8 @@ extern bool g_mainThreadLocked;
 // debug
 //-----------------------------------------------------------------------------
 
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
 #ifdef __WXDEBUG__
 
 #if wxUSE_THREADS
@@ -2157,10 +2159,11 @@ wxWindow::~wxWindow()
 
     if (m_widgetStyle)
     {
+#if DISABLE_STYLE_IF_BROKEN_THEME
         // don't delete if it's a pixmap theme style
         if (!m_widgetStyle->engine_data)
             gtk_style_unref( m_widgetStyle );
-            
+#endif            
         m_widgetStyle = (GtkStyle*) NULL;
     }
 
@@ -3053,6 +3056,7 @@ GtkStyle *wxWindow::GetWidgetStyle()
 
 void wxWindow::SetWidgetStyle()
 {
+#if DISABLE_STYLE_IF_BROKEN_THEM
     if (m_widget->style->engine_data)
     {
         static bool s_warningPrinted = FALSE;
@@ -3064,6 +3068,7 @@ void wxWindow::SetWidgetStyle()
         m_widgetStyle = m_widget->style;
         return;
     }
+#endif
 
     GtkStyle *style = GetWidgetStyle();
 
diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp
index 465a33f868..ee0bc00929 100644
--- a/src/gtk1/dcclient.cpp
+++ b/src/gtk1/dcclient.cpp
@@ -302,7 +302,6 @@ void wxWindowDC::SetUpDC()
     gdk_gc_set_background( m_penGC, bg_col );
     
     gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
     
     /* m_brushGC */
     m_brush.GetColour().CalcPixel( m_cmap );
@@ -311,7 +310,6 @@ void wxWindowDC::SetUpDC()
     
     gdk_gc_set_fill( m_brushGC, GDK_SOLID );
     
-    
     /* m_bgGC */
     gdk_gc_set_background( m_bgGC, bg_col );
     gdk_gc_set_foreground( m_bgGC, bg_col );
@@ -552,8 +550,6 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoor
             }
         }
 
-        // To do: Fillstyle
-
         if (m_pen.GetStyle() != wxTRANSPARENT)
         {
             for (i = 0 ; i < n ; i++)
@@ -666,12 +662,41 @@ void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wx
 
         if (m_brush.GetStyle() != wxTRANSPARENT)
         {
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            }
         }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
@@ -708,7 +733,28 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
     if (m_window)
     {
         if (m_brush.GetStyle() != wxTRANSPARENT)
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+        {
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+            }
+        }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
             gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
@@ -798,14 +844,6 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
                 gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
                 gdk_gc_set_stipple( gc, mask );
                 gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*                
-                gdk_gc_set_clip_mask( m_brushGC, NULL );
-                gdk_gc_set_clip_mask( m_textGC, NULL );
-                SetBrush( *wxRED_BRUSH );
-                DrawRectangle( 70, 0, 70, 1000 );
-                gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
-                gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/                
                 gdk_gc_unref( gc );
             }
         
@@ -1060,27 +1098,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
 
             wxBitmap bitmap( width, height );
             
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
                 
             /* scale image */
-
             wxImage image( bitmap );
             image = image.Scale( ww, hh );
 
             /* convert to bitmap */
-
             bitmap = image.ConvertToBitmap();
 
             /* draw scaled bitmap */
-
             gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
 
         }
@@ -1088,15 +1120,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
         {
             /* No scaling and not a memory dc with a mask either */
 
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( m_window, m_penGC, xx, yy,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-                                  
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
         }
     }
 
diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp
index fbc1793ea9..70c83e3c77 100644
--- a/src/gtk1/dialog.cpp
+++ b/src/gtk1/dialog.cpp
@@ -59,7 +59,8 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    win->Close();
+    if (win->IsEnabled())
+        win->Close();
 
     return TRUE;
 }
diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp
index cf54c400db..301a3b309d 100644
--- a/src/gtk1/frame.cpp
+++ b/src/gtk1/frame.cpp
@@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    if (g_openDialogs == 0)
+    if ((g_openDialogs == 0) && (win->IsEnabled()))
         win->Close();
 
     return TRUE;
diff --git a/src/gtk1/minifram.cpp b/src/gtk1/minifram.cpp
index fb7412dba9..7b0c2ad433 100644
--- a/src/gtk1/minifram.cpp
+++ b/src/gtk1/minifram.cpp
@@ -318,6 +318,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
     
     wxFrame::Create( parent, id, title, pos, size, style, name );
 
+    if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+        gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
     if ((style & wxSYSTEM_MENU) &&
         ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
     {
diff --git a/src/gtk1/radiobox.cpp b/src/gtk1/radiobox.cpp
index a65b078435..10044f42a1 100644
--- a/src/gtk1/radiobox.cpp
+++ b/src/gtk1/radiobox.cpp
@@ -192,6 +192,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
 
     wxSize ls = LayoutItems();
 
+    GtkRequisition req;
+    req.width = 2;
+    req.height = 2;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    if (req.width > ls.x) ls.x = req.width;
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = ls.x;
     if (newSize.y == -1) newSize.y = ls.y;
diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp
index befad324ff..7525485937 100644
--- a/src/gtk1/window.cpp
+++ b/src/gtk1/window.cpp
@@ -208,6 +208,8 @@ extern bool g_mainThreadLocked;
 // debug
 //-----------------------------------------------------------------------------
 
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
 #ifdef __WXDEBUG__
 
 #if wxUSE_THREADS
@@ -2157,10 +2159,11 @@ wxWindow::~wxWindow()
 
     if (m_widgetStyle)
     {
+#if DISABLE_STYLE_IF_BROKEN_THEME
         // don't delete if it's a pixmap theme style
         if (!m_widgetStyle->engine_data)
             gtk_style_unref( m_widgetStyle );
-            
+#endif            
         m_widgetStyle = (GtkStyle*) NULL;
     }
 
@@ -3053,6 +3056,7 @@ GtkStyle *wxWindow::GetWidgetStyle()
 
 void wxWindow::SetWidgetStyle()
 {
+#if DISABLE_STYLE_IF_BROKEN_THEM
     if (m_widget->style->engine_data)
     {
         static bool s_warningPrinted = FALSE;
@@ -3064,6 +3068,7 @@ void wxWindow::SetWidgetStyle()
         m_widgetStyle = m_widget->style;
         return;
     }
+#endif
 
     GtkStyle *style = GetWidgetStyle();
 
-- 
2.45.2