View Single Post
Old 08-18-2024, 03:32 PM   #43
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,775
Karma: 6000000
Join Date: Nov 2009
Device: many
Okay, I tried that on both Linux and Sigil and still no double warnings.

So I can not test if what I have below will fix things or not, but if you do build your own (or maybe BeckyEbook could test it) please try the following changes that should prevent reentrancy in the ShowLastOpenFileWarnings:

In Sigil/src/MainUI/MainWindow.cpp in the ShowLastOpenFindWarnings() routine add the first two lines to start that routine and the last line just before it ends.

Code:
void MainWindow::ShowLastOpenFileWarnings()
{
    if (m_inShowLastOpenWarnings) return;
    m_inShowLastOpenWarnings = true;
    if (!m_LastOpenFileWarnings.isEmpty()) {
        foreach(QString info, m_LastOpenFileWarnings) {
            QString msg;
            QString details;
            if (!info.isEmpty()) {
                QStringList warning = info.split(QChar(31));
                msg = warning[0];
                details = warning[1];
                Utility::DisplayStdWarningDialog(
                "<p><b>" %
                tr("Warning: ") % msg %
                "</b><p>", details, this);
            }
        }
        m_LastOpenFileWarnings.clear();
    }
    m_inShowLastOpenWarnings = false;
}

In Sigil/src/MainUI/MainWindow.h, near the bottom add this next line:
Code:
    bool m_inShowLastOpenWarnings = false;
    
    /**
     * Holds all the widgets Qt Designer created for us.
     */
    Ui::MainWindow ui;
};
If those changes fix the issue for Windows, I will push them to master.
KevinH is offline   Reply With Quote