From 771b53b7e836c756002483f50f753ff219eded62 Mon Sep 17 00:00:00 2001 From: zeljko Date: Sat, 26 Sep 2009 07:40:18 +0000 Subject: [PATCH] Qt: avoid crash inside q_DrawXXX() functions when palette paremeter is nil and painter parent is nil. fixes #14673 git-svn-id: trunk@21876 - --- lcl/interfaces/qt/qtobjects.pas | 36 ++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/lcl/interfaces/qt/qtobjects.pas b/lcl/interfaces/qt/qtobjects.pas index 1c518bbcc5..ccde487a3a 100644 --- a/lcl/interfaces/qt/qtobjects.pas +++ b/lcl/interfaces/qt/qtobjects.pas @@ -1943,21 +1943,46 @@ end; procedure TQtDeviceContext.qDrawShadeRect(x, y, w, h: integer; Palette: QPaletteH = nil; Sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0; FillBrush: QBrushH = nil); +var + AppPalette: QPaletteH; begin + AppPalette := nil; if Palette = nil then - Palette := QWidget_palette(Parent); + begin + if Parent = nil then + begin + AppPalette := QPalette_create(); + QApplication_palette(AppPalette); + Palette := AppPalette; + end else + Palette := QWidget_palette(Parent); + end; q_DrawShadeRect(Widget, x, y, w, h, Palette, Sunken, lineWidth, midLineWidth, FillBrush); + if AppPalette <> nil then + begin + QPalette_destroy(AppPalette); + Palette := nil; + end; end; procedure TQtDeviceContext.qDrawWinPanel(x, y, w, h: integer; Palette: QPaletteH; Sunken: Boolean; lineWidth: Integer; FillBrush: QBrushH); var i: integer; + AppPalette: QPaletteH; begin + AppPalette := nil; if Palette = nil then - Palette := QWidget_palette(Parent); + begin + if Parent = nil then + begin + AppPalette := QPalette_create(); + QApplication_palette(AppPalette); + Palette := AppPalette; + end else + Palette := QWidget_palette(Parent); + end; // since q_DrawWinPanel doesnot supports lineWidth we should do it ourself - for i := 1 to lineWidth - 2 do begin q_DrawWinPanel(Widget, x, y, w, h, Palette, Sunken); @@ -1975,6 +2000,11 @@ begin else q_DrawShadePanel(Widget, x, y, w, h, Palette, Sunken, 1, FillBrush); end; + if AppPalette <> nil then + begin + QPalette_destroy(AppPalette); + Palette := nil; + end; end; {------------------------------------------------------------------------------