lcl: gtk2: fixed regression app deactivate on popup menu

This commit is contained in:
mattias 2025-01-10 13:21:49 +01:00
parent efa401b8d6
commit e8fc8fb0ca
3 changed files with 24 additions and 15 deletions

View File

@ -14076,13 +14076,16 @@ var
CurFocusControl: TWinControl; CurFocusControl: TWinControl;
ActiveSourceEditor: TSourceEditor; ActiveSourceEditor: TSourceEditor;
ActiveUnitInfo: TUnitInfo; ActiveUnitInfo: TUnitInfo;
H: HWND;
begin begin
CurFocusControl:=Nil; CurFocusControl:=Nil;
ActiveSourceEditor:=Nil; ActiveSourceEditor:=Nil;
// check if focus is on MainIDEBar or on SourceEditor // check if focus is on MainIDEBar or on SourceEditor
if CheckFocus then if CheckFocus then
begin begin
CurFocusControl:=FindOwnerControl(GetFocus); H:=GetFocus;
CurFocusControl:=FindOwnerControl(H);
//debugln(['TMainIDE.DoSourceEditorCommand ',H<>0,' ',DbgSName(CurFocusControl)]);
while (CurFocusControl<>nil) and (CurFocusControl<>MainIDEBar) while (CurFocusControl<>nil) and (CurFocusControl<>MainIDEBar)
and not (CurFocusControl is TCustomForm) do and not (CurFocusControl is TCustomForm) do
CurFocusControl:=CurFocusControl.Parent; CurFocusControl:=CurFocusControl.Parent;

View File

@ -2475,13 +2475,13 @@ Begin
FicPopUpMenuItems[A].RadioItem:=true; FicPopUpMenuItems[A].RadioItem:=true;
FicPopUpMenuItems[A].GroupIndex:=ord(A); FicPopUpMenuItems[A].GroupIndex:=ord(A);
FicPopUpMenuItems[A].OnClick:=@ICPopUpMenuItemClick; FicPopUpMenuItems[A].OnClick:=@ICPopUpMenuItemClick;
case ord(A) of case A of
0: FicPopUpMenuItems[A].Caption:=lisSortOrderScopedAlphabetic; icsScopedAlphabetic: NewStr:=lisSortOrderScopedAlphabetic;
1: FicPopUpMenuItems[A].Caption:=lisSortOrderAlphabetic; icsAlphabetic: NewStr:=lisSortOrderAlphabetic;
2: FicPopUpMenuItems[A].Caption:=lisSortOrderDefinition; icsScopedDeclaration: NewStr:=lisSortOrderDefinition;
else else NewStr:='Method'+(ord(A)).ToString;
FicPopUpMenuItems[A].Caption:='Method'+(ord(A)).ToString;
end; end;
FicPopUpMenuItems[A].Caption:=NewStr;
FicPopUpMenu.Items.Insert(ord(A),FicPopUpMenuItems[A]); FicPopUpMenu.Items.Insert(ord(A),FicPopUpMenuItems[A]);
FicPopUpMenuItems[A].Checked:= FicPopUpMenuItems[A].Checked:=
CodeToolBoss.IdentifierList.SortMethodForCompletion=A; CodeToolBoss.IdentifierList.SortMethodForCompletion=A;
@ -7458,12 +7458,11 @@ begin
SrcEditSubMenuDebug.AddLast(SrcEditMenuViewCallStack); SrcEditSubMenuDebug.AddLast(SrcEditMenuViewCallStack);
end; end;
SourceEditorMenuRoot.MenuItem:=SrcPopupMenu.Items; SourceEditorMenuRoot.MenuItem:=SrcPopupMenu.Items;
RemoveUserDefinedMenuItems; RemoveUserDefinedMenuItems;
RemoveContextMenuItems; RemoveContextMenuItems;
ASrcEdit:=FindSourceEditorWithEditorComponent(TPopupMenu(Sender).PopupComponent); ASrcEdit:=FindSourceEditorWithEditorComponent(SrcPopupMenu.PopupComponent);
Assert(Assigned(ASrcEdit), 'TSourceNotebook.SrcPopUpMenuPopup: ASrcEdit=nil'); Assert(Assigned(ASrcEdit), 'TSourceNotebook.SrcPopUpMenuPopup: ASrcEdit=nil');
Assert((ASrcEdit=GetActiveSE), 'TSourceNotebook.SrcPopUpMenuPopup: ASrcEdit<>GetActiveSE'); Assert((ASrcEdit=GetActiveSE), 'TSourceNotebook.SrcPopUpMenuPopup: ASrcEdit<>GetActiveSE');
EditorComp:=ASrcEdit.EditorComponent; EditorComp:=ASrcEdit.EditorComponent;

View File

@ -282,9 +282,16 @@ begin
// Switching to another workspace does not generate a focus out event <sigh>. // Switching to another workspace does not generate a focus out event <sigh>.
if PGdkEventFocus(event)^._in = 0 then if PGdkEventFocus(event)^._in = 0 then
begin begin
// focus out
//debugln(['Gtk2FormEvent focus out ',DbgSName(ACtl)]);
//if ACtl.Parent<>nil then
// debugln(['Gtk2FormEvent ACtl.Parent=',DbgSName(ACtl.Parent)]);
// Test switch to another app via mouse, Alt-Tab, workspace. And test open popup menu click GetFocus.
{$IFDEF HASX} {$IFDEF HASX}
if ACtl.Parent<>nil then //if ACtl.Parent<>nil then
begin //begin
XDisplay := gdk_display; XDisplay := gdk_display;
XGetInputFocus(XDisplay, @Window, @RevertStatus); XGetInputFocus(XDisplay, @Window, @RevertStatus);
// Window - 1 is our frame ! // Window - 1 is our frame !
@ -292,11 +299,10 @@ begin
(GDK_WINDOW_XID(Widget^.Window) = Window - 1) then (GDK_WINDOW_XID(Widget^.Window) = Window - 1) then
begin begin
// Note: on LinuxMint switching via Alt-Tab to another window // Note: on LinuxMint switching via Alt-Tab to another window
// generates RevertToParent. The above // generates RevertToParent.
// exit(True); // stop
exit(True);
end; end;
end; //end;
{$ENDIF} {$ENDIF}
with Gtk2WidgetSet do with Gtk2WidgetSet do
begin begin
@ -306,6 +312,7 @@ begin
end; end;
end else end else
begin begin
//debugln(['Gtk2FormEvent focus in ',DbgSName(ACtl)]);
with Gtk2WidgetSet do with Gtk2WidgetSet do
begin begin
StopAppFocusTimer; StopAppFocusTimer;