Qt,Qt5: fixed LCLIntf.GetActiveWindow for modal & popup windows

git-svn-id: trunk@57492 -
This commit is contained in:
zeljko 2018-03-10 12:42:59 +00:00
parent 9306b45921
commit 76ca6e71a8
4 changed files with 23 additions and 10 deletions

View File

@ -622,7 +622,7 @@ 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; W: TQtWidget;
LCLEvent: QLCLMessageEventH; LCLEvent: QLCLMessageEventH;
ASequence: QKeySequenceH; ASequence: QKeySequenceH;
AKey: WideString; AKey: WideString;
@ -809,8 +809,9 @@ begin
// eat next appdeactivate & appactivate since we are changing form // eat next appdeactivate & appactivate since we are changing form
// flags ! // flags !
if (StayOnTopList <> nil) then if (StayOnTopList <> nil) then
W := TQtMainWindow(HWNDFromWidgetH(QApplication_activeWindow())) begin
else W := TQtWidget(GetActiveWindow);
end else
W := nil; W := nil;
Application.IntfAppActivate; Application.IntfAppActivate;
QtRestoreStayOnTop; QtRestoreStayOnTop;

View File

@ -2498,12 +2498,17 @@ var
begin begin
Result := 0; Result := 0;
Widget := QApplication_activeWindow; Widget := QApplication_activeWindow;
if Widget <> nil then {return modal if activeWindow is nil issue #33409}
if Widget = nil then
Widget := QApplication_activeModalWidget;
if Widget = nil then
Widget := QApplication_activePopupWidget;
if Assigned(Widget) then
begin begin
W := QtObjectFromWidgetH(Widget); W := QtObjectFromWidgetH(Widget);
if W <> nil then if Assigned(W) and IsValidHandle(HWND(W)) then
begin begin
if TQtMainWindow(W).MDIAreaHandle <> nil then if (TQtWidget(W) is TQtMainWindow) and (TQtMainWindow(W).MDIAreaHandle <> nil) then
begin begin
Area := QMdiAreaH(TQtMainWindow(W).MDIAreaHandle.Widget); Area := QMdiAreaH(TQtMainWindow(W).MDIAreaHandle.Widget);
SubW := QtObjectFromWidgetH(QMdiArea_activeSubWindow(Area)); SubW := QtObjectFromWidgetH(QMdiArea_activeSubWindow(Area));

View File

@ -574,7 +574,7 @@ 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; W: TQtWidget;
LCLEvent: QLCLMessageEventH; LCLEvent: QLCLMessageEventH;
ASequence: QKeySequenceH; ASequence: QKeySequenceH;
AKey: WideString; AKey: WideString;
@ -764,7 +764,7 @@ begin
// eat next appdeactivate & appactivate since we are changing form // eat next appdeactivate & appactivate since we are changing form
// flags ! // flags !
if (StayOnTopList <> nil) then if (StayOnTopList <> nil) then
W := TQtMainWindow(HWNDFromWidgetH(QApplication_activeWindow())) W := TQtWidget(GetActiveWindow)
else else
W := nil; W := nil;
Application.IntfAppActivate; Application.IntfAppActivate;

View File

@ -2445,12 +2445,17 @@ var
begin begin
Result := 0; Result := 0;
Widget := QApplication_activeWindow; Widget := QApplication_activeWindow;
{return modal if activeWindow is nil issue #33409}
if Widget = nil then
Widget := QApplication_activeModalWidget;
if Widget = nil then
Widget := QApplication_activePopupWidget;
if Widget <> nil then if Widget <> nil then
begin begin
W := QtObjectFromWidgetH(Widget); W := QtObjectFromWidgetH(Widget);
if W <> nil then if Assigned(W) and IsValidHandle(HWND(W)) then
begin begin
if TQtMainWindow(W).MDIAreaHandle <> nil then if (TQtWidget(W) is TQtMainWindow) and Assigned(TQtMainWindow(W).MDIAreaHandle) then
begin begin
Area := QMdiAreaH(TQtMainWindow(W).MDIAreaHandle.Widget); Area := QMdiAreaH(TQtMainWindow(W).MDIAreaHandle.Widget);
SubW := QtObjectFromWidgetH(QMdiArea_activeSubWindow(Area)); SubW := QtObjectFromWidgetH(QMdiArea_activeSubWindow(Area));
@ -6007,6 +6012,8 @@ var
W: QWidgetH; W: QWidgetH;
begin begin
{$IFDEF HASX11} {$IFDEF HASX11}
{$note this should return current system active window, not
application one, if our app isn''t active.}
if WindowManagerName = 'metacity' then if WindowManagerName = 'metacity' then
W := X11GetActivewindow W := X11GetActivewindow
else else