X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiApplication.cpp;h=69e5f09a28b06979f2409e807f456a75494e25bd;hb=4e223167ff2872ee123c8354d486352c8a368102;hp=704533d4af6e53d843ba06365170d4dd5d06a1aa;hpb=0ba2a1e6f88214a1ba126c30b3b75fa0497cf2dd;p=lyx.git diff --git a/src/frontends/qt4/GuiApplication.cpp b/src/frontends/qt4/GuiApplication.cpp index 704533d4af..69e5f09a28 100644 --- a/src/frontends/qt4/GuiApplication.cpp +++ b/src/frontends/qt4/GuiApplication.cpp @@ -16,6 +16,7 @@ #include "qt_helpers.h" #include "GuiImage.h" +#include "GuiKeySymbol.h" #include "GuiView.h" #include "frontends/alert.h" @@ -121,6 +122,27 @@ public: } }; +class GlobalMenuBar : public QMenuBar +{ +public: + /// + GlobalMenuBar() : QMenuBar(0) {} + + /// + bool event(QEvent * e) + { + if (e->type() == QEvent::ShortcutOverride) { + // && activeWindow() == 0) { + QKeyEvent * ke = static_cast(e); + KeySymbol sym; + setKeySymbol(&sym, ke); + theLyXFunc().processKeySym(sym, q_key_state(ke->modifiers())); + e->accept(); + return true; + } + return false; + } +}; /////////////////////////////////////////////////////////////// // You can find more platform specific stuff @@ -132,21 +154,24 @@ GuiApplication * guiApp; GuiApplication::GuiApplication(int & argc, char ** argv) - : QApplication(argc, argv), Application(), current_view_(0) + : QApplication(argc, argv), Application(), current_view_(0), global_menubar_(0) { QString app_name = "LyX"; QCoreApplication::setOrganizationName(app_name); QCoreApplication::setOrganizationDomain("lyx.org"); QCoreApplication::setApplicationName(app_name + "-" + lyx_version); - //FIXME: quitOnLastWindowClosed is true by default, at least on Windows and - // X11 platforms. We should have a lyxrc setting for this in order to let the - // application stay resident. + // FIXME: quitOnLastWindowClosed is true by default. We should have a + // lyxrc setting for this in order to let the application stay resident. + // But then we need some kind of dock icon, at least on Windows. /* if (lyxrc.quit_on_last_window_closed) setQuitOnLastWindowClosed(false); */ - +#ifdef Q_WS_MAC + setQuitOnLastWindowClosed(false); +#endif + #ifdef Q_WS_X11 // doubleClickInterval() is 400 ms on X11 which is just too long. // On Windows and Mac OS X, the operating system's value is used. @@ -175,11 +200,10 @@ GuiApplication::GuiApplication(int & argc, char ** argv) << fromqstr(language_name)); #ifdef Q_WS_MACX - // all windows in a Mac application share the same menu bar. - QMenuBar *menuBar = new QMenuBar(0); // This allows to translate the strings that appear in the LyX menu. addMenuTranslator(); #endif + connect(this, SIGNAL(lastWindowClosed()), this, SLOT(onLastWindowClosed())); using namespace lyx::graphics; @@ -210,6 +234,14 @@ GuiApplication::GuiApplication(int & argc, char ** argv) connect(&general_timer_, SIGNAL(timeout()), this, SLOT(handleRegularEvents())); general_timer_.start(); + +#ifdef Q_WS_MACX + if (global_menubar_ == 0) { + // Create the global default menubar which is shown for the dialogs + // and if no GuiView is visible. + global_menubar_ = new GlobalMenuBar(); + } +#endif } @@ -286,14 +318,14 @@ bool GuiApplication::dispatch(FuncRequest const & cmd) case LFUN_BUFFER_NEW: if (viewCount() == 0 - || (!lyxrc.single_window && current_view_->buffer() != 0)) + || (!lyxrc.open_buffers_in_tabs && current_view_->buffer() != 0)) createView(); current_view_->newDocument(to_utf8(cmd.argument()), false); break; case LFUN_BUFFER_NEW_TEMPLATE: if (viewCount() == 0 - || (!lyxrc.single_window && current_view_->buffer() != 0)) { + || (!lyxrc.open_buffers_in_tabs && current_view_->buffer() != 0)) { createView(); current_view_->newDocument(to_utf8(cmd.argument()), true); if (!current_view_->buffer()) @@ -304,7 +336,7 @@ bool GuiApplication::dispatch(FuncRequest const & cmd) case LFUN_FILE_OPEN: if (viewCount() == 0 - || (!lyxrc.single_window && current_view_->buffer() != 0)) { + || (!lyxrc.open_buffers_in_tabs && current_view_->buffer() != 0)) { createView(); current_view_->openDocument(to_utf8(cmd.argument())); if (!current_view_->buffer()) @@ -344,6 +376,9 @@ static void updateIds(map const & stdmap, vector & ids) void GuiApplication::createView(QString const & geometry_arg) { + if (global_menubar_) + global_menubar_->releaseKeyboard(); + // create new view updateIds(views_, view_ids_); int id = 0; @@ -358,8 +393,7 @@ void GuiApplication::createView(QString const & geometry_arg) // register view views_[id] = view; updateIds(views_, view_ids_); - - theLyXFunc().setLyXView(view); + view->show(); if (!geometry_arg.isEmpty()) { #ifdef Q_WS_WIN @@ -697,6 +731,19 @@ bool GuiApplication::searchMenu(FuncRequest const & func, } +void GuiApplication::initGlobalMenu() +{ + if (global_menubar_) + menus().fillMenuBar(global_menubar_, 0); +} + + +void GuiApplication::onLastWindowClosed() +{ + if (global_menubar_) + global_menubar_->grabKeyboard(); +} + //////////////////////////////////////////////////////////////////////// // X11 specific stuff goes here... #ifdef Q_WS_X11