diff --git a/lcl/interfaces/qt/qtint.pp b/lcl/interfaces/qt/qtint.pp index 0f1559ab4f..923ab5d64f 100644 --- a/lcl/interfaces/qt/qtint.pp +++ b/lcl/interfaces/qt/qtint.pp @@ -173,6 +173,7 @@ type public {$IFDEF HASX11} FLastMinimizeEvent: DWord; // track mainform minimize events -> TQtMainWindow.EventFilter + FMinimizedByPager: Boolean; // track if app is minimized via desktop pager or by us. {$ENDIF} function CreateDefaultFont: HFONT; virtual; function GetDefaultAppFontName: WideString; diff --git a/lcl/interfaces/qt/qtobject.inc b/lcl/interfaces/qt/qtobject.inc index c1d7f5868a..8cb9b205ba 100644 --- a/lcl/interfaces/qt/qtobject.inc +++ b/lcl/interfaces/qt/qtobject.inc @@ -96,6 +96,7 @@ begin StayOnTopList := nil; FEatNextDeactivate := False; {$IFDEF HASX11} + FMinimizedByPager := False; FLastMinimizeEvent := 0; if ((QtVersionMajor = 4) and (QtVersionMinor < 6)) or IsOldKDEInstallation then QtX11InitializePalettes; diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 41fad13cf2..236001e6cd 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -5063,7 +5063,10 @@ begin AState := getWindowState; IsMinimizeEvent := AState and QtWindowMinimized <> 0; if IsMinimizeEvent then + begin CanSendEvent := IsCurrentDesktop(Widget); + QtWidgetSet.FMinimizedByPager := not CanSendEvent; + end; {$ENDIF} if IsMainForm and CanSendEvent then begin @@ -5078,7 +5081,16 @@ begin if (AOldState and QtWindowMinimized <> 0) or (AOldState and QtWindowMaximized <> 0) or (AOldState and QtWindowFullScreen <> 0) then - Application.IntfAppRestore; + begin + {$IFDEF HASX11} + // do not activate lazarus app if it wasn't active during + // pager switch ! + if (AOldState and QtWindowMinimized <> 0) and QtWidgetSet.FMinimizedByPager then + QtWidgetSet.FMinimizedByPager := False + else + {$ENDIF} + Application.IntfAppRestore; + end; end; if CanSendEvent then SlotWindowStateChange;