diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 2ec576d05e..91056a706d 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -7020,6 +7020,9 @@ end; procedure TQtMainWindow.ChangeParent(NewParent: QWidgetH); var Flags: QtWindowFlags; + {$IFNDEF MSWINDOWS} + Flags2: QtWindowFlags; + {$ENDIF} Visible: Boolean; begin if NewParent <> Widget then @@ -7027,6 +7030,15 @@ begin Visible := getVisible; Flags := windowFlags; setParent(NewParent); + {$IFNDEF MSWINDOWS} + //issue #40440 + if NewParent <> nil then + Flags2 := QWidget_windowFlags(NewParent) + else + Flags2 := 0; + if (Flags and QtWindowStaysOnTopHint = 0) and (Flags2 and QtWindowStaysOnTopHint <> 0) then + Flags := Flags or QtWindowStaysOnTopHint; + {$ENDIF} setWindowFlags(Flags); setVisible(Visible); end; diff --git a/lcl/interfaces/qt5/qtwidgets.pas b/lcl/interfaces/qt5/qtwidgets.pas index 090fae29a4..52880d6d63 100644 --- a/lcl/interfaces/qt5/qtwidgets.pas +++ b/lcl/interfaces/qt5/qtwidgets.pas @@ -7135,6 +7135,9 @@ end; procedure TQtMainWindow.ChangeParent(NewParent: QWidgetH); var Flags: QtWindowFlags; + {$IFNDEF MSWINDOWS} + Flags2: QtWindowFlags; + {$ENDIF} Visible: Boolean; begin if NewParent <> Widget then @@ -7142,6 +7145,15 @@ begin Visible := getVisible; Flags := windowFlags; setParent(NewParent); + {$IFNDEF MSWINDOWS} + //issue #40440 + if NewParent <> nil then + Flags2 := QWidget_windowFlags(NewParent) + else + Flags2 := 0; + if (Flags and QtWindowStaysOnTopHint = 0) and (Flags2 and QtWindowStaysOnTopHint <> 0) then + Flags := Flags or QtWindowStaysOnTopHint; + {$ENDIF} setWindowFlags(Flags); setVisible(Visible); end; diff --git a/lcl/interfaces/qt6/qtwidgets.pas b/lcl/interfaces/qt6/qtwidgets.pas index 70f875dc5e..3972acac25 100644 --- a/lcl/interfaces/qt6/qtwidgets.pas +++ b/lcl/interfaces/qt6/qtwidgets.pas @@ -7159,6 +7159,9 @@ end; procedure TQtMainWindow.ChangeParent(NewParent: QWidgetH); var Flags: QtWindowFlags; + {$IFNDEF MSWINDOWS} + Flags2: QtWindowFlags; + {$ENDIF} Visible: Boolean; begin if NewParent <> Widget then @@ -7166,6 +7169,15 @@ begin Visible := getVisible; Flags := windowFlags; setParent(NewParent); + {$IFNDEF MSWINDOWS} + //issue #40440 + if NewParent <> nil then + Flags2 := QWidget_windowFlags(NewParent) + else + Flags2 := 0; + if (Flags and QtWindowStaysOnTopHint = 0) and (Flags2 and QtWindowStaysOnTopHint <> 0) then + Flags := Flags or QtWindowStaysOnTopHint; + {$ENDIF} setWindowFlags(Flags); setVisible(Visible); end;