<div dir="ltr">In /usr/share/lazarus/1.2.6/lcl/interfaces/carbon/carbonprivatewindow.inc:299 (CarbonWindow_MouseProc ) there's the following code<div><br></div><div><div><font face="monospace, monospace">  while Assigned(Widget) and not Widget.IsEnabled do</font></div><div><font face="monospace, monospace">  begin</font></div><div><font face="monospace, monospace">    // Here we need to avoid an endless loop which might occur in case</font></div><div><font face="monospace, monospace">    // GetParent returns the same widget that we passed</font></div><div><font face="monospace, monospace">    lTmpWidget := TCarbonWidget(CarbonWidgetset.GetParent(HWND(Widget)));</font></div><div><font face="monospace, monospace">    if lTmpWidget = Widget then Break;</font></div><div><font face="monospace, monospace">    Widget := lTmpWidget;</font></div><div><font face="monospace, monospace">  end;</font></div><div><br></div><div>In our application, it indeed happens somehow, that the condition <span style="font-family:monospace,monospace">lTmpWidget = Widget</span> holds. This test helps to break the infinite cycle, but</div></div><div><br></div><div><div><font face="monospace, monospace">function TCarbonWidgetSet.GetParent(Handle: HWND): HWND;</font></div></div><div><br></div><div>in /usr/share/lazarus/1.2.6/lcl/interfaces/carbon/carbonwinapi.inc:1794 gets also used from elsewhere, namely</div><div>from /usr/share/lazarus/1.2.6/lcl/include/winapi.inc:432</div><div><br></div><div><div><font face="monospace, monospace">function GetParent(Handle : HWND): HWND;</font></div></div><div><br></div><div>which gets used from C code handling the event loop. It looks like there's a similar problem happening there, an endless loop keeping the CPU busy and the application dead.</div><div><br></div><div>As a workaround, I appended</div><div><br></div><div><font face="monospace, monospace">if Result = Handle then Result := 0;</font><br></div><div><br></div><div>to <span style="font-family:monospace,monospace">TCarbonWidgetSet.GetParent </span>but this feels hacky.</div><div><br></div><div>My questions are:</div><div><br></div><div>1. Am I right assuming that a windows having itself as parent is always wrong?</div><div>2. Is there a simple way how to find where this happens? I know it's not in in TCarbonWidgetSet.SetParent.</div><div>3. Is my workaround correct?</div><div><br></div><div>Regards, Martin.</div></div>