using namespace lyx::support;
namespace lyx {
-
-extern bool quitting;
-
namespace frontend {
namespace {
// The first TabWorkArea is always the first one, if any.
return tabWorkArea(0);
- TabWorkArea * tab_widget = 0;
for (int i = 0; i != splitter_->count(); ++i) {
- QWidget * w = splitter_->widget(i);
- if (!w->hasFocus())
- continue;
- tab_widget = dynamic_cast<TabWorkArea *>(w);
- if (tab_widget)
- break;
+ TabWorkArea * twa = tabWorkArea(i);
+ if (current_work_area_ == twa->currentWorkArea())
+ return twa;
}
- return tab_widget;
+ // None has the focus so we just take the first one.
+ return tabWorkArea(0);
}
public:
// Make sure that no LFUN use this close to be closed View.
theLyXFunc().setLyXView(0);
+
+ // Save toolbars configuration
+ if (isFullScreen()) {
+ d.toolbars_->toggleFullScreen(!isFullScreen());
+ updateToolbars();
+ }
+
// Make sure the timer time out will not trigger a statusbar update.
d.statusbar_timer_.stop();
- if (lyxrc.allow_geometry_session) {
+ // Saving fullscreen requires additional tweaks in the toolbar code.
+ // It wouldn't also work under linux natively.
+ if (lyxrc.allow_geometry_session && !isFullScreen()) {
QSettings settings;
QString const key = "view-" + QString::number(id_);
#ifdef Q_WS_X11
setWindowTitle(qt_("LyX"));
setWindowIconText(qt_("LyX"));
}
+ setFocus();
return QMainWindow::event(e);
}
GuiWorkArea * GuiView::workArea(Buffer & buffer)
{
- for (int i = 0; i != d.splitter_->count(); ++i) {
- GuiWorkArea * wa = d.tabWorkArea(i)->workArea(buffer);
- if (wa)
- return wa;
- }
+ if (TabWorkArea * twa = d.currentTabWorkArea())
+ return twa->workArea(buffer);
return 0;
}
GuiWorkArea * GuiView::addWorkArea(Buffer & buffer)
{
-
// Automatically create a TabWorkArea if there are none yet.
- if (!d.splitter_->count())
- addTabWorkArea();
-
- TabWorkArea * tab_widget = d.currentTabWorkArea();
+ TabWorkArea * tab_widget = d.splitter_->count()
+ ? d.currentTabWorkArea() : addTabWorkArea();
return tab_widget->addWorkArea(buffer, *this);
}
-void GuiView::addTabWorkArea()
+TabWorkArea * GuiView::addTabWorkArea()
{
TabWorkArea * twa = new TabWorkArea;
QObject::connect(twa, SIGNAL(currentWorkAreaChanged(GuiWorkArea *)),
this, SLOT(on_currentWorkAreaChanged(GuiWorkArea *)));
d.splitter_->addWidget(twa);
d.stack_widget_->setCurrentWidget(d.splitter_);
+ return twa;
}
enable = buf;
break;
+ case LFUN_SPLIT_VIEW:
+ enable = buf;
+ break;
+
+ case LFUN_CLOSE_TAB_GROUP:
+ enable = d.currentTabWorkArea();
+ break;
+
case LFUN_TOOLBAR_TOGGLE:
flag.setOnOff(d.toolbars_->visible(cmd.getArg(0)));
break;
case LFUN_UI_TOGGLE:
lfunUiToggle(cmd);
+ // Make sure the keyboard focus stays in the work area.
+ setFocus();
+ break;
+
+ case LFUN_SPLIT_VIEW:
+ if (Buffer * buf = buffer()) {
+ string const orientation = cmd.getArg(0);
+ d.splitter_->setOrientation(orientation == "vertical"
+ ? Qt::Vertical : Qt::Horizontal);
+ TabWorkArea * twa = addTabWorkArea();
+ GuiWorkArea * wa = twa->addWorkArea(*buf, *this);
+ setCurrentWorkArea(wa);
+ }
+ break;
+
+ case LFUN_CLOSE_TAB_GROUP:
+ if (TabWorkArea * twa = d.currentTabWorkArea()) {
+ delete twa;
+ twa = d.currentTabWorkArea();
+ // Switch to the next GuiWorkArea in the found TabWorkArea.
+ d.current_work_area_ = twa? twa->currentWorkArea() : 0;
+ if (d.splitter_->count() == 0)
+ // No more work area, switch to the background widget.
+ d.setBackground();
+ }
break;
default:
return;
}
+ if (lyxrc.full_screen_toolbars)
+ d.toolbars_->toggleFullScreen(!isFullScreen());
+
if (isFullScreen()) {
- showNormal();
+ for (int i = 0; i != d.splitter_->count(); ++i)
+ d.tabWorkArea(i)->setFullScreen(false);
#if QT_VERSION >= 0x040300
setContentsMargins(0, 0, 0, 0);
#endif
- for (int i = 0; i != d.splitter_->count(); ++i)
- d.tabWorkArea(i)->setFullScreen(false);
+ showNormal();
menuBar()->show();
statusBar()->show();
} else {
- statusBar()->hide();
- menuBar()->hide();
for (int i = 0; i != d.splitter_->count(); ++i)
d.tabWorkArea(i)->setFullScreen(true);
#if QT_VERSION >= 0x040300
setContentsMargins(-2, -2, -2, -2);
#endif
showFullScreen();
+ statusBar()->hide();
+ menuBar()->hide();
}
}
Dialog * createGuiFloat(GuiView & lv);
Dialog * createGuiGraphics(GuiView & lv);
Dialog * createGuiInclude(GuiView & lv);
-Dialog * createGuiIndex(GuiView & lv);
Dialog * createGuiLabel(GuiView & lv);
Dialog * createGuiListings(GuiView & lv);
Dialog * createGuiLog(GuiView & lv);
return createGuiGraphics(*this);
if (name == "include")
return createGuiInclude(*this);
- if (name == "index")
- return createGuiIndex(*this);
if (name == "nomenclature")
return createGuiNomenclature(*this);
if (name == "label")