[Kst] kst_hfi_calib_branch: kdeextragear-2/kst/kst
Andrew Walker
arwalker at sumusltd.com
Fri Nov 12 21:20:37 CET 2004
I would agree. The solution implemented at best introduces
a crash and at worst there are numerous undiscovered problems.
-----Original Message-----
From: Barth Netterfield [mailto:netterfield at astro.utoronto.ca]
Sent: Friday, November 12, 2004 12:13 PM
To: kst at kde.org
Subject: Re: [Kst] kst_hfi_calib_branch: kdeextragear-2/kst/kst
How about an informative pop-up which just tells us what it is doing (loading
vector INDEX, etc) rather than the whole interface...
On November 12, 2004 11:17 am, George Staikos wrote:
> CVS commit by staikos:
>
> Make document loading appear to be completely asynchronous. I don't feel
> entirely comfortable with this patch yet, but it seems to work well enough
> to use here, and the long delay on loading is a major issue. Here's how it
> works:
>
> 1) openDocument() is guarded against reentrancy. It just fails in KstDoc
> if you call it while it's running already. (maybe silently)
> 2) DCOP is disabled while opening a document to avoid reentrancy and races.
> 3) events up to 10ms are processed in the loading loop
> 4) the document does at sometimes exist in an invalid state
> 5) the user can shoot his own foot by deleting objects while the document
> is loading. Too bad. (A solution is to add a read-only lock during loading
> but this is very messy I think.)
> 6) We hope that I haven't missed any possible events that can cause a
> reentrance somehow
> 7) We slowly offload more of this updating onto the update thread from
> KstDoc in the future.
>
>
> M +5 -1 kst.cpp 1.256.2.3
> M +23 -4 kstdoc.cpp 1.135.2.2
>
>
> --- kdeextragear-2/kst/kst/kst.cpp #1.256.2.2:1.256.2.3
> @@ -786,5 +786,7 @@ void KstApp::doDelayedOpens() {
> bool KstApp::openDocumentFile(const QString& in_filename,
> const QString& o_file, int o_n, int o_f, int o_s, bool o_ave, bool
> delayed) { - if (delayed) {
> + static bool opening = false;
> +
> + if (delayed || opening) {
> KstOpen job;
> job.filename = in_filename;
> @@ -799,4 +801,5 @@ bool KstApp::openDocumentFile(const QStr
> }
>
> + opening = true;
> KURL url;
> QFileInfo finfo(in_filename);
> @@ -816,4 +819,5 @@ bool KstApp::openDocumentFile(const QStr
> }
> slotUpdateStatusMsg(i18n("Ready"));
> + opening = false;
> return rc;
> }
>
> --- kdeextragear-2/kst/kst/kstdoc.cpp #1.135.2.1:1.135.2.2
> @@ -28,7 +28,9 @@
> // include files for Qt
> #include <qdeepcopy.h>
> +#include <qeventloop.h>
> #include <qstylesheet.h>
>
> // include files for KDE
> +#include <dcopclient.h>
> #include <kdebug.h>
> #include <kfiledialog.h>
> @@ -147,8 +149,11 @@ bool KstDoc::newDocument() {
> bool KstDoc::openDocument(const KURL& url, const QString& o_file,
> int o_n, int o_f, int o_s, bool o_ave) {
> - KstRVectorPtr vector;
> - KstApp *app = KstApp::inst();
> - QString readingDocument = i18n("Reading document");
> - QString openingDocument = i18n("Opening document");
> + static bool opening = false;
> +
> + if (opening) {
> + return false;
> + }
> +
> + opening = true;
>
> deleteContents();
> @@ -156,4 +161,5 @@ bool KstDoc::openDocument(const KURL& ur
> if (!f.exists()) {
> KMessageBox::sorry(0L, i18n("%1: There is no file with that name to
> open.").arg(url.path())); + opening = false;
> return false;
> }
> @@ -168,4 +174,5 @@ bool KstDoc::openDocument(const KURL& ur
> if (!f.open(IO_ReadOnly)) {
> KMessageBox::sorry(0L, i18n("%1: File exists, but kst could not open
> it.").arg(url.path())); + opening = false;
> return false;
> }
> @@ -174,4 +181,5 @@ bool KstDoc::openDocument(const KURL& ur
> KMessageBox::sorry(0L, i18n("%1: Not a valid kst plot specification
> file.").arg(url.path())); f.close();
> + opening = false;
> return false;
> }
> @@ -184,4 +192,9 @@ bool KstDoc::openDocument(const KURL& ur
> int handled = 0;
> bool warnOldKstFile = false;
> + KstRVectorPtr vector;
> + KstApp *app = KstApp::inst();
> + QString readingDocument = i18n("Reading document");
> + QString openingDocument = i18n("Opening document");
> +
>
> QDomNode n = docElem.firstChild();
> @@ -189,4 +202,5 @@ bool KstDoc::openDocument(const KURL& ur
> app->slotUpdateProgress(count, handled, readingDocument);
>
> + kapp->dcopClient()->setAcceptCalls(false);
> while (!n.isNull()) {
> QDomElement e = n.toElement(); // try to convert the node to an
> element. @@ -329,4 +343,5 @@ bool KstDoc::openDocument(const KURL& ur
> app->slotUpdateProgress(count, handled, readingDocument);
> n = n.nextSibling();
> + kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers,
> 10); }
> app->slotUpdateProgress(0, 0, openingDocument);
> @@ -394,4 +409,5 @@ bool KstDoc::openDocument(const KURL& ur
> bitBucket.append(*i);
> }
> + kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers,
> 10); }
> }
> @@ -419,4 +435,5 @@ bool KstDoc::openDocument(const KURL& ur
> for (Kst2DPlotList::Iterator i = allplots.begin(); i !=
> allplots.end(); ++i) { (*i)->draw();
> +
> kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers, 10); }
> }
> @@ -424,4 +441,5 @@ bool KstDoc::openDocument(const KURL& ur
> }
> KstApp::inst()->deleteIterator(it);
> + kapp->dcopClient()->setAcceptCalls(true);
>
> emit updateDialogs();
> @@ -431,4 +449,5 @@ bool KstDoc::openDocument(const KURL& ur
> _modified = false;
>
> + opening = false;
> return true;
> }
>
>
> _______________________________________________
> Kst mailing list
> Kst at kde.org
> https://mail.kde.org/mailman/listinfo/kst
_______________________________________________
Kst mailing list
Kst at kde.org
https://mail.kde.org/mailman/listinfo/kst
More information about the Kst
mailing list