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();