From 1f73e808b5c9202e903ef7a5682e3b8a0785e631 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 30 Nov 2017 22:02:25 +0100 Subject: [PATCH] improved the close canvas mechanism (from the global to the object level) --- src/classes/PMusrCanvas.cpp | 18 +++++++++++++++++- src/include/PMusrCanvas.h | 1 + src/musrview.cpp | 2 -- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 1bc506be..1ea79af6 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -1502,12 +1502,25 @@ void PMusrCanvas::HandleMenuPopup(Int_t id) */ void PMusrCanvas::LastCanvasClosed() { -// cout << endl << ">> in last canvas closed check ..."; +// cerr << ">> in last canvas closed check. gROOT->GetListOfCanvases()->GetEntries()=" << gROOT->GetListOfCanvases()->GetEntries() << endl; if (gROOT->GetListOfCanvases()->IsEmpty()) { Done(0); } } +//-------------------------------------------------------------------------- +// WindowClosed (SLOT) +//-------------------------------------------------------------------------- +/** + *

Slot called when the canvas is closed. Seems to be necessary on some systems. + */ +void PMusrCanvas::WindowClosed() +{ +// cerr << ">> fMainCanvas->GetName()=" << fMainCanvas->GetName() << endl; + gROOT->GetListOfCanvases()->Remove(fMainCanvas); + LastCanvasClosed(); +} + //-------------------------------------------------------------------------- // SaveGraphicsAndQuit //-------------------------------------------------------------------------- @@ -2374,9 +2387,12 @@ void PMusrCanvas::InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy, return; } + fMainCanvas->Connect("Closed()", "PMusrCanvas", this, "LastCanvasClosed()"); + // add canvas menu if not in batch mode if (!fBatchMode) { fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); + fImp->Connect("CloseWindow()", "PMusrCanvas", this, "WindowClosed()"); fBar = fImp->GetMenuBar(); fPopupMain = fBar->AddPopup("&Musrfit"); diff --git a/src/include/PMusrCanvas.h b/src/include/PMusrCanvas.h index 367a7e71..a3b1cffa 100644 --- a/src/include/PMusrCanvas.h +++ b/src/include/PMusrCanvas.h @@ -230,6 +230,7 @@ class PMusrCanvas : public TObject, public TQObject virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT virtual void HandleMenuPopup(Int_t id); // SLOT virtual void LastCanvasClosed(); // SLOT + virtual void WindowClosed(); // SLOT virtual void SaveGraphicsAndQuit(Char_t *fileName, Char_t *graphicsFormat); virtual void ExportData(const Char_t *fileName); diff --git a/src/musrview.cpp b/src/musrview.cpp index 0c0da86b..278991cd 100644 --- a/src/musrview.cpp +++ b/src/musrview.cpp @@ -325,8 +325,6 @@ int main(int argc, char *argv[]) ok = false; break; } - // connect signal/slot - TQObject::Connect("TCanvas", "Closed()", "PMusrCanvas", musrCanvas, "LastCanvasClosed()"); musrCanvas->SetTimeout(timeout);