X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=9b54463730a4b72eb9cb31d92dfbad7bd0e81190;hb=52019917f411c72ffa6fd8200bc5a89d286d87be;hp=66ff6f3dbed227559ab8d99e98aa4ed038bc8a79;hpb=a48adfa6d6b349f15c27e852e1c72a4f4c00880c;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index 66ff6f3dbe..9b54463730 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -22,6 +22,7 @@ #include "Buffer.h" #include "BufferList.h" #include "CmdDef.h" +#include "CiteEnginesList.h" #include "ColorSet.h" #include "ConverterCache.h" #include "Converter.h" @@ -50,8 +51,8 @@ #include "frontends/alert.h" #include "frontends/Application.h" -#include "support/bind.h" #include "support/ConsoleApplication.h" +#include "support/convert.h" #include "support/lassert.h" #include "support/debug.h" #include "support/environment.h" @@ -65,13 +66,16 @@ #include "support/unique_ptr.h" #include -#include #include +#include +#include #include #include #include #include +#include // For QT_VERSION + using namespace std; using namespace lyx::support; @@ -92,6 +96,19 @@ namespace os = support::os; bool use_gui = true; +// Report on the terminal about spawned commands. The default is false +// and can be changed with the option -v (--verbose). + +bool verbose = false; + + +// Do not treat the "missing glyphs" warning of fontspec as an error message. +// The default is false and can be changed with the option +// --ignore-error-message missing_glyphs +// This is used in automated testing. +bool ignore_missing_glyphs = false; + + // We default to open documents in an already running instance, provided that // the lyxpipe has been setup. This can be overridden either on the command // line or through preference settings. @@ -107,6 +124,14 @@ RunMode run_mode = PREFERRED; OverwriteFiles force_overwrite = UNSPECIFIED; +// Scale the GUI by this factor. This works whether we have a HiDpi screen +// or not and scales everything, also fonts. Can only be changed by setting +// the QT_SCALE_FACTOR environment variable before launching LyX and only +// works properly with Qt 5.6 or higher. + +double qt_scale_factor = 1.0; + + namespace { // Filled with the command line arguments "foo" of "-sysdir foo" or @@ -165,9 +190,14 @@ struct LyX::Impl { /// The file converters. Converters converters_; - - // The system converters copy after reading lyxrc.defaults. + /// The system converters after reading lyxrc.defaults. Converters system_converters_; + + /// Global format information + Formats formats_; + /// The system formats after reading lyxrc.defaults. + Formats system_formats_; + /// Movers movers_; @@ -228,7 +258,6 @@ LyX::~LyX() { delete pimpl_; singleton_ = 0; - WordList::cleanupWordLists(); } @@ -290,6 +319,17 @@ int LyX::exec(int & argc, char * argv[]) // we need to parse for "-dbg" and "-help" easyParse(argc, argv); +#if QT_VERSION >= 0x050600 + // Check whether Qt will scale all GUI elements and accordingly + // set the scale factor so that to avoid blurred images and text + char const * const scale_factor = getenv("QT_SCALE_FACTOR"); + if (scale_factor) { + qt_scale_factor = convert(scale_factor); + if (qt_scale_factor < 1.0) + qt_scale_factor = 1.0; + } +#endif + try { init_package(os::utf8_argv(0), cl_system_support, cl_user_support); } catch (ExceptionMessage const & message) { @@ -492,9 +532,8 @@ int LyX::execWithoutGui(int & argc, char * argv[]) LYXERR(Debug::FILES, "Loading " << fname); if (buf && buf->loadLyXFile() == Buffer::ReadSuccess) { ErrorList const & el = buf->errorList("Parse"); - if (!el.empty()) - for_each(el.begin(), el.end(), - bind(&LyX::printError, this, _1)); + for(ErrorItem const & e : el) + printError(e); command_line_buffers.push_back(buf); } else { if (buf) @@ -826,7 +865,7 @@ bool LyX::init() #endif lyxrc.tempdir_path = package().temp_dir().absFileName(); - lyxrc.document_path = package().document_dir().absFileName(); + lyxrc.document_path = "."; if (lyxrc.example_path.empty()) { lyxrc.example_path = addPath(package().system_support().absFileName(), @@ -904,13 +943,13 @@ bool LyX::init() return false; // Query the OS to know what formats are viewed natively - formats.setAutoOpen(); + theFormats().setAutoOpen(); // Read lyxrc.dist again to be able to override viewer auto-detection. readRcFile("lyxrc.dist"); system_lyxrc = lyxrc; - system_formats = formats; + theSystemFormats() = theFormats(); pimpl_->system_converters_ = pimpl_->converters_; pimpl_->system_movers_ = pimpl_->movers_; system_lcolor = lcolor; @@ -930,8 +969,10 @@ bool LyX::init() LYXERR(Debug::INIT, "Reading layouts..."); // Load the layouts LayoutFileList::get().read(); - //...and the modules + //... the modules theModuleList.read(); + //... and the cite engines + theCiteEnginesList.read(); // read keymap and ui files in batch mode as well // because InsetInfo needs to know these to produce @@ -1015,7 +1056,9 @@ bool LyX::queryUserLyXDir(bool explicit_userdir) return configFileNeedsUpdate("lyxrc.defaults") || configFileNeedsUpdate("lyxmodules.lst") || configFileNeedsUpdate("textclass.lst") - || configFileNeedsUpdate("packages.lst"); + || configFileNeedsUpdate("packages.lst") + || configFileNeedsUpdate("lyxciteengines.lst") + || configFileNeedsUpdate("xtemplates.lst"); } first_start = !explicit_userdir; @@ -1109,7 +1152,7 @@ bool LyX::readEncodingsFile(string const & enc_name, namespace { /// return the the number of arguments consumed -typedef boost::function cmd_helper; +typedef function cmd_helper; int parse_dbg(string const & arg, string const &, string &) { @@ -1144,7 +1187,8 @@ int parse_help(string const &, string const &, string &) " where fmt is the export format of choice. Look in\n" " Tools->Preferences->File Handling->File Formats->Short Name\n" " to see which parameter (which differs from the format name\n" - " in the File->Export menu) should be passed.\n" + " in the File->Export menu) should be passed. To export to\n" + " the document's default output format, use 'default'.\n" " Note that the order of -e and -x switches matters.\n" "\t-E [--export-to] fmt filename\n" " where fmt is the export format of choice (see --export),\n" @@ -1157,11 +1201,17 @@ int parse_help(string const &, string const &, string &) " specifying whether all files, main file only, or no files,\n" " respectively, are to be overwritten during a batch export.\n" " Anything else is equivalent to `all', but is not consumed.\n" + "\t--ignore-error-message which\n" + " allows you to ignore specific LaTeX error messages.\n" + " Do not use for final documents! Currently supported values:\n" + " * missing_glyphs: Fontspec `missing glyphs' error.\n" "\t-n [--no-remote]\n" " open documents in a new instance\n" "\t-r [--remote]\n" " open documents in an already running instance\n" " (a working lyxpipe is needed)\n" + "\t-v [--verbose]\n" + " report on terminal about spawned commands.\n" "\t-batch execute commands without launching GUI and exit.\n" "\t-version summarize version and build info\n" "Check the LyX man page for more details.")) << endl; @@ -1296,6 +1346,23 @@ int parse_remote(string const &, string const &, string &) } +int parse_verbose(string const &, string const &, string &) +{ + verbose = true; + return 0; +} + + +int parse_ignore_error_message(string const & arg1, string const &, string &) +{ + if (arg1 == "missing_glyphs") { + ignore_missing_glyphs = true; + return 1; + } + return 0; +} + + int parse_force(string const & arg, string const &, string &) { if (arg == "all") { @@ -1343,6 +1410,9 @@ void LyX::easyParse(int & argc, char * argv[]) cmdmap["--no-remote"] = parse_noremote; cmdmap["-r"] = parse_remote; cmdmap["--remote"] = parse_remote; + cmdmap["-v"] = parse_verbose; + cmdmap["--verbose"] = parse_verbose; + cmdmap["--ignore-error-message"] = parse_ignore_error_message; for (int i = 1; i < argc; ++i) { map::const_iterator it @@ -1435,17 +1505,31 @@ KeyMap & theTopLevelKeymap() } +Formats & theFormats() +{ + LAPPERR(singleton_); + return singleton_->pimpl_->formats_; +} + + +Formats & theSystemFormats() +{ + LAPPERR(singleton_); + return singleton_->pimpl_->system_formats_; +} + + Converters & theConverters() { LAPPERR(singleton_); - return singleton_->pimpl_->converters_; + return singleton_->pimpl_->converters_; } Converters & theSystemConverters() { LAPPERR(singleton_); - return singleton_->pimpl_->system_converters_; + return singleton_->pimpl_->system_converters_; }