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.

This commit is contained in:
Željan Rikalo 2023-09-17 18:07:45 +02:00
parent 40046780a4
commit 674d4ebae9
2 changed files with 62 additions and 1 deletions

View File

@ -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

View File

@ -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