mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 12:16:18 +02:00
Qt: fixed ugly behaviour of qt when switch virtual desktops.
git-svn-id: trunk@25464 -
This commit is contained in:
parent
1c60a65b18
commit
3fc0e1c26e
@ -135,6 +135,9 @@ type
|
||||
function DragImageList_DragMove(X, Y: Integer): Boolean;
|
||||
function DragImageList_SetVisible(NewVisible: Boolean): Boolean;
|
||||
public
|
||||
{$IFDEF HASX11}
|
||||
FLastMinimizeEvent: DWord; // track mainform minimize events -> TQtMainWindow.EventFilter
|
||||
{$ENDIF}
|
||||
function CreateDefaultFont: HFONT; virtual;
|
||||
function GetQtDefaultDC: HDC; virtual;
|
||||
procedure DeleteDefaultDC; virtual;
|
||||
|
@ -38,6 +38,9 @@ begin
|
||||
System.InitCriticalSection(CriticalSection);
|
||||
SavedHandlesList := TMap.Create(TMapIdType(ituPtrSize), SizeOf(TObject));
|
||||
FSocketEventMap := TMap.Create(TMapIdType(its4), SizeOf(Pointer));
|
||||
{$IFDEF HASX11}
|
||||
FLastMinimizeEvent := 0;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
|
@ -4594,6 +4594,22 @@ var
|
||||
AStateEvent: QWindowStateChangeEventH;
|
||||
AState: QtWindowStates;
|
||||
AOldState: QtWindowStates;
|
||||
{$IFDEF HASX11}
|
||||
CurrTickCount: DWord;
|
||||
IsMinimizeEvent: Boolean;
|
||||
|
||||
function CanAppMinimize: Boolean;
|
||||
begin
|
||||
Result := (CurrTickCount - QtWidgetSet.FLastMinimizeEvent) = 0;
|
||||
if not Result then
|
||||
begin
|
||||
// we can call it from LCL so it's allowed.
|
||||
// but in any case reset FLastMinimizeEvent
|
||||
Result := not QEvent_spontaneous(Event);
|
||||
QtWidgetSet.FLastMinimizeEvent := 0;
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}
|
||||
begin
|
||||
Result := False;
|
||||
QEvent_accept(Event);
|
||||
@ -4616,13 +4632,26 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
QEventWindowStateChange:
|
||||
begin
|
||||
{$IFDEF HASX11}
|
||||
// for X11 we must ask state of each modified window.
|
||||
AState := getWindowState;
|
||||
IsMinimizeEvent := AState and QtWindowMinimized <> 0;
|
||||
if IsMinimizeEvent then
|
||||
begin
|
||||
CurrTickCount := GetTickCount;
|
||||
if (QtWidgetSet.FLastMinimizeEvent + 100 < CurrTickCount) or
|
||||
(QtWidgetSet.FLastMinimizeEvent = 0) then
|
||||
QtWidgetSet.FLastMinimizeEvent := CurrTickCount;
|
||||
end;
|
||||
{$ENDIF}
|
||||
if IsMainForm then
|
||||
begin
|
||||
AStateEvent := QWindowStateChangeEventH(Event);
|
||||
{$IFNDEF HASX11}
|
||||
AState := getWindowState;
|
||||
{$ENDIF}
|
||||
AStateEvent := QWindowStateChangeEventH(Event);
|
||||
AOldState := QWindowStateChangeEvent_oldState(AStateEvent);
|
||||
if AState and QtWindowMinimized <> 0 then
|
||||
Application.IntfAppMinimize
|
||||
@ -4631,8 +4660,18 @@ begin
|
||||
(AOldState and QtWindowMaximized <> 0) or
|
||||
(AOldState and QtWindowFullScreen <> 0) then
|
||||
Application.IntfAppRestore;
|
||||
end;
|
||||
SlotWindowStateChange;
|
||||
|
||||
{FLastMinimizeEvent fixes problem when we switch virtual
|
||||
desktops under X11.
|
||||
X11 pager minimizes all windows, so we shouldn't do that again,
|
||||
otherwise when restoring app (again back to our virtual desktop)
|
||||
we'll see ugly restoring of last active control)}
|
||||
{$IFDEF HASX11}
|
||||
if not IsMinimizeEvent or (IsMinimizeEvent and CanAppMinimize) then
|
||||
{$ENDIF}
|
||||
SlotWindowStateChange;
|
||||
end else
|
||||
SlotWindowStateChange;
|
||||
end;
|
||||
QEventDrop,
|
||||
QEventDragMove,
|
||||
|
Loading…
Reference in New Issue
Block a user