[Lazarus] Thistoryfiles carbon issue

Andrea Mauri andrea.mauri.75 at gmail.com
Mon Feb 5 11:42:03 CET 2018


Dear all,
I am using THistoryFiles (http://wiki.freepascal.org/HistoryFiles) in a
project running on linux/win/osx.
I have an issue with THistoryFiles on Carbon.
Specifically, the issue is related to historyfiles.pas when clicking on a
recent menu item.
When a recent menu item is clicked an event is raised in HistoryFiles:

procedure THistoryFiles.OnMainMenuClickHistoryItem(Sender:TObject);
var
  thefile : string;
begin
  thefile:='';
  If Assigned(FOnHistoryItemClick) Then
  begin
   thefile := FItems.Strings[TMenuItem(sender).tag-1];
   if thefile<>'' then
     FLastItemIndex := TMenuItem(sender).tag;

     LastItemIndex_WriteIni;

     FOnHistoryItemClick(Self, TMenuItem(sender), thefile);

     UpdateParentMenu;
  end;
end;

Before the event is raised the following function is executed (in
carbonobject.inc)
function CarbonApp_CommandProcess(ANextHandler: EventHandlerCallRef;
  AEvent: EventRef;
  {%H-}AWidget: TCarbonWidget): OSStatus; {$IFDEF darwin}mwpascal;{$ENDIF}

Staring from line 271 the following code is executed:

          if CarbonMenu.Parent.Dismissed=kHIMenuDismissedBySelection then
begin
            FillChar(Msg{%H-}, SizeOf(Msg), 0);
            Msg.msg := LM_ACTIVATE;
            DeliverMessage(CarbonMenu.LCLMenuItem, Msg);
            if assigned(CarbonMenu.Parent) then  // if parent not closed
              CarbonMenu.Parent.Dismissed:=0;
            Result := noErr;
            Exit;
          end else
            Result:=CallNextEventHandler(ANextHandler, AEvent);

Specifically THistoryFiles.OnMainMenuClickHistoryItem is executed on
DeliverMessage, the issue is that in
THistoryFiles.OnMainMenuClickHistoryItem the menu is deleted and replaced
by thistoryfiles, so when executing the instructions after DeliverMessage
the CarbonMenu does not exists anymore.

Any hint?
Andrea Mauri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20180205/fb6e2bdd/attachment.html>


More information about the Lazarus mailing list