From 45e9ca8fe01e96dba0ce0277f88316504549fd8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDeljan=20Rikalo?= Date: Sun, 17 Sep 2023 18:07:45 +0200 Subject: [PATCH] Qt5,Qt6: set X11SelectionLock on opening dialogs since gtk like platform themes lock gui for minimum dozen of seconds because of bug in QMimeData in Qt. (cherry picked from commit 674d4ebae94c91670e0f1d58cd5b0fe3e8ffe3d3) --- lcl/interfaces/qt5/qtwsdialogs.pp | 31 ++++++++++++++++++++++++++++++ lcl/interfaces/qt6/qtwsdialogs.pp | 32 ++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/lcl/interfaces/qt5/qtwsdialogs.pp b/lcl/interfaces/qt5/qtwsdialogs.pp index ab9e9ebedb..7ff080028a 100644 --- a/lcl/interfaces/qt5/qtwsdialogs.pp +++ b/lcl/interfaces/qt5/qtwsdialogs.pp @@ -497,6 +497,10 @@ begin FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} + QFileDialog_setOption(QFileDialogH(QtFileDialog.Widget), QFileDialogDontConfirmOverwrite, not (ofOverwritePrompt in TSaveDialog(FileDialog).Options)); @@ -525,6 +529,9 @@ begin finally QStringList_destroy(ReturnList); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} {$endif} end else begin @@ -611,6 +618,9 @@ begin end else FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} FileDialog.UserChoice := QtDialogCodeToModalResultMap[QDialogDialogCode(QtFileDialog.exec)]; ReturnList := QStringList_create; try @@ -635,6 +645,9 @@ begin finally QStringList_destroy(ReturnList); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} {$endif} end; if ActiveWin <> 0 then @@ -806,6 +819,9 @@ begin end else FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} FileDialog.UserChoice := QtDialogCodeToModalResultMap[QDialogDialogCode(QtFileDialog.exec)]; ReturnList := QStringList_create; try @@ -830,6 +846,9 @@ begin finally QStringList_destroy(ReturnList); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} {$endif} end; @@ -890,6 +909,10 @@ begin ARgb := QColor_rgba(AQtColor); FillCustomColors; + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} + ARgb := QColorDialog_getRgba(ARgb, @ReturnBool, TQtWSCommonDialog.GetDialogParent(ACommonDialog)); @@ -907,6 +930,7 @@ begin else ACommonDialog.UserChoice := mrCancel; {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; if (QtWidgetSet.WindowManagerName = 'xfwm4') and (QApplication_activeModalWidget() <> nil) then begin AWND := HwndFromWidgetH(QApplication_activeModalWidget()); @@ -952,6 +976,9 @@ begin ------------------------------------------------------------------------------} CurrentFont := TQtFont(TFontDialog(ACommonDialog).Font.Reference.Handle).FHandle; + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} ReturnFont := QFont_create; try QFontDialog_getFont(ReturnFont, @ReturnBool, CurrentFont, @@ -988,6 +1015,10 @@ begin QFont_destroy(ReturnFont); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} + if ReturnBool then ACommonDialog.UserChoice := mrOk else diff --git a/lcl/interfaces/qt6/qtwsdialogs.pp b/lcl/interfaces/qt6/qtwsdialogs.pp index ec6ca7d991..204ecc1c19 100644 --- a/lcl/interfaces/qt6/qtwsdialogs.pp +++ b/lcl/interfaces/qt6/qtwsdialogs.pp @@ -497,6 +497,10 @@ begin FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} + QFileDialog_setOption(QFileDialogH(QtFileDialog.Widget), QFileDialogOptionDontConfirmOverwrite, not (ofOverwritePrompt in TSaveDialog(FileDialog).Options)); @@ -525,6 +529,10 @@ begin finally QStringList_destroy(ReturnList); end; + + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} {$endif} end else begin @@ -611,6 +619,9 @@ begin end else FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} FileDialog.UserChoice := QtDialogCodeToModalResultMap[QDialogDialogCode(QtFileDialog.exec)]; ReturnList := QStringList_create; try @@ -635,6 +646,9 @@ begin finally QStringList_destroy(ReturnList); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} {$endif} end; if ActiveWin <> 0 then @@ -806,6 +820,9 @@ begin end else FileDialog.UserChoice := mrCancel; {$else} + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} FileDialog.UserChoice := QtDialogCodeToModalResultMap[QDialogDialogCode(QtFileDialog.exec)]; ReturnList := QStringList_create; try @@ -830,6 +847,10 @@ begin finally QStringList_destroy(ReturnList); end; + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} + {$endif} end; @@ -889,6 +910,9 @@ begin FillCustomColors; + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} ATitle := UTF8ToUTF16(ACommonDialog.Title); ARetColor := Default(TQColor); ReturnBool := QColorDialog_getColor(@ARetColor, @AQColor, TQtWSCommonDialog.GetDialogParent(ACommonDialog), @ATitle, QColorDialogShowAlphaChannel); @@ -902,6 +926,7 @@ begin else ACommonDialog.UserChoice := mrCancel; {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; if (QtWidgetSet.WindowManagerName = 'xfwm4') and (QApplication_activeModalWidget() <> nil) then begin AWND := HwndFromWidgetH(QApplication_activeModalWidget()); @@ -946,7 +971,9 @@ begin Code to call the dialog ------------------------------------------------------------------------------} CurrentFont := TQtFont(TFontDialog(ACommonDialog).Font.Reference.Handle).FHandle; - + {$IFDEF HASX11} + Clipboard.BeginX11SelectionLock; + {$ENDIF} ReturnFont := QFont_create; try QFontDialog_getFont(ReturnFont, @ReturnBool, CurrentFont, @@ -981,6 +1008,9 @@ begin finally QFont_destroy(ReturnFont); + {$IFDEF HASX11} + Clipboard.EndX11SelectionLock; + {$ENDIF} end; if ReturnBool then