View Issue Details

IDProjectCategoryView StatusLast Update
0036297LazarusWidgetsetpublic2019-11-24 17:22
ReporterCudaText manAssigned ToJuha Manninen 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionreopened 
PlatformUbuntu 19 x64OSOS Version
Product Version2.1 (SVN)Product Build 
Target VersionFixed in Version 
Summary0036297: gtk3: Crash when rendering underline or strikeout text
DescriptionDemo crashes, if Canvas.Font.Style includes fsUnderline+fsStrikeout.
Otherwise, it works.
AFAIR, sometimes, I saw it worked but it didn't render strikeout TLabel caption.
TagsNo tags attached.
Fixed in Revisionr62253, r62286, r62287
LazTarget-
WidgetsetGTK 3
Attached Files
  • tst-crossed-text.zip (2,423 bytes)
  • gtk3objects.diff (1,121 bytes)
    Index: lcl/interfaces/gtk3/gtk3objects.pas
    ===================================================================
    --- lcl/interfaces/gtk3/gtk3objects.pas	(revision 62246)
    +++ lcl/interfaces/gtk3/gtk3objects.pas	(working copy)
    @@ -525,7 +525,6 @@
       AContext: PPangoContext;
       ADescription: PPangoFontDescription;
       AttrList: PPangoAttrList;
    -  AttrListTemporary: Boolean;
       Attr: PPangoAttribute;
     begin
       FLogFont := ALogFont;
    @@ -559,13 +558,12 @@
     
       if (ALogFont.lfUnderline<>0) or (ALogFont.lfStrikeOut<>0) then
       begin
    -    AttrListTemporary := false;
         AttrList := pango_layout_get_attributes(FLayout);
         if (AttrList = nil) then
    -    begin
           AttrList := pango_attr_list_new();
    -      AttrListTemporary := True;
    -    end;
    +
    +    pango_attr_list_ref(AttrList);
    +
         if ALogFont.lfUnderline <> 0 then
           Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
         else
    @@ -577,8 +575,7 @@
     
         pango_layout_set_attributes(FLayout, AttrList);
     
    -    if AttrListTemporary then
    -      pango_attr_list_unref(AttrList);
    +    pango_attr_list_unref(AttrList);
       end;
     
       g_object_unref(AContext);
    
    gtk3objects.diff (1,121 bytes)
  • tst-crossed-text-2.zip (2,520 bytes)
  • 0001-LCL-GTK3-Font-attributes.patch (3,526 bytes)
    From 8330226a6461575823723f2639a00acd58b3bfe9 Mon Sep 17 00:00:00 2001
    From: juha <juha.manninen62@gmail.com>
    Date: Sun, 17 Nov 2019 19:10:39 +0200
    Subject: [PATCH] LCL-GTK3: Font attributes.
    
    ---
     lcl/interfaces/gtk3/gtk3objects.pas | 60 ++++++++++++++---------------
     1 file changed, 30 insertions(+), 30 deletions(-)
    
    diff --git a/lcl/interfaces/gtk3/gtk3objects.pas b/lcl/interfaces/gtk3/gtk3objects.pas
    index 47dbcd276..22f3a3557 100644
    --- a/lcl/interfaces/gtk3/gtk3objects.pas
    +++ b/lcl/interfaces/gtk3/gtk3objects.pas
    @@ -523,7 +523,6 @@ end;
     constructor TGtk3Font.Create(ALogFont: TLogFont; const ALongFontName: String);
     var
       AContext: PPangoContext;
    -  ADescription: PPangoFontDescription;
       AttrList: PPangoAttrList;
       Attr: PPangoAttribute;
     begin
    @@ -535,41 +534,42 @@ begin
         if Gtk3WidgetSet.DefaultAppFontName <> '' then
           FHandle := pango_font_description_from_string(PgChar(Gtk3WidgetSet.DefaultAppFontName))
         else
    -    begin
    -      ADescription := pango_context_get_font_description(AContext);
    -      FHandle := pango_font_description_copy(ADescription);
    -    end;
    -    FFontName := FHandle^.get_family;
    +      FHandle := pango_font_description_copy(pango_context_get_font_description(AContext));
       end else
    -  begin
         FHandle := pango_font_description_from_string(PgChar(FFontName));
    -    FFontName := FHandle^.get_family;
    -  end;
    +  FFontName := FHandle^.get_family;
    +
       if ALogFont.lfHeight <> 0 then
         FHandle^.set_absolute_size(Abs(ALogFont.lfHeight) * PANGO_SCALE);
    -  if ALogFont.lfItalic > 0 then
    -    FHandle^.set_style(PANGO_STYLE_ITALIC);
    -  FHandle^.set_weight(ALogFont.lfWeight);
       FLayout := pango_layout_new(AContext);
       FLayout^.set_font_description(FHandle);
    -
    -  if (ALogFont.lfUnderline<>0) or (ALogFont.lfStrikeOut<>0) then
    -  begin
    -    AttrList := pango_layout_get_attributes(FLayout);
    -    if (AttrList = nil) then
    -      AttrList := pango_attr_list_new();
    -    pango_attr_list_ref(AttrList);
    -    if ALogFont.lfUnderline <> 0 then
    -      Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
    -    else
    -      Attr := pango_attr_underline_new(PANGO_UNDERLINE_NONE);
    -    pango_attr_list_change(AttrList, Attr);
    -
    -    Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
    -    pango_attr_list_change(AttrList, Attr);
    -    pango_layout_set_attributes(FLayout, AttrList);
    -    pango_attr_list_unref(AttrList);
    -  end;
    +  Assert(pango_layout_get_attributes(FLayout)=Nil, 'TGtk3Font.Create: Layout already has Attributes');
    +  AttrList := pango_attr_list_new();
    +  pango_attr_list_ref(AttrList);
    +  // Italic
    +  if ALogFont.lfItalic > 0 then
    +    Attr := pango_attr_style_new(PANGO_STYLE_ITALIC)
    +  else
    +    Attr := pango_attr_style_new(PANGO_STYLE_NORMAL);
    +  pango_attr_list_change(AttrList, Attr);
    +  // Bold
    +  if ALogFont.lfWeight > 0 then
    +    Attr := pango_attr_weight_new(PANGO_WEIGHT_BOLD)
    +  else
    +    Attr := pango_attr_weight_new(PANGO_WEIGHT_NORMAL);
    +  pango_attr_list_change(AttrList, Attr);
    +  // Underline
    +  if ALogFont.lfUnderline <> 0 then
    +    Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
    +  else
    +    Attr := pango_attr_underline_new(PANGO_UNDERLINE_NONE);
    +  pango_attr_list_change(AttrList, Attr);
    +  // StrikeOut
    +  Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
    +  pango_attr_list_change(AttrList, Attr);
    +  // Update attributes for Layout and free memory.
    +  pango_layout_set_attributes(FLayout, AttrList);
    +  pango_attr_list_unref(AttrList);
       g_object_unref(AContext);
     end;
     
    -- 
    2.24.0
    
    
  • gtk3winapi.inc.diff (554 bytes)
    Index: gtk3winapi.inc
    ===================================================================
    --- gtk3winapi.inc	(revision 62267)
    +++ gtk3winapi.inc	(working copy)
    @@ -2741,11 +2741,11 @@
         TM.tmBreakChar := '?';
     
         TM.tmItalic := Ord(AFont.Handle^.get_style = PANGO_STYLE_ITALIC);
    -    AList := AFont.Layout^.get_attributes;
    +    {AList := AFont.Layout^.get_attributes;
         if AList <> nil then
         begin
           AList^.unref;
    -    end;
    +    end;}
         //  APangoMetrics^.get_underline_position;
         // TM.tmUnderlined :=
         // TM.tmStruckOut :=
    
    gtk3winapi.inc.diff (554 bytes)
  • gtk3objects-2.diff (804 bytes)
    Index: gtk3objects.pas
    ===================================================================
    --- gtk3objects.pas	(revision 62286)
    +++ gtk3objects.pas	(working copy)
    @@ -558,7 +558,7 @@
         AttrList := pango_layout_get_attributes(FLayout);
         if (AttrList = nil) then
           AttrList := pango_attr_list_new();
    -    pango_attr_list_ref(AttrList);
    +    //pango_attr_list_ref(AttrList);
         if ALogFont.lfUnderline <> 0 then
           Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
         else
    @@ -568,7 +568,7 @@
         Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
         pango_attr_list_change(AttrList, Attr);
         pango_layout_set_attributes(FLayout, AttrList);
    -    pango_attr_list_unref(AttrList);
    +    //pango_attr_list_unref(AttrList);
       end;
       g_object_unref(AContext);
     end;
    
    gtk3objects-2.diff (804 bytes)

Activities

CudaText man

2019-11-12 00:08

reporter  

tst-crossed-text.zip (2,423 bytes)

Juha Manninen

2019-11-13 00:25

developer   ~0119251

I copied a debugger backtrace below. Line 2720 in TGtk3WidgetSet.GetTextMetrics() points to :
    pango_layout_get_extents(AFont.Layout, nil, @aRect);
Last item in the backtrace says "pango_attr_list_copy". I guess "pango_layout_get_extents" calls it and then it crashes. Why?

#0 pango_attr_list_copy at :0
0000001 ?? at :0
0000002 ?? at :0
0000003 ?? at :0
0000004 GETTEXTMETRICS(0x7ffff7f8f4b0, 140737310037056, {TMHEIGHT = 17, TMASCENT = 14, TMDESCENT = 3, TMINTERNALLEADING = 0, TMEXTERNALLEADING = 0, TMAVECHARWIDTH = 6, TMMAXCHARWIDTH = 0, TMWEIGHT = 0, TMOVERHANG = 0, TMDIGITIZEDASPECTX = 0, TMDIGITIZEDASPECTY = 0, TMFIRSTCHAR = 0 #0, TMLASTCHAR = 0 #0, TMDEFAULTCHAR = 0 #0, TMBREAKCHAR = 0 #0, TMITALIC = 0, TMUNDERLINED = 0, TMSTRUCKOUT = 0, TMPITCHANDFAMILY = 0, TMCHARSET = 0}) at gtk3/gtk3winapi.inc:2720
0000005 DRAWTEXT(0x7ffff7f8f4b0, 140737310037056, 0x7ffff55ff018 'Label1', 6, {LEFT = 0, TOP = 0, RIGHT = 41, BOTTOM = 19, TOPLEFT = {X = 0, Y = 0}, BOTTOMRIGHT = {X = 41, Y = 19}, VECTOR = {0, 0, 41, 19}}, 352) at gtk3/gtk3winapi.inc:986
0000006 DRAWTEXT(140737310037056, 0x7ffff55ff018 'Label1', 6, {LEFT = 0, TOP = 0, RIGHT = 41, BOTTOM = 19, TOPLEFT = {X = 0, Y = 0}, BOTTOMRIGHT = {X = 41, Y = 19}, VECTOR = {0, 0, 41, 19}}, 352) at include/winapi.inc:215
0000007 TEXTRECT(0x7ffff40c6420, {LEFT = 0, TOP = 0, RIGHT = 41, BOTTOM = 19, TOPLEFT = {X = 0, Y = 0}, BOTTOMRIGHT = {X = 41, Y = 19}, VECTOR = {0, 0, 41, 19}}, 0, 0, 0x7ffff55ff018 'Label1', {ALIGNMENT = TALEFTJUSTIFY, LAYOUT = TLTOP, SINGLELINE = true, CLIPPING = true, EXPANDTABS = true, SHOWPREFIX = true, WORDBREAK = false, OPAQUE = false, SYSTEMFONT = false, RIGHTTOLEFT = false, ENDELLIPSIS = false}) at include/canvas.inc:1334
0000008 PAINT(0x7ffff7f90ef0) at include/customlabel.inc:488
0000009 WMPAINT(0x7ffff7f90ef0, {MSG = 15, UNUSEDMSG = 1431655765, DC = 140737310037056, PAINTSTRUCT = 0x0, RESULT = 0}) at include/graphiccontrol.inc:58

Anton Kavalenka

2019-11-16 22:33

reporter   ~0119349

Patch resolves the problem of reference counting

gtk3objects.diff (1,121 bytes)
Index: lcl/interfaces/gtk3/gtk3objects.pas
===================================================================
--- lcl/interfaces/gtk3/gtk3objects.pas	(revision 62246)
+++ lcl/interfaces/gtk3/gtk3objects.pas	(working copy)
@@ -525,7 +525,6 @@
   AContext: PPangoContext;
   ADescription: PPangoFontDescription;
   AttrList: PPangoAttrList;
-  AttrListTemporary: Boolean;
   Attr: PPangoAttribute;
 begin
   FLogFont := ALogFont;
@@ -559,13 +558,12 @@
 
   if (ALogFont.lfUnderline<>0) or (ALogFont.lfStrikeOut<>0) then
   begin
-    AttrListTemporary := false;
     AttrList := pango_layout_get_attributes(FLayout);
     if (AttrList = nil) then
-    begin
       AttrList := pango_attr_list_new();
-      AttrListTemporary := True;
-    end;
+
+    pango_attr_list_ref(AttrList);
+
     if ALogFont.lfUnderline <> 0 then
       Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
     else
@@ -577,8 +575,7 @@
 
     pango_layout_set_attributes(FLayout, AttrList);
 
-    if AttrListTemporary then
-      pango_attr_list_unref(AttrList);
+    pango_attr_list_unref(AttrList);
   end;
 
   g_object_unref(AContext);
gtk3objects.diff (1,121 bytes)

Juha Manninen

2019-11-17 10:43

developer   ~0119353

Applied, thanks.
The patch changed code far away from the crash point. I wouldn't know where to fix it. :)

Anton Kavalenka

2019-11-17 11:21

reporter   ~0119359

Dichotomy - our way :)
Correlation is not causation :)

CudaText man

2019-11-17 11:42

reporter   ~0119360

I still see the crash in my new demo-- attached. In 80% of runs from IDE i see the crash.

tst-crossed-text-2.zip (2,520 bytes)

Juha Manninen

2019-11-17 18:17

developer   ~0119367

I created a patch ... which does not work although it looks so perfect. This is annoying! Now it crashes with any attributes or even without attributes.
I don't know much about GTK API but I tried many variations yet I cannot locate the problem. :(

0001-LCL-GTK3-Font-attributes.patch (3,526 bytes)
From 8330226a6461575823723f2639a00acd58b3bfe9 Mon Sep 17 00:00:00 2001
From: juha <juha.manninen62@gmail.com>
Date: Sun, 17 Nov 2019 19:10:39 +0200
Subject: [PATCH] LCL-GTK3: Font attributes.

---
 lcl/interfaces/gtk3/gtk3objects.pas | 60 ++++++++++++++---------------
 1 file changed, 30 insertions(+), 30 deletions(-)

diff --git a/lcl/interfaces/gtk3/gtk3objects.pas b/lcl/interfaces/gtk3/gtk3objects.pas
index 47dbcd276..22f3a3557 100644
--- a/lcl/interfaces/gtk3/gtk3objects.pas
+++ b/lcl/interfaces/gtk3/gtk3objects.pas
@@ -523,7 +523,6 @@ end;
 constructor TGtk3Font.Create(ALogFont: TLogFont; const ALongFontName: String);
 var
   AContext: PPangoContext;
-  ADescription: PPangoFontDescription;
   AttrList: PPangoAttrList;
   Attr: PPangoAttribute;
 begin
@@ -535,41 +534,42 @@ begin
     if Gtk3WidgetSet.DefaultAppFontName <> '' then
       FHandle := pango_font_description_from_string(PgChar(Gtk3WidgetSet.DefaultAppFontName))
     else
-    begin
-      ADescription := pango_context_get_font_description(AContext);
-      FHandle := pango_font_description_copy(ADescription);
-    end;
-    FFontName := FHandle^.get_family;
+      FHandle := pango_font_description_copy(pango_context_get_font_description(AContext));
   end else
-  begin
     FHandle := pango_font_description_from_string(PgChar(FFontName));
-    FFontName := FHandle^.get_family;
-  end;
+  FFontName := FHandle^.get_family;
+
   if ALogFont.lfHeight <> 0 then
     FHandle^.set_absolute_size(Abs(ALogFont.lfHeight) * PANGO_SCALE);
-  if ALogFont.lfItalic > 0 then
-    FHandle^.set_style(PANGO_STYLE_ITALIC);
-  FHandle^.set_weight(ALogFont.lfWeight);
   FLayout := pango_layout_new(AContext);
   FLayout^.set_font_description(FHandle);
-
-  if (ALogFont.lfUnderline<>0) or (ALogFont.lfStrikeOut<>0) then
-  begin
-    AttrList := pango_layout_get_attributes(FLayout);
-    if (AttrList = nil) then
-      AttrList := pango_attr_list_new();
-    pango_attr_list_ref(AttrList);
-    if ALogFont.lfUnderline <> 0 then
-      Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
-    else
-      Attr := pango_attr_underline_new(PANGO_UNDERLINE_NONE);
-    pango_attr_list_change(AttrList, Attr);
-
-    Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
-    pango_attr_list_change(AttrList, Attr);
-    pango_layout_set_attributes(FLayout, AttrList);
-    pango_attr_list_unref(AttrList);
-  end;
+  Assert(pango_layout_get_attributes(FLayout)=Nil, 'TGtk3Font.Create: Layout already has Attributes');
+  AttrList := pango_attr_list_new();
+  pango_attr_list_ref(AttrList);
+  // Italic
+  if ALogFont.lfItalic > 0 then
+    Attr := pango_attr_style_new(PANGO_STYLE_ITALIC)
+  else
+    Attr := pango_attr_style_new(PANGO_STYLE_NORMAL);
+  pango_attr_list_change(AttrList, Attr);
+  // Bold
+  if ALogFont.lfWeight > 0 then
+    Attr := pango_attr_weight_new(PANGO_WEIGHT_BOLD)
+  else
+    Attr := pango_attr_weight_new(PANGO_WEIGHT_NORMAL);
+  pango_attr_list_change(AttrList, Attr);
+  // Underline
+  if ALogFont.lfUnderline <> 0 then
+    Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
+  else
+    Attr := pango_attr_underline_new(PANGO_UNDERLINE_NONE);
+  pango_attr_list_change(AttrList, Attr);
+  // StrikeOut
+  Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
+  pango_attr_list_change(AttrList, Attr);
+  // Update attributes for Layout and free memory.
+  pango_layout_set_attributes(FLayout, AttrList);
+  pango_attr_list_unref(AttrList);
   g_object_unref(AContext);
 end;
 
-- 
2.24.0

Anton Kavalenka

2019-11-17 22:04

reporter   ~0119373

Gtk3 docs says pango attributes have to be destroyed manually. Only the attribute lists are reference counted.

Juha Manninen

2019-11-18 07:29

developer   ~0119377

Not destroying them would lead to a memory leak instead of a crash I guess.
I will test more later ...

Anton Kavalenka

2019-11-18 09:19

reporter   ~0119380

Looks like problem appears only in TGraphicControl (like TLabel) which use shared devicecontext

Anton Kavalenka

2019-11-18 09:37

reporter   ~0119381

Got It
Implicit kill of attribute list

gtk3winapi.inc.diff (554 bytes)
Index: gtk3winapi.inc
===================================================================
--- gtk3winapi.inc	(revision 62267)
+++ gtk3winapi.inc	(working copy)
@@ -2741,11 +2741,11 @@
     TM.tmBreakChar := '?';
 
     TM.tmItalic := Ord(AFont.Handle^.get_style = PANGO_STYLE_ITALIC);
-    AList := AFont.Layout^.get_attributes;
+    {AList := AFont.Layout^.get_attributes;
     if AList <> nil then
     begin
       AList^.unref;
-    end;
+    end;}
     //  APangoMetrics^.get_underline_position;
     // TM.tmUnderlined :=
     // TM.tmStruckOut :=
gtk3winapi.inc.diff (554 bytes)

Anton Kavalenka

2019-11-23 08:34

reporter   ~0119438

@Juha Manninen
Looks like recent patch fixes problem with reference counting.
Btw the excessive ref/unref in TGtk3Font.Create() is not required at all because
pango_layout_set_attributes(FLayout, AttrList); references AttrList properly.

Juha Manninen

2019-11-23 10:24

developer   ~0119442

Last edited: 2019-11-23 11:01

View 2 revisions

Sorry, I failed to notice the patch earlier. I applied it in r62286. No more crashes but StrikeOut style still not working.

> Btw the excessive ref/unref in TGtk3Font.Create() is not required at all because pango_layout_set_attributes(FLayout, AttrList); references AttrList properly.

Do you mean that "pango_attr_list_unref(AttrList);" is not needed?

Anton Kavalenka

2019-11-23 12:03

reporter   ~0119445

Both - see the patch.
Btw - StrikeOut and Underline works properly.
Sometimes LCL is not rebuilt when changes in includes or in files not directly used by packages. Try to cleanup+build

gtk3objects-2.diff (804 bytes)
Index: gtk3objects.pas
===================================================================
--- gtk3objects.pas	(revision 62286)
+++ gtk3objects.pas	(working copy)
@@ -558,7 +558,7 @@
     AttrList := pango_layout_get_attributes(FLayout);
     if (AttrList = nil) then
       AttrList := pango_attr_list_new();
-    pango_attr_list_ref(AttrList);
+    //pango_attr_list_ref(AttrList);
     if ALogFont.lfUnderline <> 0 then
       Attr := pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)
     else
@@ -568,7 +568,7 @@
     Attr := pango_attr_strikethrough_new(ALogFont.lfStrikeOut<>0);
     pango_attr_list_change(AttrList, Attr);
     pango_layout_set_attributes(FLayout, AttrList);
-    pango_attr_list_unref(AttrList);
+    //pango_attr_list_unref(AttrList);
   end;
   g_object_unref(AContext);
 end;
gtk3objects-2.diff (804 bytes)

Anton Kavalenka

2019-11-23 12:20

reporter   ~0119446

As GTK documentation says

pango_layout_get_attributes(FLayout); // does not change refcount - it is 1 by previous set_attributes
https://developer.gnome.org/pango/stable/pango-Layout-Objects.html#pango-layout-get-attributes

pango_attr_list_new(); // creates AttrList with refcount of 1.
https://developer.gnome.org/pango/unstable/pango-Text-Attributes.html#pango-attr-list-new

 pango_layout_set_attributes(FLayout, AttrList); // increases refcount by 1
https://developer.gnome.org/pango/stable/pango-Layout-Objects.html#pango-layout-set-attributes

So only the pango_attr_list_unref(AttrList); should remain.
If the AttList structure were declared properly - the refcount fileld would be among it fields - and this can be examined

CudaText man

2019-11-23 15:11

reporter   ~0119453

It's solved ,thanks.

Juha Manninen

2019-11-23 18:41

developer   ~0119467

Last edited: 2019-11-23 23:41

View 2 revisions

Ok, I simplified a little and removed the pango_attr_list_ref() call.
Thanks.

CudaText man

2019-11-24 17:22

reporter   ~0119480

@Anton, can you please fix these?
https://bugs.freepascal.org/view.php?id=36256
https://bugs.freepascal.org/view.php?id=36254
https://bugs.freepascal.org/view.php?id=36348

Issue History

Date Modified Username Field Change
2019-11-12 00:08 CudaText man New Issue
2019-11-12 00:08 CudaText man File Added: tst-crossed-text.zip
2019-11-13 00:25 Juha Manninen Note Added: 0119251
2019-11-16 22:33 Anton Kavalenka File Added: gtk3objects.diff
2019-11-16 22:33 Anton Kavalenka Note Added: 0119349
2019-11-17 10:14 Juha Manninen Assigned To => Juha Manninen
2019-11-17 10:14 Juha Manninen Status new => assigned
2019-11-17 10:43 Juha Manninen Status assigned => resolved
2019-11-17 10:43 Juha Manninen Resolution open => fixed
2019-11-17 10:43 Juha Manninen Fixed in Revision => r62253
2019-11-17 10:43 Juha Manninen LazTarget => -
2019-11-17 10:43 Juha Manninen Widgetset GTK 3 => GTK 3
2019-11-17 10:43 Juha Manninen Note Added: 0119353
2019-11-17 11:21 Anton Kavalenka Note Added: 0119359
2019-11-17 11:42 CudaText man File Added: tst-crossed-text-2.zip
2019-11-17 11:42 CudaText man Note Added: 0119360
2019-11-17 11:45 CudaText man Status resolved => assigned
2019-11-17 11:45 CudaText man Resolution fixed => reopened
2019-11-17 18:17 Juha Manninen File Added: 0001-LCL-GTK3-Font-attributes.patch
2019-11-17 18:17 Juha Manninen Note Added: 0119367
2019-11-17 22:04 Anton Kavalenka Note Added: 0119373
2019-11-18 07:29 Juha Manninen Note Added: 0119377
2019-11-18 09:19 Anton Kavalenka Note Added: 0119380
2019-11-18 09:37 Anton Kavalenka File Added: gtk3winapi.inc.diff
2019-11-18 09:37 Anton Kavalenka Note Added: 0119381
2019-11-23 08:34 Anton Kavalenka Note Added: 0119438
2019-11-23 10:24 Juha Manninen Fixed in Revision r62253 => r62253, r62286
2019-11-23 10:24 Juha Manninen Widgetset GTK 3 => GTK 3
2019-11-23 10:24 Juha Manninen Note Added: 0119442
2019-11-23 11:01 Juha Manninen Note Edited: 0119442 View Revisions
2019-11-23 12:03 Anton Kavalenka File Added: gtk3objects-2.diff
2019-11-23 12:03 Anton Kavalenka File Added: Здымак экрана, 2019-11-23 14-02-28.png
2019-11-23 12:03 Anton Kavalenka Note Added: 0119445
2019-11-23 12:20 Anton Kavalenka Note Added: 0119446
2019-11-23 15:11 CudaText man Note Added: 0119453
2019-11-23 18:41 Juha Manninen Status assigned => resolved
2019-11-23 18:41 Juha Manninen Fixed in Revision r62253, r62286 => r62253, r62286, r62287
2019-11-23 18:41 Juha Manninen Widgetset GTK 3 => GTK 3
2019-11-23 18:41 Juha Manninen Note Added: 0119467
2019-11-23 23:40 Juha Manninen Note View State: 0119467: private
2019-11-23 23:40 Juha Manninen Note View State: 0119467: public
2019-11-23 23:41 Juha Manninen Note Edited: 0119467 View Revisions
2019-11-24 17:22 CudaText man Note Added: 0119480