Patch for Save Dialogs in Qt5 and Qt6.
- Lazarus 2.3.0 (rev main-2_3-3089-g35dba2ac2f) FPC 3.3.1 x86_64-linux-qt6
- Operating System: Linux
- CPU / Bitness: 64 Bit
What happens
When I 'execute' a Save Dialog using Qt5 or Qt6, there is a delay, about 20 o 30 seconds to show.
In the forum you can read:
For Qt5: https://forum.lazarus.freepascal.org/index.php/topic,61582.0.html
For Qt6: https://forum.lazarus.freepascal.org/index.php/topic,61295.0.html
Parsing the file qtwsdialogs.pp Inside TQtWSOpenDialog.CreateHandle
class function TQtWSOpenDialog.CreateHandle(const ACommonDialog: TCommonDialog): THandle;
{$ifndef QT_NATIVE_DIALOGS}
QFileDialog_setOption(QFileDialogH(FileDialog.Widget),
QFileDialogDontUseNativeDialog, True);
FileDialog.initializePreview(TPreviewFileDialog(ACommonDialog).PreviewFileControl);
{$endif}
Following this same logic, I made the following patch:
diff --git a/lcl/interfaces/qt5/qtwsdialogs.pp b/lcl/interfaces/qt5/qtwsdialogs.pp
index 382a6483e2..71c47f77d9 100644
--- a/lcl/interfaces/qt5/qtwsdialogs.pp
+++ b/lcl/interfaces/qt5/qtwsdialogs.pp
@@ -382,8 +382,10 @@ begin
QWidget_setWindowFlags(FileDialog.Widget, QtDialog or QtWindowSystemMenuHint or QtCustomizeWindowHint);
{$endif}
+ {$ifndef QT_NATIVE_DIALOGS}
QFileDialog_setOption(QFileDialogH(FileDialog.Widget),
- QFileDialogDontUseNativeDialog, False);
+ QFileDialogDontUseNativeDialog, True);
+ {$endif}
FileDialog.AttachEvents;
@@ -730,8 +732,10 @@ begin
QtWindowSystemMenuHint or QtCustomizeWindowHint);
{$endif}
+ {$ifndef QT_NATIVE_DIALOGS}
QFileDialog_setOption(QFileDialogH(FileDialog.Widget),
- QFileDialogDontUseNativeDialog, False);
+ QFileDialogDontUseNativeDialog, True);
+ {$endif}
FileDialog.setFileMode(QFileDialogDirectory);
QFileDialog_setOption(QFileDialogH(FileDialog.Widget), QFileDialogShowDirsOnly, True);
diff --git a/lcl/interfaces/qt6/qtwsdialogs.pp b/lcl/interfaces/qt6/qtwsdialogs.pp
index df5bb07186..f21010c703 100644
--- a/lcl/interfaces/qt6/qtwsdialogs.pp
+++ b/lcl/interfaces/qt6/qtwsdialogs.pp
@@ -382,8 +382,10 @@ begin
QWidget_setWindowFlags(FileDialog.Widget, QtDialog or QtWindowSystemMenuHint or QtCustomizeWindowHint);
{$endif}
+ {$ifndef QT_NATIVE_DIALOGS}
QFileDialog_setOption(QFileDialogH(FileDialog.Widget),
- QFileDialogOptionDontUseNativeDialog, False);
+ QFileDialogOptionDontUseNativeDialog, True);
+ {$endif}
FileDialog.AttachEvents;
@@ -469,7 +471,7 @@ begin
Flags := 0;
if not (ofOverwritePrompt in TSaveDialog(FileDialog).Options) then
- Flags := Flags or QFileDialogDontConfirmOverwrite;
+ Flags := Flags or QFileDialogOptionDontConfirmOverwrite;
{$IFDEF HASX11}
Clipboard.BeginX11SelectionLock;
try
@@ -543,7 +545,7 @@ begin
Flags := 0;
if (ofReadOnly in TOpenDialog(FileDialog).Options) then
- Flags := Flags or QFileDialogReadOnly;
+ Flags := Flags or QFileDialogOptionReadOnly;
if (ofAllowMultiSelect in TOpenDialog(FileDialog).Options) then
begin
@@ -730,8 +732,10 @@ begin
QtWindowSystemMenuHint or QtCustomizeWindowHint);
{$endif}
+ {$ifndef QT_NATIVE_DIALOGS}
QFileDialog_setOption(QFileDialogH(FileDialog.Widget),
- QFileDialogOptionDontUseNativeDialog, False);
+ QFileDialogOptionDontUseNativeDialog, True);
+ {$endif}
FileDialog.setFileMode(QFileDialogDirectory);
QFileDialog_setOption(QFileDialogH(FileDialog.Widget), QFileDialogOptionShowDirsOnly, True);
In addition, in Qt6 2 syntaxes that do not exist are corrected
Change of QFileDialogDontConfirmOverwrite to QFileDialogOptionDontConfirmOverwrite
Change of QFileDialogReadOnly to QFileDialogOptionReadOnly
Edited by reyn claros