mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 16:40:13 +02:00
Qt: fixed loop appActivate/appDeactivate when restoring stayonTop forms in appActivate.
git-svn-id: trunk@25746 -
This commit is contained in:
parent
bc29cb20a4
commit
08ca74b42e
@ -57,6 +57,7 @@ type
|
|||||||
TQtWidgetSet = Class(TWidgetSet)
|
TQtWidgetSet = Class(TWidgetSet)
|
||||||
private
|
private
|
||||||
App: QApplicationH;
|
App: QApplicationH;
|
||||||
|
FEatNextDeactivate: Boolean;
|
||||||
FOverrideCursor: TObject;
|
FOverrideCursor: TObject;
|
||||||
SavedDCList: TFPList;
|
SavedDCList: TFPList;
|
||||||
CriticalSection: TRTLCriticalSection;
|
CriticalSection: TRTLCriticalSection;
|
||||||
|
@ -39,6 +39,7 @@ begin
|
|||||||
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));
|
||||||
StayOnTopList := nil;
|
StayOnTopList := nil;
|
||||||
|
FEatNextDeactivate := False;
|
||||||
{$IFDEF HASX11}
|
{$IFDEF HASX11}
|
||||||
FLastMinimizeEvent := 0;
|
FLastMinimizeEvent := 0;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -403,8 +404,8 @@ begin
|
|||||||
W.BeginUpdate;
|
W.BeginUpdate;
|
||||||
Flags := W.windowFlags;
|
Flags := W.windowFlags;
|
||||||
W.setWindowFlags(Flags or QtWindowStaysOnTopHint);
|
W.setWindowFlags(Flags or QtWindowStaysOnTopHint);
|
||||||
W.setAttribute(QtWA_ShowWithoutActivating, False);
|
|
||||||
W.Show;
|
W.Show;
|
||||||
|
W.setAttribute(QtWA_ShowWithoutActivating, False);
|
||||||
W.EndUpdate;
|
W.EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -422,18 +423,30 @@ end;
|
|||||||
function TQtWidgetSet.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
function TQtWidgetSet.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||||
var
|
var
|
||||||
AObject: TQtObject;
|
AObject: TQtObject;
|
||||||
|
W: TQtMainWindow;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
case QEvent_type(Event) of
|
case QEvent_type(Event) of
|
||||||
QEventApplicationActivate:
|
QEventApplicationActivate:
|
||||||
if Assigned(Application) then
|
if Assigned(Application) and not FEatNextDeactivate then
|
||||||
begin
|
begin
|
||||||
|
// check if activated form is StayOnTop, if it's so, we must
|
||||||
|
// eat next appdeactivate & appactivate since we are changing form
|
||||||
|
// flags !
|
||||||
|
if (StayOnTopList <> nil) then
|
||||||
|
begin
|
||||||
|
W := TQtMainWindow(HWNDFromWidgetH(QApplication_activeWindow()));
|
||||||
|
FEatNextDeactivate := StayOnTopList.HasId(W);
|
||||||
|
end;
|
||||||
Application.IntfAppActivate;
|
Application.IntfAppActivate;
|
||||||
QtRestoreStayOnTop;
|
QtRestoreStayOnTop;
|
||||||
end;
|
if (FEatNextDeactivate) and (W <> nil) then
|
||||||
|
W.Activate;
|
||||||
|
end else
|
||||||
|
FEatNextDeactivate := False;
|
||||||
|
|
||||||
QEventApplicationDeactivate:
|
QEventApplicationDeactivate:
|
||||||
if Assigned(Application) then
|
if Assigned(Application) and not FEatNextDeactivate then
|
||||||
begin
|
begin
|
||||||
Application.IntfAppDeactivate;
|
Application.IntfAppDeactivate;
|
||||||
QtRemoveStayOnTop;
|
QtRemoveStayOnTop;
|
||||||
|
Loading…
Reference in New Issue
Block a user