A bunch of upstream patches:
* fix loading icons in some examples
* allow pasting multiple lines
* remember the last dir to open/save macro files
* do not throw errors during menu creation when using '/control/verbose 0'
--- source/interfaces/basic/include/G4UIQt.hh.orig
+++ source/interfaces/basic/include/G4UIQt.hh
@@ -215,6 +215,8 @@ private:
+ G4String fLastErrMessage;
@@ -226,6 +228,7 @@ private Q_SLOTS :
void ClearButtonCallback();
void CommandEnteredCallback();
+ void CommandEditedCallback(const QString &);
void ButtonCallback(const QString&);
void HelpTreeClicCallback();
void HelpTreeDoubleClicCallback();
--- source/interfaces/basic/src/G4UIQt.cc.orig
+++ source/interfaces/basic/src/G4UIQt.cc
@@ -131,6 +131,7 @@ G4UIQt::G4UIQt (
G4Qt* interactorManager = G4Qt::getInstance (argc,argv,(char*)"Qt");
@@ -270,6 +271,7 @@ G4UIQt::G4UIQt (
connect(fCommandArea, SIGNAL(returnPressed()), SLOT(CommandEnteredCallback()));
+ connect(fCommandArea, SIGNAL(textEdited(const QString &)), SLOT(CommandEditedCallback(const QString &)));
connect(fUITabWidget, SIGNAL(currentChanged(int)), SLOT(ToolBoxActivated(int)));
if(UI!=NULL) UI->SetCoutDestination(this); // TO KEEP
@@ -720,10 +722,10 @@ G4int G4UIQt::ReceiveG4cout (
QStringList result = newStr.filter(fCoutFilter->text());
- if (result.join("\n").isEmpty()) {
+ if (result.join("").isEmpty()) {
- fCoutTBTextArea->append(result.join("\n"));
+ fCoutTBTextArea->append(result.join(""));
fCoutTBTextArea->repaint();
fCoutTBTextArea->verticalScrollBar()->setSliderPosition(fCoutTBTextArea->verticalScrollBar()->maximum());
@@ -753,7 +755,11 @@ G4int G4UIQt::ReceiveG4cerr (
// Suppress space, \n,\t,\r...
if (QString(aString.data()).trimmed() != "") {
- QMessageBox::critical(fMainWindow, "Error",aString.data());
+ if ((G4StateManager::GetStateManager()->GetCurrentState() == G4State_Abort) ||
+ (G4StateManager::GetStateManager()->GetCurrentState() == G4State_Quit )) {
+ // In case of Abort or Quit, the useful error message should be in the last error message !