Author Topic: Gtk3 widgetset - call for testing  (Read 5914 times)

Hansvb

  • Hero Member
  • *****
  • Posts: 943
Re: Gtk3 widgetset - call for testing
« Reply #75 on: August 29, 2026, 04:47:27 pm »
I encounter a strange error when toggling menu items. If I uncheck one menu item and check another within a single function, and then close the form, I get an error in a GTK unit, gtk3procs.pas. Steps: Start the project in debug mode, click on miProgramLanguageNL, and then on miProgramQuitClick. This results in an External SIGSEGV.

The function that is hanging is:
Code: Pascal  [Select][+][-]
  1. function Gtk3IsWidget(AWidget: PGObject): GBoolean;
  2. begin
  3.   Result := (AWidget <> nil) and  g_type_check_instance_is_a(PGTypeInstance(AWidget), gtk_widget_get_type);
  4. end;

I can reproduce this in my current installation, which is a version 4.99 build from a few weeks ago:
Lazarus 4.99 (rev main_4_99-5296-g59d772891f) FPC 3.2.3 x86_64-linux-gtk3

Just to be sure, I also installed today's version 4.99 (29-08-16:00), and I can reproduce it there as well.
Lazarus 4.99 (rev main_4_99-5413-gead27eaeba) FPC 3.2.3 x86_64-linux-gtk3
I also installed Lazarus 4.8 with GTK2; I cannot reproduce the error there.

I use Ubuntu 26.04.

See the attachment or, alternatively, the code below.

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Menus;
  9.  
  10. type
  11.  
  12.   { TForm1 }
  13.  
  14.   TForm1 = class(TForm)
  15.     MainMenu1: TMainMenu;
  16.     miProgramQuit: TMenuItem;
  17.     miProgramLanguageNL: TMenuItem;
  18.     miProgramLanguageEN: TMenuItem;
  19.     miProgramLanguage: TMenuItem;
  20.     miProgram: TMenuItem;
  21.     procedure FormCreate(Sender: TObject);
  22.     procedure miProgramLanguageENClick(Sender: TObject);
  23.     procedure miProgramLanguageNLClick(Sender: TObject);
  24.     procedure miProgramQuitClick(Sender: TObject);
  25.   private
  26.  
  27.   public
  28.  
  29.   end;
  30.  
  31. var
  32.   Form1: TForm1;
  33.  
  34. implementation
  35.  
  36. {$R *.lfm}
  37.  
  38. { TForm1 }
  39.  
  40. procedure TForm1.FormCreate(Sender: TObject);
  41. begin
  42.   miProgramLanguageEN.Checked:= True;
  43. end;
  44.  
  45. procedure TForm1.miProgramLanguageENClick(Sender: TObject);
  46. begin
  47.   if not miProgramLanguageEN.Checked then begin
  48.     miProgramLanguageEN.Checked:= True;
  49.     miProgramLanguageNL.Checked:= False;
  50.   end;
  51. end;
  52.  
  53. procedure TForm1.miProgramLanguageNLClick(Sender: TObject);
  54. begin
  55.   if not miProgramLanguageNL.Checked then begin
  56.     miProgramLanguageNL.Checked:= True;
  57.     miProgramLanguageEN.Checked:= False;
  58.   end;
  59. end;
  60.  
  61. procedure TForm1.miProgramQuitClick(Sender: TObject);
  62. begin
  63.   Close;
  64. end;
  65.  
  66. end.
  67.  


Edit:
I have filed a report: https://gitlab.com/freepascal.org/lazarus/lazarus/-/work_items/42555
And 7 hours later, it's already been fixed in Lazarus 4.99. Awesome. Thanks zeljko.
« Last Edit: August 30, 2026, 06:07:01 pm by Hansvb »

Thausand

  • Hero Member
  • *****
  • Posts: 613
Re: Gtk3 widgetset - call for testing
« Reply #76 on: August 29, 2026, 05:13:13 pm »
Sorry I make mistake is not checkitem. It is name radioitem that have this function if want.

Just want write remark for check radio item if you not know this.

Menuitem have groupindex. If make same groupindex and have menuitem is checkmark radioitem then checkmark radioitem is automatic set/unset when change menuitem that have same group.
« Last Edit: August 29, 2026, 05:23:47 pm by Thausand »
A docile goblin always follow HERMES.md

 

TinyPortal © 2005-2018