View Issue Details

IDProjectCategoryView StatusLast Update
0035699LazarusPatchpublic2019-11-04 11:33
ReporterAnton KavalenkaAssigned ToZeljan Rikalo 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version2.0.3 (SVN)Product Build 
Target VersionFixed in Version 
Summary0035699: gtk3: Implement proper LogFont getting from pango layount
DescriptionPatch introduces TGtk3Font.UpdateFont which gets information from pango descriptor.
TagsNo tags attached.
Fixed in Revision62165
LazTarget-
WidgetsetGTK 3
Attached Files
  • logfont.diff (3,463 bytes)
    Index: gtk3objects.pas
    ===================================================================
    --- gtk3objects.pas	(revision 61352)
    +++ gtk3objects.pas	(working copy)
    @@ -64,6 +64,7 @@
         constructor Create(ACairo: Pcairo_t; AWidget: PGtkWidget = nil);
         constructor Create(ALogFont: TLogFont; const ALongFontName: String);
         destructor Destroy; override;
    +    procedure UpdateLogFont;
         property FontName: String read FFontName write SetFontName;
         property Handle: PPangoFontDescription read FHandle;
         property Layout: PPangoLayout read FLayout;
    @@ -425,6 +426,56 @@
       FFontName:=AValue;
     end;
     
    +procedure TGtk3Font.UpdateLogFont;
    +var
    +  sz:integer;
    +  members:TPangoFontMask;
    +begin
    +  if not Assigned(fHandle) then exit;
    +  fillchar(fLogFont,sizeof(fLogFont),0);
    +  members:=fHandle^.get_set_fields;
    +  if (PANGO_FONT_MASK_FAMILY and members<>0) then
    +  begin
    +    fLogFont.lfFaceName:=PChar(fHandle^.get_family);
    +  end;
    +  if (PANGO_FONT_MASK_STYLE and members<>0) then
    +  begin
    +    case fHandle^.get_style() of
    +    PANGO_STYLE_NORMAL:;//  fLogFont.
    +    PANGO_STYLE_OBLIQUE:;// flogFont.
    +    PANGO_STYLE_ITALIC: fLogFont.lfItalic:=1;
    +    end;
    +  end;
    +  if (PANGO_FONT_MASK_WEIGHT and members<>0) then
    +  begin
    +    fLogFont.lfWeight:=fHandle^.get_weight();
    +  end;
    +  if (PANGO_FONT_MASK_GRAVITY and members<>0) then
    +  begin
    +    case fHandle^.get_gravity() of
    +    PANGO_GRAVITY_SOUTH: fLogFont.lfOrientation := 0;
    +    PANGO_GRAVITY_EAST: fLogFont.lfOrientation := 900;
    +    PANGO_GRAVITY_NORTH: fLogFont.lfOrientation := 1800;
    +    PANGO_GRAVITY_WEST: fLogFont.lfOrientation := 2700;
    +    //PANGO_GRAVITY_AUTO: get from matrix;
    +    end;
    +  end;
    +  if (PANGO_FONT_MASK_SIZE and members<>0) then
    +  begin
    +    sz:=fHandle^.get_size;
    +    if fHandle^.get_size_is_absolute then
    +    begin
    +      sz:=12;// sz div PANGO_SCALE;
    +    end else
    +    begin
    +      { in points }
    +      sz:=round(96*sz/PANGO_SCALE/72);//round(2.03*sz/PANGO_SCALE);
    +    end;
    +
    +    fLogFont.lfHeight:=sz;//round(sz/PANGO_SCALE);
    +  end;
    +end;
    +
     constructor TGtk3Font.Create(ACairo: Pcairo_t; AWidget: PGtkWidget);
     var
       AContext: PPangoContext;
    @@ -451,6 +502,7 @@
         // writeln('**TGtk3Font.Create size is absolute ',FFontName,' size ',FHandle^.get_size);
       end else
       begin
    +    FHandle^.set_size(FHandle^.get_size);
         // writeln('*TGtk3Font.Create size is not absolute ',FFontName,' size ',FHandle^.get_size);
       end;
     
    Index: gtk3winapi.inc
    ===================================================================
    --- gtk3winapi.inc	(revision 61352)
    +++ gtk3winapi.inc	(working copy)
    @@ -2279,7 +2279,23 @@
           ALogBrush^ := TGtk3Brush(AObject).LogBrush;
           // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' ALogBrush ',dbgHex(PtrUInt(ALogBrush)));
         end;
    -  end
    +  end else
    +  if aObject is TGtk3Font then
    +  begin
    +    if Buf = nil then
    +    begin
    +      // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' Buffer is empty ',dbgHex(PtrUInt(ALogBrush)));
    +      Result := SizeOf(TLogFont);
    +    end else
    +    if BufSize >= SizeOf(TLogFont) then
    +    begin
    +      Result := SizeOf(TLogFont);
    +      // ALogBrush^ := TGtk3Brush(aObject).Color;
    +       TGtk3Font(AObject).UpdateLogFont;
    +      ALogFont^ := TGtk3Font(AObject).LogFont;
    +      // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' ALogBrush ',dbgHex(PtrUInt(ALogBrush)));
    +    end;
    +  end;
     end;
     
     function TGtk3WidgetSet.GetParent(Handle: HWND): HWND;
    
    logfont.diff (3,463 bytes)
  • gtk3wsbuttons.diff (1,832 bytes)
    Index: gtk3wsbuttons.pp
    ===================================================================
    --- gtk3wsbuttons.pp	(revision 62087)
    +++ gtk3wsbuttons.pp	(working copy)
    @@ -72,7 +72,7 @@
     implementation
     
     uses
    -  LResources, gtk3objects, gtk3procs;
    +  graphtype,imglist,LResources, gtk3objects, gtk3procs;
     
     
     { TGtk3WSCustomBitBtn }
    @@ -115,6 +115,11 @@
       const AValue: TButtonGlyph);
     var
       AImage: PGtkImage;
    +  AGlyph: TBitmap;
    +  AIndex: Integer;
    +  AEffect: TGraphicsDrawEffect;
    +  AImgRes: TScaledImageListResolution;
    +  ScaleFactor: Double;
     begin
       {$IFDEF GTK3DEBUGCORE}
       DebugLn('TGtk3WSBitBtn.SetGlyph');
    @@ -121,11 +126,27 @@
       {$ENDIF}
       if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
         Exit;
    -  if ABitBtn.CanShowGlyph then
    -    AImage := gtk_image_new_from_pixbuf(TGtk3Image(ABitBtn.Glyph.Handle).Handle)
    -  else
    -    AImage := nil;
    -  gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage);
    +  if ABitBtn.CanShowGlyph(True) then
    +  begin
    +    { allocate image which would be cached in TGtk3Button instance }
    +    AGlyph := TBitmap.Create;
    +    ScaleFactor := ABitBtn.GetCanvasScaleFactor;
    +    AValue.GetImageIndexAndEffect(bsUp, ABitBtn.Font.PixelsPerInch,
    +      ScaleFactor, AImgRes, AIndex, AEffect);
    +    AImgRes.GetBitmap(AIndex, AGlyph, AEffect);
    +
    +    if not AGlyph.Empty then
    +      AImage := gtk_image_new_from_pixbuf(TGtk3Image(AGlyph.Handle).Handle)
    +    else
    +      AImage := nil;
    +    if Assigned(AImage) then
    +      gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage)
    +    else
    +      PGtkButton(TGtk3Button(ABitBtn.Handle).Widget)^.always_show_image:=false;
    +
    +    { store glyph to prevent leaks }
    +    TGtk3Button(ABitBtn.Handle).Image:=AGlyph;
    +  end;
     end;
     
     class procedure TGtk3WSBitBtn.SetLayout(const ABitBtn: TCustomBitBtn;
    
    gtk3wsbuttons.diff (1,832 bytes)
  • tst-gtk3-imagelist.zip (3,639 bytes)
  • gtk3wsbuttons-2.diff (2,183 bytes)
    Index: gtk3wsbuttons.pp
    ===================================================================
    --- gtk3wsbuttons.pp	(revision 62111)
    +++ gtk3wsbuttons.pp	(working copy)
    @@ -72,7 +72,7 @@
     implementation
     
     uses
    -  LResources, gtk3objects, gtk3procs;
    +  graphtype,imglist,LResources, gtk3objects, gtk3procs;
     
     
     { TGtk3WSCustomBitBtn }
    @@ -115,6 +115,10 @@
       const AValue: TButtonGlyph);
     var
       AImage: PGtkImage;
    +  AGlyph: TBitmap;
    +  resolution:TCustomImageListResolution;
    +  ScaleFactor: Double;
    +  raw:TRawImage;
     begin
       {$IFDEF GTK3DEBUGCORE}
       DebugLn('TGtk3WSBitBtn.SetGlyph');
    @@ -121,11 +125,36 @@
       {$ENDIF}
       if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
         Exit;
    -  if ABitBtn.CanShowGlyph then
    -    AImage := gtk_image_new_from_pixbuf(TGtk3Image(ABitBtn.Glyph.Handle).Handle)
    -  else
    -    AImage := nil;
    -  gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage);
    +  if ABitBtn.CanShowGlyph(True) then
    +  begin
    +    { allocate image which would be cached in TGtk3Button instance }
    +    AGlyph := TBitmap.Create;
    +    ScaleFactor := ABitBtn.GetCanvasScaleFactor;
    +    if (ABitBtn.ImageIndex>=0) and Assigned(ABitBtn.Images) then
    +    begin
    +      { find imagelist scaled}
    +      resolution:=ABitBtn.Images.Resolution[round(AbitBtn.Images.Width*ScaleFactor)];
    +      resolution.GetRawImage(ABitBtn.ImageIndex,raw);
    +      { convice the bitmap it has actually another format }
    +      AGlyph.BeginUpdate();
    +      raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
    +      AGlyph.LoadFromRawImage(raw,false);
    +      AGlyph.EndUpdate();
    +    end else
    +      AGlyph.Assign(AValue.Glyph);
    +
    +    if not AGlyph.Empty then
    +      AImage := gtk_image_new_from_pixbuf(TGtk3Image(AGlyph.Handle).Handle)
    +    else
    +      AImage := nil;
    +    if Assigned(AImage) then
    +      gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage)
    +    else
    +      PGtkButton(TGtk3Button(ABitBtn.Handle).Widget)^.always_show_image:=false;
    +
    +    { store glyph to prevent leaks }
    +    TGtk3Button(ABitBtn.Handle).Image:=AGlyph;
    +  end;
     end;
     
     class procedure TGtk3WSBitBtn.SetLayout(const ABitBtn: TCustomBitBtn;
    
    gtk3wsbuttons-2.diff (2,183 bytes)

Relationships

related to 0035667 closedZeljan Rikalo gtk3: Make toolbar buttons appear 
related to 0034473 new GTK3 autosize SpinEdits 

Activities

Anton Kavalenka

2019-06-10 22:07

reporter  

logfont.diff (3,463 bytes)
Index: gtk3objects.pas
===================================================================
--- gtk3objects.pas	(revision 61352)
+++ gtk3objects.pas	(working copy)
@@ -64,6 +64,7 @@
     constructor Create(ACairo: Pcairo_t; AWidget: PGtkWidget = nil);
     constructor Create(ALogFont: TLogFont; const ALongFontName: String);
     destructor Destroy; override;
+    procedure UpdateLogFont;
     property FontName: String read FFontName write SetFontName;
     property Handle: PPangoFontDescription read FHandle;
     property Layout: PPangoLayout read FLayout;
@@ -425,6 +426,56 @@
   FFontName:=AValue;
 end;
 
+procedure TGtk3Font.UpdateLogFont;
+var
+  sz:integer;
+  members:TPangoFontMask;
+begin
+  if not Assigned(fHandle) then exit;
+  fillchar(fLogFont,sizeof(fLogFont),0);
+  members:=fHandle^.get_set_fields;
+  if (PANGO_FONT_MASK_FAMILY and members<>0) then
+  begin
+    fLogFont.lfFaceName:=PChar(fHandle^.get_family);
+  end;
+  if (PANGO_FONT_MASK_STYLE and members<>0) then
+  begin
+    case fHandle^.get_style() of
+    PANGO_STYLE_NORMAL:;//  fLogFont.
+    PANGO_STYLE_OBLIQUE:;// flogFont.
+    PANGO_STYLE_ITALIC: fLogFont.lfItalic:=1;
+    end;
+  end;
+  if (PANGO_FONT_MASK_WEIGHT and members<>0) then
+  begin
+    fLogFont.lfWeight:=fHandle^.get_weight();
+  end;
+  if (PANGO_FONT_MASK_GRAVITY and members<>0) then
+  begin
+    case fHandle^.get_gravity() of
+    PANGO_GRAVITY_SOUTH: fLogFont.lfOrientation := 0;
+    PANGO_GRAVITY_EAST: fLogFont.lfOrientation := 900;
+    PANGO_GRAVITY_NORTH: fLogFont.lfOrientation := 1800;
+    PANGO_GRAVITY_WEST: fLogFont.lfOrientation := 2700;
+    //PANGO_GRAVITY_AUTO: get from matrix;
+    end;
+  end;
+  if (PANGO_FONT_MASK_SIZE and members<>0) then
+  begin
+    sz:=fHandle^.get_size;
+    if fHandle^.get_size_is_absolute then
+    begin
+      sz:=12;// sz div PANGO_SCALE;
+    end else
+    begin
+      { in points }
+      sz:=round(96*sz/PANGO_SCALE/72);//round(2.03*sz/PANGO_SCALE);
+    end;
+
+    fLogFont.lfHeight:=sz;//round(sz/PANGO_SCALE);
+  end;
+end;
+
 constructor TGtk3Font.Create(ACairo: Pcairo_t; AWidget: PGtkWidget);
 var
   AContext: PPangoContext;
@@ -451,6 +502,7 @@
     // writeln('**TGtk3Font.Create size is absolute ',FFontName,' size ',FHandle^.get_size);
   end else
   begin
+    FHandle^.set_size(FHandle^.get_size);
     // writeln('*TGtk3Font.Create size is not absolute ',FFontName,' size ',FHandle^.get_size);
   end;
 
Index: gtk3winapi.inc
===================================================================
--- gtk3winapi.inc	(revision 61352)
+++ gtk3winapi.inc	(working copy)
@@ -2279,7 +2279,23 @@
       ALogBrush^ := TGtk3Brush(AObject).LogBrush;
       // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' ALogBrush ',dbgHex(PtrUInt(ALogBrush)));
     end;
-  end
+  end else
+  if aObject is TGtk3Font then
+  begin
+    if Buf = nil then
+    begin
+      // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' Buffer is empty ',dbgHex(PtrUInt(ALogBrush)));
+      Result := SizeOf(TLogFont);
+    end else
+    if BufSize >= SizeOf(TLogFont) then
+    begin
+      Result := SizeOf(TLogFont);
+      // ALogBrush^ := TGtk3Brush(aObject).Color;
+       TGtk3Font(AObject).UpdateLogFont;
+      ALogFont^ := TGtk3Font(AObject).LogFont;
+      // DebugLn('TGtk3WidgetSet.GetObject ',dbgsName(aObject),' ALogBrush ',dbgHex(PtrUInt(ALogBrush)));
+    end;
+  end;
 end;
 
 function TGtk3WidgetSet.GetParent(Handle: HWND): HWND;
logfont.diff (3,463 bytes)

Alexey Tor.

2019-06-11 14:57

reporter   ~0116676

Last edited: 2019-06-11 14:57

View 2 revisions

Anton,
thanks for this patch.

Can you see why GTK3 cannot show icons from TImageList on BitBtn (i see one pixel) and SpeedButtons (16x16 icon is truncated)?

Anton Kavalenka

2019-10-19 16:57

reporter   ~0118702

Last edited: 2019-10-19 17:00

View 2 revisions

@Alexey Tor.
Uploaded patch to work around 1px button icon and getting icons either from Glyph or ImageList

required patch for per-button icons storage from 0035667



gtk3wsbuttons.diff (1,832 bytes)
Index: gtk3wsbuttons.pp
===================================================================
--- gtk3wsbuttons.pp	(revision 62087)
+++ gtk3wsbuttons.pp	(working copy)
@@ -72,7 +72,7 @@
 implementation
 
 uses
-  LResources, gtk3objects, gtk3procs;
+  graphtype,imglist,LResources, gtk3objects, gtk3procs;
 
 
 { TGtk3WSCustomBitBtn }
@@ -115,6 +115,11 @@
   const AValue: TButtonGlyph);
 var
   AImage: PGtkImage;
+  AGlyph: TBitmap;
+  AIndex: Integer;
+  AEffect: TGraphicsDrawEffect;
+  AImgRes: TScaledImageListResolution;
+  ScaleFactor: Double;
 begin
   {$IFDEF GTK3DEBUGCORE}
   DebugLn('TGtk3WSBitBtn.SetGlyph');
@@ -121,11 +126,27 @@
   {$ENDIF}
   if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
     Exit;
-  if ABitBtn.CanShowGlyph then
-    AImage := gtk_image_new_from_pixbuf(TGtk3Image(ABitBtn.Glyph.Handle).Handle)
-  else
-    AImage := nil;
-  gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage);
+  if ABitBtn.CanShowGlyph(True) then
+  begin
+    { allocate image which would be cached in TGtk3Button instance }
+    AGlyph := TBitmap.Create;
+    ScaleFactor := ABitBtn.GetCanvasScaleFactor;
+    AValue.GetImageIndexAndEffect(bsUp, ABitBtn.Font.PixelsPerInch,
+      ScaleFactor, AImgRes, AIndex, AEffect);
+    AImgRes.GetBitmap(AIndex, AGlyph, AEffect);
+
+    if not AGlyph.Empty then
+      AImage := gtk_image_new_from_pixbuf(TGtk3Image(AGlyph.Handle).Handle)
+    else
+      AImage := nil;
+    if Assigned(AImage) then
+      gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage)
+    else
+      PGtkButton(TGtk3Button(ABitBtn.Handle).Widget)^.always_show_image:=false;
+
+    { store glyph to prevent leaks }
+    TGtk3Button(ABitBtn.Handle).Image:=AGlyph;
+  end;
 end;
 
 class procedure TGtk3WSBitBtn.SetLayout(const ABitBtn: TCustomBitBtn;
gtk3wsbuttons.diff (1,832 bytes)

Alexey Tor.

2019-10-19 21:05

reporter   ~0118715

Last edited: 2019-10-19 21:05

View 2 revisions

Applied 2 patches. tested. not 100% fixed. demo has 2 buttons with arrow icons: green icon and yellow icon.
gtk3 WS shows them as - green icon and another greenish icon.

Alexey Tor.

2019-10-19 21:07

reporter   ~0118716

Added demo to show wrong color of icon.

tst-gtk3-imagelist.zip (3,639 bytes)

Anton Kavalenka

2019-10-20 10:05

reporter   ~0118721

Seems like GTK3 ImageList swaps red and blue channel while retrieving bitmap. Green channel (2nd byte of pixel color) remains untouched.

Anton Kavalenka

2019-10-24 06:54

reporter   ~0118786

Amazing, the attached screenshot shows imagelist bitmaps painted in the paintbox and embedded into buttons.
Before attaching, the bitmap is diagonal-crossed with BLUE line.

Looks like GTK3 image requires GdkPixbuf in BGRA format, but imagelist.GetXXXX always create images in RGBA

@Zeljan Rikalo - please rename the issue (it becomes another one, logfont patch is related to 0034473)
gtk3: Implement bitbtn imagelist glyph

Anton Kavalenka

2019-10-24 07:50

reporter   ~0118787

Recently this works, see the gtk3wsbuttons.diff

gtk3wsbuttons-2.diff (2,183 bytes)
Index: gtk3wsbuttons.pp
===================================================================
--- gtk3wsbuttons.pp	(revision 62111)
+++ gtk3wsbuttons.pp	(working copy)
@@ -72,7 +72,7 @@
 implementation
 
 uses
-  LResources, gtk3objects, gtk3procs;
+  graphtype,imglist,LResources, gtk3objects, gtk3procs;
 
 
 { TGtk3WSCustomBitBtn }
@@ -115,6 +115,10 @@
   const AValue: TButtonGlyph);
 var
   AImage: PGtkImage;
+  AGlyph: TBitmap;
+  resolution:TCustomImageListResolution;
+  ScaleFactor: Double;
+  raw:TRawImage;
 begin
   {$IFDEF GTK3DEBUGCORE}
   DebugLn('TGtk3WSBitBtn.SetGlyph');
@@ -121,11 +125,36 @@
   {$ENDIF}
   if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
     Exit;
-  if ABitBtn.CanShowGlyph then
-    AImage := gtk_image_new_from_pixbuf(TGtk3Image(ABitBtn.Glyph.Handle).Handle)
-  else
-    AImage := nil;
-  gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage);
+  if ABitBtn.CanShowGlyph(True) then
+  begin
+    { allocate image which would be cached in TGtk3Button instance }
+    AGlyph := TBitmap.Create;
+    ScaleFactor := ABitBtn.GetCanvasScaleFactor;
+    if (ABitBtn.ImageIndex>=0) and Assigned(ABitBtn.Images) then
+    begin
+      { find imagelist scaled}
+      resolution:=ABitBtn.Images.Resolution[round(AbitBtn.Images.Width*ScaleFactor)];
+      resolution.GetRawImage(ABitBtn.ImageIndex,raw);
+      { convice the bitmap it has actually another format }
+      AGlyph.BeginUpdate();
+      raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
+      AGlyph.LoadFromRawImage(raw,false);
+      AGlyph.EndUpdate();
+    end else
+      AGlyph.Assign(AValue.Glyph);
+
+    if not AGlyph.Empty then
+      AImage := gtk_image_new_from_pixbuf(TGtk3Image(AGlyph.Handle).Handle)
+    else
+      AImage := nil;
+    if Assigned(AImage) then
+      gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage)
+    else
+      PGtkButton(TGtk3Button(ABitBtn.Handle).Widget)^.always_show_image:=false;
+
+    { store glyph to prevent leaks }
+    TGtk3Button(ABitBtn.Handle).Image:=AGlyph;
+  end;
 end;
 
 class procedure TGtk3WSBitBtn.SetLayout(const ABitBtn: TCustomBitBtn;
gtk3wsbuttons-2.diff (2,183 bytes)

Alexey Tor.

2019-10-24 21:05

reporter   ~0118790

Thanks for this fix. waiting for applied patch.

Zeljan Rikalo

2019-11-03 16:13

developer   ~0119015

Please test and close if ok. I'll commit patch for images on buttons in next commit since it's not part of this issue.

Alexey Tor.

2019-11-03 18:50

reporter   ~0119018

Thanks.
@Anton,
can you please see next gtk3 issues?
0036255
0036254

Issue History

Date Modified Username Field Change
2019-06-10 22:07 Anton Kavalenka New Issue
2019-06-10 22:07 Anton Kavalenka File Added: logfont.diff
2019-06-11 14:57 Alexey Tor. Note Added: 0116676
2019-06-11 14:57 Alexey Tor. Note Edited: 0116676 View Revisions
2019-10-19 16:57 Anton Kavalenka File Added: gtk3wsbuttons.diff
2019-10-19 16:57 Anton Kavalenka Note Added: 0118702
2019-10-19 17:00 Anton Kavalenka Note Edited: 0118702 View Revisions
2019-10-19 18:35 Zeljan Rikalo Assigned To => Zeljan Rikalo
2019-10-19 18:35 Zeljan Rikalo Status new => assigned
2019-10-19 21:05 Alexey Tor. Note Added: 0118715
2019-10-19 21:05 Alexey Tor. Note Edited: 0118715 View Revisions
2019-10-19 21:07 Alexey Tor. File Added: tst-gtk3-imagelist.zip
2019-10-19 21:07 Alexey Tor. Note Added: 0118716
2019-10-20 10:05 Anton Kavalenka File Added: Здымак экрана, 2019-10-20 11-03-55.png
2019-10-20 10:05 Anton Kavalenka Note Added: 0118721
2019-10-24 06:54 Anton Kavalenka File Added: Здымак экрана, 2019-10-24 07-41-16.png
2019-10-24 06:54 Anton Kavalenka Note Added: 0118786
2019-10-24 07:50 Anton Kavalenka File Added: Здымак экрана, 2019-10-24 08-48-54.png
2019-10-24 07:50 Anton Kavalenka File Added: gtk3wsbuttons-2.diff
2019-10-24 07:50 Anton Kavalenka Note Added: 0118787
2019-10-24 21:05 Alexey Tor. Note Added: 0118790
2019-10-24 23:00 Juha Manninen Relationship added related to 0035667
2019-10-24 23:02 Juha Manninen Relationship added related to 0034473
2019-11-03 16:13 Zeljan Rikalo Status assigned => resolved
2019-11-03 16:13 Zeljan Rikalo Resolution open => fixed
2019-11-03 16:13 Zeljan Rikalo Fixed in Revision => 62165
2019-11-03 16:13 Zeljan Rikalo LazTarget => -
2019-11-03 16:13 Zeljan Rikalo Widgetset GTK 3 => GTK 3
2019-11-03 16:13 Zeljan Rikalo Note Added: 0119015
2019-11-03 18:50 Alexey Tor. Note Added: 0119018
2019-11-04 11:33 Anton Kavalenka Status resolved => closed