mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 09:39:09 +02:00
lcl: gtk2: fixed regression app deactivate on popup menu
This commit is contained in:
parent
efa401b8d6
commit
e8fc8fb0ca
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user