Recent

Author Topic: Gtk2 TrayIcon  (Read 1437 times)

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4467
  • I like bugs.
Gtk2 TrayIcon
« on: May 20, 2023, 01:18:24 pm »
I am in the process to support option -Sy for Lazarus code.
Thanks to the option I found a possible bug in FPC sources, in GTK2 mapping.
I wrote about it to FPC-dev mailing list and I copy it here, FYI :

---

In gtkstatusiconh.inc there is a type definition
  PPGdkScreen = PGdkScreen;
It is most likely a bug. I guess it should be
  PPGdkScreen = ^PGdkScreen;

It is used for :
  gtk_status_icon_get_geometry : function(status_icon:PGtkStatusIcon; screen:PPGdkScreen; area:PGdkRectangle; orientation:PGtkOrientation):gboolean; cdecl;

which is used in LCL function TGtk2TrayIconHandle.GetPosition: TPoint;
  gtk_status_icon_get_geometry(FStatusIcon, @AScreen, @AArea, @AOrientation);
where
  AScreen: PGdkScreen;

FPC option -Sy revealed the error. Otherwise it would be very difficult to notice.
Incidentally there has been problems with TrayIcons in LCL-GTK2.
I am changing code in Lazarus sources so that it compiles with -Sy. I recommend FPC project does the same. Very useful option! Typically it reveals such hard to find bugs.

Please verify if my analysis is correct.
If there is no bug then the type name PPGdkScreen is misleading and should be removed.
Otherwise I will fix it in LCL sources so that it works also with the current FPC 3.2.2.
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4467
  • I like bugs.
Re: Gtk2 TrayIcon
« Reply #1 on: May 20, 2023, 01:35:49 pm »
And right after writing I realized:

---

OK, actually the @AScreen in LCL code is correct if the PPGdkScreen type is wrong.
It means I only must use {$T-} for that piece of code.
It also means the bugs in LCL TrayIcon are not caused by this.
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

 

TinyPortal © 2005-2018