mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 13:50:10 +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_DragMove(X, Y: Integer): Boolean;
|
||||||
function DragImageList_SetVisible(NewVisible: Boolean): Boolean;
|
function DragImageList_SetVisible(NewVisible: Boolean): Boolean;
|
||||||
public
|
public
|
||||||
|
{$IFDEF HASX11}
|
||||||
|
FLastMinimizeEvent: DWord; // track mainform minimize events -> TQtMainWindow.EventFilter
|
||||||
|
{$ENDIF}
|
||||||
function CreateDefaultFont: HFONT; virtual;
|
function CreateDefaultFont: HFONT; virtual;
|
||||||
function GetQtDefaultDC: HDC; virtual;
|
function GetQtDefaultDC: HDC; virtual;
|
||||||
procedure DeleteDefaultDC; virtual;
|
procedure DeleteDefaultDC; virtual;
|
||||||
|
@ -38,6 +38,9 @@ begin
|
|||||||
System.InitCriticalSection(CriticalSection);
|
System.InitCriticalSection(CriticalSection);
|
||||||
SavedHandlesList := TMap.Create(TMapIdType(ituPtrSize), SizeOf(TObject));
|
SavedHandlesList := TMap.Create(TMapIdType(ituPtrSize), SizeOf(TObject));
|
||||||
FSocketEventMap := TMap.Create(TMapIdType(its4), SizeOf(Pointer));
|
FSocketEventMap := TMap.Create(TMapIdType(its4), SizeOf(Pointer));
|
||||||
|
{$IFDEF HASX11}
|
||||||
|
FLastMinimizeEvent := 0;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
|
@ -4594,6 +4594,22 @@ var
|
|||||||
AStateEvent: QWindowStateChangeEventH;
|
AStateEvent: QWindowStateChangeEventH;
|
||||||
AState: QtWindowStates;
|
AState: QtWindowStates;
|
||||||
AOldState: 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
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
QEvent_accept(Event);
|
QEvent_accept(Event);
|
||||||
@ -4616,13 +4632,26 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
QEventWindowStateChange:
|
QEventWindowStateChange:
|
||||||
begin
|
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
|
if IsMainForm then
|
||||||
begin
|
begin
|
||||||
AStateEvent := QWindowStateChangeEventH(Event);
|
{$IFNDEF HASX11}
|
||||||
AState := getWindowState;
|
AState := getWindowState;
|
||||||
|
{$ENDIF}
|
||||||
|
AStateEvent := QWindowStateChangeEventH(Event);
|
||||||
AOldState := QWindowStateChangeEvent_oldState(AStateEvent);
|
AOldState := QWindowStateChangeEvent_oldState(AStateEvent);
|
||||||
if AState and QtWindowMinimized <> 0 then
|
if AState and QtWindowMinimized <> 0 then
|
||||||
Application.IntfAppMinimize
|
Application.IntfAppMinimize
|
||||||
@ -4631,8 +4660,18 @@ begin
|
|||||||
(AOldState and QtWindowMaximized <> 0) or
|
(AOldState and QtWindowMaximized <> 0) or
|
||||||
(AOldState and QtWindowFullScreen <> 0) then
|
(AOldState and QtWindowFullScreen <> 0) then
|
||||||
Application.IntfAppRestore;
|
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;
|
end;
|
||||||
QEventDrop,
|
QEventDrop,
|
||||||
QEventDragMove,
|
QEventDragMove,
|
||||||
|
Loading…
Reference in New Issue
Block a user