X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiView.cpp;h=63bd54ec63c476087b971512b96e55f65fe1eb06;hb=d2a96bcdc369b52ae6fb52c5a612bcd9f665231b;hp=398d80475f7ed97dccda6c4c13833843ef505677;hpb=ffa722e0b7cefbbdc6f7e387a50fefb889bcb7d9;p=lyx.git diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 398d80475f..63bd54ec63 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -403,8 +403,8 @@ void GuiView::closeEvent(QCloseEvent * close_event) continue; } - std::vector const & ids = guiApp->viewIds(); - for (size_type i = 0; i != ids.size(); ++i) { + QVector const ids = guiApp->viewIds(); + for (int i = 0; i != ids.size(); ++i) { if (id_ == ids[i]) continue; if (guiApp->view(ids[i]).workArea(*b)) { @@ -433,7 +433,7 @@ void GuiView::closeEvent(QCloseEvent * close_event) // Save toolbars configuration if (isFullScreen()) { d.toolbars_->toggleFullScreen(!isFullScreen()); - updateToolbars(); + updateDialogs(); } // Make sure the timer time out will not trigger a statusbar update. @@ -548,10 +548,11 @@ void GuiView::on_currentWorkAreaChanged(GuiWorkArea * wa) this, SLOT(updateWindowTitle(GuiWorkArea *))); updateWindowTitle(wa); - // Navigator needs more than a simple update in this case. It needs to be - // rebuilt. structureChanged(); + // The document settings needs to be reinitialised. + updateDialog("document", ""); + // Buffer-dependent dialogs must be updated. This is done here because // some dialogs require buffer()->text. updateDialogs(); @@ -572,6 +573,8 @@ void GuiView::on_lastWorkAreaRemoved() } #else structureChanged(); + // The document settings needs to be reinitialised. + updateDialog("document", ""); updateDialogs(); #endif } @@ -626,6 +629,8 @@ bool GuiView::event(QEvent * e) // The document structure, name and dialogs might have // changed in another view. structureChanged(); + // The document settings needs to be reinitialised. + updateDialog("document", ""); updateDialogs(); } else { setWindowTitle(qt_("LyX")); @@ -636,12 +641,23 @@ bool GuiView::event(QEvent * e) } case QEvent::ShortcutOverride: { + + if (isFullScreen() && menuBar()->isHidden()) { + QKeyEvent * ke = static_cast(e); + // FIXME: we should also try to detect special LyX shortcut such as + // Alt-P and Alt-M. Right now there is a hack in + // GuiWorkArea::processKeySym() that hides again the menubar for + // those cases. + if (ke->modifiers() & Qt::AltModifier && ke->key() != Qt::Key_Alt) + menuBar()->show(); + return QMainWindow::event(e); + } + if (d.current_work_area_) // Nothing special to do. return QMainWindow::event(e); QKeyEvent * ke = static_cast(e); - // Let Qt handle menu access and the Tab keys to navigate keys to navigate // between controls. if (ke->modifiers() & Qt::AltModifier || ke->key() == Qt::Key_Tab @@ -849,9 +865,6 @@ void GuiView::updateToolbars() d.toolbars_->update(math, table, review, mathmacrotemplate); } else d.toolbars_->update(false, false, false, false); - - // update read-only status of open dialogs. - checkStatus(); } @@ -929,6 +942,8 @@ void GuiView::errors(string const & error_type) void GuiView::structureChanged() { d.toc_models_.reset(view()); + // Navigator needs more than a simple update in this case. It needs to be + // rebuilt. updateDialog("toc", ""); } @@ -944,7 +959,7 @@ void GuiView::updateDialog(string const & name, string const & data) Dialog * const dialog = it->second.get(); if (dialog->isVisibleView()) - dialog->updateData(data); + dialog->initialiseParams(data); } @@ -970,9 +985,8 @@ void GuiView::resetAutosaveTimers() } -FuncStatus GuiView::getStatus(FuncRequest const & cmd) +bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) { - FuncStatus flag; bool enable = true; Buffer * buf = buffer(); @@ -1062,10 +1076,6 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd) } case LFUN_INSET_APPLY: { - if (!buf) { - enable = false; - break; - } string const name = cmd.getArg(0); Inset * inset = getOpenInset(name); if (inset) { @@ -1078,7 +1088,7 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd) flag |= fs; } else { FuncRequest fr(LFUN_INSET_INSERT, cmd.argument()); - flag |= getStatus(fr); + flag |= lyx::getStatus(fr); } enable = flag.enabled(); break; @@ -1103,16 +1113,13 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd) break; default: - if (!view()) { - enable = false; - break; - } + return false; } if (!enable) flag.enabled(false); - return flag; + return true; } @@ -1666,10 +1673,11 @@ bool GuiView::closeBuffer(Buffer & buf, bool tolastopened) bool GuiView::dispatch(FuncRequest const & cmd) { - BufferView * bv = view(); + BufferView * bv = view(); // By default we won't need any update. if (bv) bv->cursor().updateFlags(Update::None); + bool dispatched = true; switch(cmd.action) { case LFUN_BUFFER_IMPORT: @@ -1840,6 +1848,7 @@ bool GuiView::dispatch(FuncRequest const & cmd) } case LFUN_INSET_APPLY: { + view()->cursor().recordUndoFullDocument(); string const name = cmd.getArg(0); Inset * inset = getOpenInset(name); if (inset) { @@ -1898,10 +1907,18 @@ bool GuiView::dispatch(FuncRequest const & cmd) break; default: - return false; + dispatched = false; + break; } - return true; + if (isFullScreen()) { + if (menuBar()->isVisible()) + menuBar()->hide(); + if (statusBar()->isVisible()) + statusBar()->hide(); + } + + return dispatched; } @@ -1993,9 +2010,7 @@ void GuiView::restartCursor() d.current_work_area_->startBlinkingCursor(); // Take this occasion to update the other GUI elements. - updateLayoutList(); - updateToolbars(); - updateStatusBar(); + updateDialogs(); } @@ -2160,19 +2175,8 @@ void GuiView::updateDialogs() for(; it != end; ++it) { Dialog * dialog = it->second.get(); - if (!dialog->isVisibleView()) - continue; - if (dialog->isBufferDependent()) { - if (buffer()) - dialog->updateView(); - else - dialog->enableView(false); - } else { - // A bit clunky, but the dialog will request - // that the kernel provides it with the necessary - // data. - dialog->updateDialog(); - } + if (dialog && dialog->isVisibleView()) + dialog->checkStatus(); } updateToolbars(); updateLayoutList(); @@ -2180,20 +2184,6 @@ void GuiView::updateDialogs() } -void GuiView::checkStatus() -{ - map::const_iterator it = d.dialogs_.begin(); - map::const_iterator end = d.dialogs_.end(); - - for(; it != end; ++it) { - Dialog * const dialog = it->second.get(); - if (dialog && dialog->isVisibleView()) - dialog->checkStatus(); - } -} - - - // will be replaced by a proper factory... Dialog * createGuiAbout(GuiView & lv); Dialog * createGuiBibitem(GuiView & lv);