OSDN Git Service

get rid of the (no so internal) QFileDialog hooks
authorIvailo Monev <xakepa10@gmail.com>
Mon, 5 Jun 2023 02:06:18 +0000 (05:06 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Mon, 5 Jun 2023 02:06:18 +0000 (05:06 +0300)
assuming that the QGuiPlatformPlugin hooks work the exported functions are
redundant

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/dialogs/qfiledialog.cpp
src/gui/dialogs/qfiledialog.h
src/gui/dialogs/qfiledialog_p.h
src/gui/kernel/qguiplatformplugin.cpp
src/gui/kernel/qguiplatformplugin.h

index 5bb31d1..7b4ce32 100644 (file)
@@ -49,23 +49,6 @@ QT_BEGIN_NAMESPACE
 
 Q_GLOBAL_STATIC(QString, lastVisitedDir)
 
-/*
-    \internal
-
-    Exported hooks that can be used to customize the static functions.
- */
-typedef QString (*_qt_filedialog_existing_directory_hook)(QWidget *parent, const QString &caption, const QString &dir, QFileDialog::Options options);
-Q_GUI_EXPORT _qt_filedialog_existing_directory_hook qt_filedialog_existing_directory_hook = 0;
-
-typedef QString (*_qt_filedialog_open_filename_hook)(QWidget * parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-Q_GUI_EXPORT _qt_filedialog_open_filename_hook qt_filedialog_open_filename_hook = 0;
-
-typedef QStringList (*_qt_filedialog_open_filenames_hook)(QWidget * parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-Q_GUI_EXPORT _qt_filedialog_open_filenames_hook qt_filedialog_open_filenames_hook = 0;
-
-typedef QString (*_qt_filedialog_save_filename_hook)(QWidget * parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-Q_GUI_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook = 0;
-
 /*!
   \class QFileDialog
   \brief The QFileDialog class provides a dialog that allow users to select files or directories.
@@ -292,20 +275,6 @@ QFileDialog::QFileDialog(QWidget *parent,
 }
 
 /*!
-    \internal
-*/
-QFileDialog::QFileDialog(const QFileDialogArgs &args)
-    : QDialog(*new QFileDialogPrivate, args.parent, 0)
-{
-    Q_D(QFileDialog);
-    d->init(args.directory, args.filter, args.caption);
-    setFileMode(args.mode);
-    setOptions(args.options);
-    selectFile(args.selection);
-    d->lineEdit()->selectAll();
-}
-
-/*!
     Destroys the file dialog.
 */
 QFileDialog::~QFileDialog()
@@ -1553,19 +1522,12 @@ QString QFileDialog::getOpenFileName(QWidget *parent,
                                QString *selectedFilter,
                                Options options)
 {
-    if (qt_filedialog_open_filename_hook)
-        return qt_filedialog_open_filename_hook(parent, caption, dir, filter, selectedFilter, options);
-    QFileDialogArgs args;
-    args.parent = parent;
-    args.caption = caption;
-    args.directory = QFileDialogPrivate::workingDirectory(dir);
-    args.selection = QFileDialogPrivate::initialSelection(dir);
-    args.filter = filter;
-    args.mode = ExistingFile;
-    args.options = options;
-
-    // create a qt dialog
-    QFileDialog dialog(args);
+    // create a Katie dialog
+    QFileDialog dialog(parent, caption, QFileDialogPrivate::workingDirectory(dir), filter);
+    dialog.setFileMode(QFileDialog::ExistingFile);
+    dialog.setOptions(options);
+    dialog.selectFile(QFileDialogPrivate::initialSelection(dir));
+
     if (selectedFilter && !selectedFilter->isEmpty())
         dialog.selectNameFilter(*selectedFilter);
     if (dialog.exec() == QDialog::Accepted) {
@@ -1612,10 +1574,6 @@ QString QFileDialog::getOpenFileName(QWidget *parent,
 
     \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 10
 
-    On Symbian^3 the parameter \a selectedFilter has no meaning and the
-    \a options parameter is only used to define if the native file dialog is
-    used. On Symbian^3, this function can only return a single filename.
-
     \warning Do not delete \a parent during the execution of the dialog. If you
     want to do this, you should create the dialog yourself using one of the
     QFileDialog constructors.
@@ -1629,19 +1587,12 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent,
                                           QString *selectedFilter,
                                           Options options)
 {
-    if (qt_filedialog_open_filenames_hook)
-        return qt_filedialog_open_filenames_hook(parent, caption, dir, filter, selectedFilter, options);
-    QFileDialogArgs args;
-    args.parent = parent;
-    args.caption = caption;
-    args.directory = QFileDialogPrivate::workingDirectory(dir);
-    args.selection = QFileDialogPrivate::initialSelection(dir);
-    args.filter = filter;
-    args.mode = ExistingFiles;
-    args.options = options;
-
-    // create a qt dialog
-    QFileDialog dialog(args);
+    // create a Katie dialog
+    QFileDialog dialog(parent, caption, QFileDialogPrivate::workingDirectory(dir), filter);
+    dialog.setFileMode(QFileDialog::ExistingFiles);
+    dialog.setOptions(options);
+    dialog.selectFile(QFileDialogPrivate::initialSelection(dir));
+
     if (selectedFilter && !selectedFilter->isEmpty())
         dialog.selectNameFilter(*selectedFilter);
     if (dialog.exec() == QDialog::Accepted) {
@@ -1686,10 +1637,6 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent,
     follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp},
     the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}.
 
-    On Symbian^3 the parameters \a filter and \a selectedFilter have no
-    meaning. The \a options parameter is only used to define if the native file
-    dialog is used.
-
     \warning Do not delete \a parent during the execution of the dialog. If you
     want to do this, you should create the dialog yourself using one of the
     QFileDialog constructors.
@@ -1703,20 +1650,13 @@ QString QFileDialog::getSaveFileName(QWidget *parent,
                                      QString *selectedFilter,
                                      Options options)
 {
-    if (qt_filedialog_save_filename_hook)
-        return qt_filedialog_save_filename_hook(parent, caption, dir, filter, selectedFilter, options);
-    QFileDialogArgs args;
-    args.parent = parent;
-    args.caption = caption;
-    args.directory = QFileDialogPrivate::workingDirectory(dir);
-    args.selection = QFileDialogPrivate::initialSelection(dir);
-    args.filter = filter;
-    args.mode = AnyFile;
-    args.options = options;
-
-    // create a qt dialog
-    QFileDialog dialog(args);
-    dialog.setAcceptMode(AcceptSave);
+    // create a Katie dialog
+    QFileDialog dialog(parent, caption, QFileDialogPrivate::workingDirectory(dir), filter);
+    dialog.setFileMode(QFileDialog::AnyFile);
+    dialog.setOptions(options);
+    dialog.selectFile(QFileDialogPrivate::initialSelection(dir));
+    dialog.setAcceptMode(QFileDialog::AcceptSave);
+
     if (selectedFilter && !selectedFilter->isEmpty())
         dialog.selectNameFilter(*selectedFilter);
     if (dialog.exec() == QDialog::Accepted) {
@@ -1751,10 +1691,6 @@ QString QFileDialog::getSaveFileName(QWidget *parent,
     follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp},
     the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}.
 
-    On Windows the dialog will spin a blocking modal event loop that will not
-    dispatch any QTimers, and if \a parent is not 0 then it will position the
-    dialog just below the parent's title bar.
-
     \warning Do not delete \a parent during the execution of the dialog. If you
     want to do this, you should create the dialog yourself using one of the
     QFileDialog constructors.
@@ -1766,17 +1702,12 @@ QString QFileDialog::getExistingDirectory(QWidget *parent,
                                           const QString &dir,
                                           Options options)
 {
-    if (qt_filedialog_existing_directory_hook)
-        return qt_filedialog_existing_directory_hook(parent, caption, dir, options);
-    QFileDialogArgs args;
-    args.parent = parent;
-    args.caption = caption;
-    args.directory = QFileDialogPrivate::workingDirectory(dir);
-    args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
-    args.options = options;
-
-    // create a qt dialog
-    QFileDialog dialog(args);
+    // create a Katie dialog
+    QFileDialog dialog(parent, caption, QFileDialogPrivate::workingDirectory(dir));
+    dialog.setFileMode(options & QFileDialog::ShowDirsOnly ? QFileDialog::DirectoryOnly : QFileDialog::Directory);
+    dialog.setOptions(options);
+    dialog.selectFile(QFileDialogPrivate::initialSelection(dir));
+
     if (dialog.exec() == QDialog::Accepted) {
         return dialog.selectedFiles().value(0);
     }
index 8fe5cc8..f28589f 100644 (file)
@@ -190,7 +190,6 @@ public:
 
 
 protected:
-    QFileDialog(const QFileDialogArgs &args);
     void done(int result);
     void accept();
     void changeEvent(QEvent *e);
index 50dbd22..945bb8f 100644 (file)
@@ -70,20 +70,6 @@ class QCompleter;
 class QHBoxLayout;
 class Ui_QFileDialog;
 
-
-struct QFileDialogArgs
-{
-    QFileDialogArgs() : parent(0), mode(QFileDialog::AnyFile) {}
-
-    QWidget *parent;
-    QString caption;
-    QString directory;
-    QString selection;
-    QString filter;
-    QFileDialog::FileMode mode;
-    QFileDialog::Options options;
-};
-
 class Q_AUTOTEST_EXPORT QFileDialogPrivate : public QDialogPrivate
 {
     Q_DECLARE_PUBLIC(QFileDialog)
@@ -288,14 +274,17 @@ private:
     QFileDialogPrivate *d_ptr;
 };
 
-inline QModelIndex QFileDialogPrivate::mapToSource(const QModelIndex &index) const {
+inline QModelIndex QFileDialogPrivate::mapToSource(const QModelIndex &index) const
+{
 #ifdef QT_NO_PROXYMODEL
     return index;
 #else
     return proxyModel ? proxyModel->mapToSource(index) : index;
 #endif
 }
-inline QModelIndex QFileDialogPrivate::mapFromSource(const QModelIndex &index) const {
+
+inline QModelIndex QFileDialogPrivate::mapFromSource(const QModelIndex &index) const
+{
 #ifdef QT_NO_PROXYMODEL
     return index;
 #else
@@ -303,22 +292,65 @@ inline QModelIndex QFileDialogPrivate::mapFromSource(const QModelIndex &index) c
 #endif
 }
 
-inline QString QFileDialogPrivate::rootPath() const {
+inline QString QFileDialogPrivate::rootPath() const
+{
     return model->rootPath();
 }
 
-// Dummies for platforms that don't use native dialogs:
-inline void QFileDialogPrivate::deleteNativeDialog_sys() { qt_guiPlatformPlugin()->fileDialogDelete(q_func()); }
-inline bool QFileDialogPrivate::setVisible_sys(bool visible) { return qt_guiPlatformPlugin()->fileDialogSetVisible(q_func(), visible); }
-inline QDialog::DialogCode QFileDialogPrivate::dialogResultCode_sys(){ return qt_guiPlatformPlugin()->fileDialogResultCode(q_func()); }
-inline void QFileDialogPrivate::setDirectory_sys(const QString &directory) { qt_guiPlatformPlugin()->fileDialogSetDirectory(q_func(), directory); }
-inline QString QFileDialogPrivate::directory_sys() const { return qt_guiPlatformPlugin()->fileDialogDirectory(q_func()); }
-inline void QFileDialogPrivate::selectFile_sys(const QString &filename) { qt_guiPlatformPlugin()->fileDialogSelectFile(q_func(), filename); }
-inline QStringList QFileDialogPrivate::selectedFiles_sys() const { return qt_guiPlatformPlugin()->fileDialogSelectedFiles(q_func()); }
-inline void QFileDialogPrivate::setFilter_sys() { qt_guiPlatformPlugin()->fileDialogSetFilter(q_func()); }
-inline void QFileDialogPrivate::setNameFilters_sys(const QStringList &filters) { qt_guiPlatformPlugin()->fileDialogSetNameFilters(q_func(), filters); }
-inline void QFileDialogPrivate::selectNameFilter_sys(const QString &filter) { qt_guiPlatformPlugin()->fileDialogSelectNameFilter(q_func(), filter); }
-inline QString QFileDialogPrivate::selectedNameFilter_sys() const { return qt_guiPlatformPlugin()->fileDialogSelectedNameFilter(q_func()); }
+inline void QFileDialogPrivate::deleteNativeDialog_sys()
+{
+    qt_guiPlatformPlugin()->fileDialogDelete(q_func());
+}
+
+inline bool QFileDialogPrivate::setVisible_sys(bool visible)
+{
+    return qt_guiPlatformPlugin()->fileDialogSetVisible(q_func(), visible);
+}
+
+inline QDialog::DialogCode QFileDialogPrivate::dialogResultCode_sys()
+{
+    return qt_guiPlatformPlugin()->fileDialogResultCode(q_func());
+}
+
+inline void QFileDialogPrivate::setDirectory_sys(const QString &directory)
+{
+    qt_guiPlatformPlugin()->fileDialogSetDirectory(q_func(), directory);
+}
+
+inline QString QFileDialogPrivate::directory_sys() const
+{
+    return qt_guiPlatformPlugin()->fileDialogDirectory(q_func());
+}
+
+inline void QFileDialogPrivate::selectFile_sys(const QString &filename)
+{
+    qt_guiPlatformPlugin()->fileDialogSelectFile(q_func(), filename);
+}
+
+inline QStringList QFileDialogPrivate::selectedFiles_sys() const
+{
+    return qt_guiPlatformPlugin()->fileDialogSelectedFiles(q_func());
+}
+
+inline void QFileDialogPrivate::setFilter_sys()
+{
+    qt_guiPlatformPlugin()->fileDialogSetFilter(q_func());
+}
+
+inline void QFileDialogPrivate::setNameFilters_sys(const QStringList &filters)
+{
+    qt_guiPlatformPlugin()->fileDialogSetNameFilters(q_func(), filters);
+}
+
+inline void QFileDialogPrivate::selectNameFilter_sys(const QString &filter)
+{
+    qt_guiPlatformPlugin()->fileDialogSelectNameFilter(q_func(), filter);
+}
+
+inline QString QFileDialogPrivate::selectedNameFilter_sys() const
+{
+    return qt_guiPlatformPlugin()->fileDialogSelectedNameFilter(q_func());
+}
 
 QT_END_NAMESPACE
 
index b9c7695..80a2b03 100644 (file)
@@ -100,7 +100,7 @@ QGuiPlatformPlugin::~QGuiPlatformPlugin()
 */
 QString QGuiPlatformPlugin::styleName()
 {
-    return QLatin1String("cleanlooks");
+    return QString::fromLatin1("cleanlooks");
 }
 
 /*
@@ -151,13 +151,15 @@ QStringList QGuiPlatformPlugin::iconThemeSearchPaths()
 
     // Add home directory first in search path
     QDir homeDir(QDir::homePath() + QLatin1String("/.icons"));
-    if (homeDir.exists())
+    if (homeDir.exists()) {
         paths.append(homeDir.path());
+    }
 
     foreach (const QString &it, QStandardPaths::standardLocations(QStandardPaths::DataLocation)) {
         QDir dir(it);
-        if (dir.exists())
+        if (dir.exists()) {
             paths.append(dir.path() + QLatin1String("/icons"));
+        }
     }
 
     return paths;
@@ -187,16 +189,18 @@ QIcon QGuiPlatformPlugin::fileSystemIcon(const QFileInfo &)
 int QGuiPlatformPlugin::platformHint(PlatformHint hint)
 {
     int ret = 0;
-    switch(hint)
-    {
-        case PH_ToolButtonStyle:
+    switch(hint) {
+        case PH_ToolButtonStyle: {
             ret = Qt::ToolButtonIconOnly;
             break;
-        case PH_ToolBarIconSize:
-            //by default keep ret = 0 so QCommonStyle will use the style default
+        }
+        case PH_ToolBarIconSize: {
+            // by default keep ret = 0 so QCommonStyle will use the style default
             break;
-        default:
+        }
+        default: {
             break;
+        }
     }
     return ret;
 }
index eb71db6..c3531b9 100644 (file)
@@ -36,40 +36,39 @@ class QFileInfo;
 class Q_GUI_EXPORT QGuiPlatformPlugin : public QObject
 {
     Q_OBJECT
-    public:
-        enum PlatformHint {
-            PH_ToolButtonStyle,
-            PH_ToolBarIconSize,
-            PH_ItemView_ActivateItemOnSingleClick
-        };
+public:
+    enum PlatformHint {
+        PH_ToolButtonStyle,
+        PH_ToolBarIconSize,
+        PH_ItemView_ActivateItemOnSingleClick
+    };
 
-        explicit QGuiPlatformPlugin(QObject *parent = nullptr);
-        ~QGuiPlatformPlugin();
+    explicit QGuiPlatformPlugin(QObject *parent = nullptr);
+    ~QGuiPlatformPlugin();
 
-        virtual QString styleName();
-        virtual QPalette palette();
-        virtual QString systemIconThemeName();
-        virtual QStringList iconThemeSearchPaths();
-        virtual QIcon systemIcon(const QString &name);
-        virtual QIcon fileSystemIcon(const QFileInfo &name);
+    virtual QString styleName();
+    virtual QPalette palette();
+    virtual QString systemIconThemeName();
+    virtual QStringList iconThemeSearchPaths();
+    virtual QIcon systemIcon(const QString &name);
+    virtual QIcon fileSystemIcon(const QFileInfo &name);
+    virtual int platformHint(PlatformHint hint);
 
-        virtual int platformHint(PlatformHint hint);
+    virtual void fileDialogDelete(QFileDialog *);
+    virtual bool fileDialogSetVisible(QFileDialog *, bool);
+    virtual QDialog::DialogCode fileDialogResultCode(QFileDialog *);
+    virtual void fileDialogSetDirectory(QFileDialog *, const QString &);
+    virtual QString fileDialogDirectory(const QFileDialog *) const;
+    virtual void fileDialogSelectFile(QFileDialog *, const QString &);
+    virtual QStringList fileDialogSelectedFiles(const QFileDialog *) const;
+    virtual void fileDialogSetFilter(QFileDialog *);
+    virtual void fileDialogSetNameFilters(QFileDialog *, const QStringList &);
+    virtual void fileDialogSelectNameFilter(QFileDialog *, const QString &);
+    virtual QString fileDialogSelectedNameFilter(const QFileDialog *) const;
 
-        virtual void fileDialogDelete(QFileDialog *);
-        virtual bool fileDialogSetVisible(QFileDialog *, bool);
-        virtual QDialog::DialogCode fileDialogResultCode(QFileDialog *);
-        virtual void fileDialogSetDirectory(QFileDialog *, const QString &);
-        virtual QString fileDialogDirectory(const QFileDialog *) const;
-        virtual void fileDialogSelectFile(QFileDialog *, const QString &);
-        virtual QStringList fileDialogSelectedFiles(const QFileDialog *) const;
-        virtual void fileDialogSetFilter(QFileDialog *);
-        virtual void fileDialogSetNameFilters(QFileDialog *, const QStringList &);
-        virtual void fileDialogSelectNameFilter(QFileDialog *, const QString &);
-        virtual QString fileDialogSelectedNameFilter(const QFileDialog *) const;
-
-        virtual void colorDialogDelete(QColorDialog *);
-        virtual bool colorDialogSetVisible(QColorDialog *, bool);
-        virtual void colorDialogSetCurrentColor(QColorDialog *, const QColor &);
+    virtual void colorDialogDelete(QColorDialog *);
+    virtual bool colorDialogSetVisible(QColorDialog *, bool);
+    virtual void colorDialogSetCurrentColor(QColorDialog *, const QColor &);
 };
 
 // internal