]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/Menus.cpp
On Linux show in crash message box the backtrace
[lyx.git] / src / frontends / qt4 / Menus.cpp
index 68169864950768613d75688e4f41352d3b4c1cae..707251dfbb27749c9d092b7cf6fcfd035f44abc0 100644 (file)
@@ -1554,9 +1554,10 @@ void MenuDefinition::expandCiteStyles(BufferView const * bv)
        vector<docstring> const keys = getVectorFromString(key);
 
        vector<CitationStyle> const citeStyleList = buf->params().citeStyles();
+       static const size_t max_length = 40;
        vector<docstring> citeStrings =
                buf->masterBibInfo().getCiteStrings(keys, citeStyleList, bv->buffer(),
-               false, before, after, from_utf8("dialog"));
+               before, after, from_utf8("dialog"), max_length);
 
        vector<docstring>::const_iterator cit = citeStrings.begin();
        vector<docstring>::const_iterator end = citeStrings.end();
@@ -1665,9 +1666,13 @@ void MenuDefinition::expandEnvironmentSeparators(BufferView const * bv)
 {
        if (!bv)
                return;
+       Text const * text = bv->cursor().text();
+       // no paragraphs and no separators exist in math
+       if (!text)
+               return;
 
-       pit_type pit = bv->cursor().pit();
-       Paragraph const & par = bv->buffer().text().getPar(pit);
+       pit_type pit = bv->cursor().selBegin().pit();
+       Paragraph const & par = text->getPar(pit);
        docstring const curlayout = par.layout().name();
        docstring outerlayout;
        depth_type current_depth = par.params().depth();
@@ -1677,7 +1682,7 @@ void MenuDefinition::expandEnvironmentSeparators(BufferView const * bv)
                if (pit == 0 || cpar.params().depth() == 0)
                        break;
                --pit;
-               cpar = bv->buffer().text().getPar(pit);
+               cpar = text->getPar(pit);
                if (cpar.params().depth() < current_depth
                    && cpar.layout().isEnvironment()) {
                                outerlayout = cpar.layout().name();
@@ -1930,8 +1935,11 @@ void Menus::Impl::macxMenuBarInit(QMenuBar * qmb)
                 QAction::AboutRole},
                {LFUN_DIALOG_SHOW, "prefs", "Preferences",
                 QAction::PreferencesRole},
-               /* {LFUN_RECONFIGURE, "", "Reconfigure",
-                QAction::ApplicationSpecificRole}, */
+#if !(defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000))
+               /* This doesn't work with Cocoa. */
+               {LFUN_RECONFIGURE, "", "Reconfigure",
+                QAction::ApplicationSpecificRole},
+#endif
                {LFUN_LYX_QUIT, "", "Quit LyX", QAction::QuitRole}
        };
        const size_t num_entries = sizeof(entries) / sizeof(entries[0]);
@@ -1953,19 +1961,10 @@ void Menus::Impl::macxMenuBarInit(QMenuBar * qmb)
        MenuDefinition::const_iterator cit = mac_special_menu_.begin();
        MenuDefinition::const_iterator end = mac_special_menu_.end();
        for (size_t i = 0 ; cit != end ; ++cit, ++i) {
-#if defined(QT_MAC_USE_COCOA) && (QT_MAC_USE_COCOA > 0)
-               if (first_call || entries[i].role != QAction::ApplicationSpecificRole) {
-                       Action * action = new Action(QIcon(), cit->label(),
-                                cit->func(), QString(), qMenu);
-                       action->setMenuRole(entries[i].role);
-                       qMenu->addAction(action);
-               }
-#else
                Action * action = new Action(QIcon(), cit->label(),
                        cit->func(), QString(), qMenu);
                action->setMenuRole(entries[i].role);
                qMenu->addAction(action);
-#endif
        }
 }
 
@@ -2283,6 +2282,14 @@ void Menus::fillMenuBar(QMenuBar * qmb, GuiView * view, bool initial)
 
                Menu * menu = new Menu(view, m->submenuname(), true);
                menu->setTitle(label(*m));
+
+#if defined(Q_WS_MACX) && (defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000))
+               // On Mac OS with QT/cocoa, the menu is not displayed if there is no action
+               // so we create a temporary one here
+               QAction * action = new QAction(menu);
+               menu->addAction(action);
+#endif
+
                qmb->addMenu(menu);
 
                d->name_map_[view][name] = menu;