#include "support/Package.h"
#include "support/PathChanger.h"
#include "support/Systemcall.h"
+#include "support/TempFile.h"
#ifdef Q_WS_MACX
#include "support/AppleScript.h"
string const code = l ? l->code() : string();
theLocale = QLocale(toqstr(code));
}
- Messages::guiLanguage(fromqstr(theLocale.name()));
+ string const code = fromqstr(theLocale.name());
+ // Qt tries to outsmart us and transforms en_US to C.
+ Messages::guiLanguage((code == "C") ? "en_US" : code);
QLocale::setDefault(theLocale);
+ setlocale(LC_NUMERIC, "C");
}
case QEvent::Show:
case QEvent::Hide:
case QEvent::Resize:
+ case QEvent::UpdateRequest:
+ case QEvent::CursorChange:
+ case QEvent::ActionChanged:
+ case QEvent::EnabledChange:
+ case QEvent::SockAct:
+ case QEvent::Timer:
+ case QEvent::Paint:
+ case QEvent::ToolTipChange:
+ case QEvent::LayoutRequest:
+ case QEvent::MetaCall:
return QObject::eventFilter(obj, event);
default:
+ // FIXME Blocking all these events is a bad idea.
QKeyEvent *keyEvent = dynamic_cast<QKeyEvent*>(event);
if (keyEvent && keyEvent->key() == Qt::Key_Escape)
pressed_ = true;
break;
}
+ case LFUN_DIALOG_SHOW: {
+ string const name = cmd.getArg(0);
+ return name == "aboutlyx"
+ || name == "prefs"
+ || name == "texinfo"
+ || name == "progress"
+ || name == "compare";
+ }
default:
return false;
validateCurrentView();
// FIXME: create a new method shared with LFUN_HELP_OPEN.
string const fname = to_utf8(cmd.argument());
- if (d->views_.empty() || (!lyxrc.open_buffers_in_tabs
- && current_view_->documentBufferView() != 0)) {
+ bool const is_open = FileName::isAbsolute(fname)
+ && theBufferList().getBuffer(FileName(fname));
+ if (d->views_.empty()
+ || (!lyxrc.open_buffers_in_tabs
+ && current_view_->documentBufferView() != 0
+ && !is_open)) {
// We want the ui session to be saved per document and not per
// window number. The filename crc is a good enough identifier.
boost::crc_32_type crc;
}
actOnUpdatedPrefs(lyxrc_orig, lyxrc);
- resetGui();
+
+ // If the request comes from the minibuffer, then we can't reset
+ // the GUI, since that would destory the minibuffer itself and
+ // cause a crash, since we are currently in one of the methods of
+ // GuiCommandBuffer. See bug #8540.
+ if (cmd.origin() != FuncRequest::COMMANDBUFFER)
+ resetGui();
+ // else
+ // FIXME Unfortunately, that leaves a bug here, since we cannot
+ // reset the GUI in this case. If the changes to lyxrc affected the
+ // UI, then, nothing would happen. This seems fairly unlikely, but
+ // it definitely is a bug.
break;
}
lyxerr.setLevel(Debug::value(to_utf8(cmd.argument())));
break;
+ case LFUN_DIALOG_SHOW: {
+ string const name = cmd.getArg(0);
+
+ if ( name == "aboutlyx"
+ || name == "prefs"
+ || name == "texinfo"
+ || name == "progress"
+ || name == "compare")
+ {
+ // work around: on Mac OS the application
+ // is not terminated when closing the last view.
+ // Create a new one to be able to dispatch the
+ // LFUN_DIALOG_SHOW to this view.
+ if (current_view_ == 0)
+ createView();
+ }
+ }
+
default:
// The LFUN must be for one of GuiView, BufferView, Buffer or Cursor;
// let's try that:
if (retval == FormatMismatch) {
LYXERR(Debug::FILES, "Converting ui file to format " << LFUN_FORMAT);
- FileName const tempfile = FileName::tempName("convert_ui");
+ TempFile tmp("convertXXXXXX.ui");
+ FileName const tempfile = tmp.name();
bool const success = prefs2prefs(ui_path, tempfile, true);
if (!success) {
LYXERR0("Unable to convert " << ui_path.absFileName() <<
" to format " << LFUN_FORMAT << ".");
} else {
retval = readUIFile(tempfile);
- tempfile.removeFile();
}
}