commit 075d220d6e927458c3e38d50fbecd6a7f30ece99
Author: Juergen Spitzmueller <[email protected]>
Date:   Tue Aug 11 19:26:23 2020 +0200

    GuiLyXFiles: Fix crash and disabling with header selection
    
    Fixes #11929
---
 src/frontends/qt/GuiLyXFiles.cpp |   27 +++++++++++++++++++++------
 src/frontends/qt/GuiLyXFiles.h   |    2 +-
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/frontends/qt/GuiLyXFiles.cpp b/src/frontends/qt/GuiLyXFiles.cpp
index 25b6fa4..c9dbf90 100644
--- a/src/frontends/qt/GuiLyXFiles.cpp
+++ b/src/frontends/qt/GuiLyXFiles.cpp
@@ -210,9 +210,9 @@ GuiLyXFiles::GuiLyXFiles(GuiView & lv)
                this, SLOT(slotButtonBox(QAbstractButton *)));
 
        connect(filesLW, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
-               this, SLOT(changed_adaptor()));
+               this, SLOT(fileSelectionChanged()));
        connect(filesLW, SIGNAL(itemSelectionChanged()),
-               this, SLOT(changed_adaptor()));
+               this, SLOT(fileSelectionChanged()));
        connect(filter_, SIGNAL(textEdited(QString)),
                this, SLOT(filterLabels()));
        connect(filter_, SIGNAL(rightButtonClicked()),
@@ -252,8 +252,14 @@ bool GuiLyXFiles::translateName() const
 }
 
 
-void GuiLyXFiles::changed_adaptor()
+void GuiLyXFiles::fileSelectionChanged()
 {
+       if (!filesLW->currentItem()
+           || !filesLW->currentItem()->data(0, 
Qt::UserRole).toString().endsWith(getSuffix())) {
+               // not a file (probably a header)
+               bc().setValid(false);
+               return;
+       }
        changed();
 }
 
@@ -277,9 +283,11 @@ void GuiLyXFiles::on_languageCO_activated(int i)
 
 void GuiLyXFiles::on_filesLW_itemDoubleClicked(QTreeWidgetItem * item, int)
 {
-       if (!item->data(0, Qt::UserRole).toString().endsWith(getSuffix()))
+       if (!item || !item->data(0, 
Qt::UserRole).toString().endsWith(getSuffix())) {
                // not a file (probably a header)
+               bc().setValid(false);
                return;
+       }
 
        applyView();
        dispatchParams();
@@ -288,10 +296,17 @@ void 
GuiLyXFiles::on_filesLW_itemDoubleClicked(QTreeWidgetItem * item, int)
 
 void GuiLyXFiles::on_filesLW_itemClicked(QTreeWidgetItem * item, int)
 {
+       if (!item) {
+               bc().setValid(false);
+               return;
+       }
+
        QString const data = item->data(0, Qt::UserRole).toString();
-       if (!data.endsWith(getSuffix()))
+       if (!data.endsWith(getSuffix())) {
                // not a file (probably a header)
+               bc().setValid(false);
                return;
+       }
 
        languageCO->clear();
        QMap<QString, QString>::const_iterator i 
=available_languages_.constBegin();
@@ -512,7 +527,7 @@ void GuiLyXFiles::resetFilter()
 
 QString const GuiLyXFiles::getRealPath(QString relpath)
 {
-       if (relpath.isEmpty())
+       if (relpath.isEmpty() && filesLW->currentItem() != nullptr)
                relpath = filesLW->currentItem()->data(0, 
Qt::UserRole).toString();
        QString const language = 
languageCO->itemData(languageCO->currentIndex()).toString();
        if (localizations_.contains(relpath)) {
diff --git a/src/frontends/qt/GuiLyXFiles.h b/src/frontends/qt/GuiLyXFiles.h
index bc12913..62be392 100644
--- a/src/frontends/qt/GuiLyXFiles.h
+++ b/src/frontends/qt/GuiLyXFiles.h
@@ -40,7 +40,7 @@ Q_SIGNALS:
        void fileSelected(QString const file);
 
 private Q_SLOTS:
-       void changed_adaptor();
+       void fileSelectionChanged();
        void on_fileTypeCO_activated(int);
        void on_languageCO_activated(int);
        void on_filesLW_itemDoubleClicked(QTreeWidgetItem *, int);
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to