I'm sorry but what exactly does it do? And what did it do without?
Set color background and front don't work for tForms, tEdit and tLabel
(I'm not test else), I've attached example.
Before all text were black, with patch red.
btw: I suggest _not_ commenting out stuff using block comments, because
that makes the patch hard to read (because diff doesn't understand block
comments and thus doesn't list all the contents). Best just delete the
lines you do not need anymore...
correction in attached file
Or is there a reason?
+// if not GTK_WIDGET_REALIZED(Widget) then begin
why is that commented out now? Does everything work without it?
With this setColor not work,
This function is invoked many times during initializations and so on.
I've remove one from gtkcallback.inc.
I've test step by step, with and without this line and others. I don't
know why, this is the smallest diff I've make.
Darek
Index: lcl/interfaces/gtk/gtkproc.inc
===================================================================
--- lcl/interfaces/gtk/gtkproc.inc (wersja 8327)
+++ lcl/interfaces/gtk/gtkproc.inc (kopia robocza)
@@ -6479,6 +6479,50 @@
Returns the associated string
------------------------------------------------------------------------------}
+
+procedure SetWidgetColor(aWidget : PGTKwidget; data : gpointer); cdecl;
+begin
+ gtk_widget_set_style(aWidget,data);
+ if gtk_is_button(aWidget) or gtk_is_check_button(aWidget) then begin
+ gtk_container_foreach(pGtkContainer(aWidget),@SetWidgetColor,data);
+ end;
+end;
+
+procedure setWidgetBG(aColor: longint;var aWidget : pGTKWidget);
+var
+ WindowStyle: PGtkStyle;
+begin
+ windowStyle:=gtk_widget_get_style(aWidget);
+ windowstyle^.bg[0]:=AllocGDKColor(aColor);
+ SetWidgetColor(aWidget,windowStyle);
+end;
+
+procedure setWidgetFG(aColor: longint;var aWidget : pGTKWidget);
+var
+ WindowStyle: PGtkStyle;
+ xColor:tGDKColor;
+
+begin
+ windowStyle:=gtk_widget_get_style(aWidget);
+ windowstyle^.fg[0]:=AllocGDKColor(aColor);
+ SetWidgetColor(aWidget,windowStyle);
+end;
+
+
+
function GdkAtomToStr(const Atom: TGdkAtom): string;
var
p: Pgchar;
@@ -7540,10 +7584,23 @@
else begin
Widget := MainWidget;
end;
- if not GTK_WIDGET_REALIZED(Widget) then exit;
- //debugln('UpdateWidgetStyleOfControl ',GetWidgetDebugReport(Widget));
+ if (AWinControl.Color<>clNone) then begin
+ if (csOpaque in AWinControl.ControlStyle)
+ and GtkWidgetIsA(MainWidget,GTKAPIWidget_GetType) then exit;
+ if AWinControl.ColorIsStored
+ and ((AWinControl.Color and SYS_COLOR_BASE)=0) then begin
+
+ setWidgetBG(AWinControl.Color,Widget);
+ end;
+ end;
+ if (AWinControl.Font.Color and SYS_COLOR_BASE)=0 then begin
+ setWidgetFG(AWinControl.Font.Color,Widget);
+ end;
+
+
RCStyle:=nil;
FreeFontName:=false;
FreeFontSetName:=false;
@@ -7565,16 +7622,8 @@
if (csOpaque in AWinControl.ControlStyle)
and GtkWidgetIsA(MainWidget,GTKAPIWidget_GetType) then exit;
- NewColor:=TColorToTGDKColor(AWinControl.Color);
- CreateRCStyle;
- RCStyle^.bg[GTK_STATE_NORMAL]:=NewColor;
- // Indicate which colors the GtkRcStyle will affect;
- // unflagged colors will follow the theme
- RCStyle^.color_flags[GTK_STATE_NORMAL]:=
- RCStyle^.color_flags[GTK_STATE_NORMAL] or GTK_RC_BG;
-
{for i:=0 to 4 do begin
RCStyle^.bg[i]:=NewColor;
@@ -7605,31 +7654,7 @@
end;}
// set font color
- if (AWinControl.Font.Color and SYS_COLOR_BASE)=0 then begin
- //NewColor:=TColorToTGDKColor(AWinControl.Font.Color);
- NewColor:=AllocGDKColor(AWinControl.Font.Color);
- //debugln('UpdateWidgetStyleOfControl New Font
Color=',dbgs(NewColor.Pixel),' ',dbgs(NewColor.Red),' ',dbgs(NewColor.Green),'
',dbgs(NewColor.Blue));
- CreateRCStyle;
- {for i:=0 to 4 do begin
- RCStyle^.text[i]:=NewColor;
- RCStyle^.fg[i]:=NewColor;
- RCStyle^.bg[i]:=NewColor;
- RCStyle^.base[i]:=NewColor;
- RCStyle^.color_flags[i]:=
- RCStyle^.color_flags[i] or 15;
- end;}
-
- RCStyle^.text[GTK_STATE_NORMAL]:=NewColor;
-
- // Indicate which colors the GtkRcStyle will affect;
- // unflagged colors will follow the theme
- RCStyle^.color_flags[GTK_STATE_NORMAL]:=
- RCStyle^.color_flags[GTK_STATE_NORMAL] or GTK_RC_TEXT;
-
- //DebugLn('UpdateWidgetStyleOfControl Font Color
',DbgSName(AWinControl),' Color=',DbgS(AWinControl.Font.Color));
- end;
-
// set font (currently only TCustomLabel)
if GtkWidgetIsA(Widget,gtk_label_get_type)
or GtkWidgetIsA(Widget,gtk_editable_get_type)
Index: lcl/interfaces/gtk/gtkcallback.inc
===================================================================
--- lcl/interfaces/gtk/gtkcallback.inc (wersja 8327)
+++ lcl/interfaces/gtk/gtkcallback.inc (kopia robocza)
@@ -153,8 +153,6 @@
end;
end;
- if (TObject(Data) is TWinControl) then
- UpdateWidgetStyleOfControl(TWinControl(Data));
if not (csDesigning in TComponent(Data).ComponentState) then
RealizeAccelerator(TComponent(Data),Widget);
Index: lcl/include/wincontrol.inc
===================================================================
--- lcl/include/wincontrol.inc (wersja 8327)
+++ lcl/include/wincontrol.inc (kopia robocza)
@@ -4789,7 +4789,6 @@
Constraints.UpdateInterfaceConstraints;
InvalidatePreferredSize;
TWSWinControlClass(WidgetSetClass).ConstraintsChange(Self);
- FWinControlFlags := FWinControlFlags - [wcfColorChanged,wcfFontChanged];
//WriteClientRect('A');
if Parent <> nil then AddControl;