#include "LyXRC.h"
#include "MetricsInfo.h"
#include "qt_helpers.h"
+#include "Text.h"
#include "version.h"
#include "graphics/GraphicsImage.h"
if (time > 0) {
cursor_timeout_.setInterval(time);
cursor_timeout_.start();
- } else
+ } else {
// let's initialize this just to be safe
cursor_timeout_.setInterval(500);
+ }
screen_ = QPixmap(viewport()->width(), viewport()->height());
cursor_ = new frontend::CursorWidget();
cursor_->hide();
+ // HACK: Prevents an additional redraw when the scrollbar pops up
+ // which regularily happens on documents with more than one page.
+ // The policy should be set to "Qt::ScrollBarAsNeeded" soon.
+ // Since we have no geometry information yet, we assume that
+ // a document needs a scrollbar if there is more then four
+ // paragraph in the outermost text.
+ if (buffer.text().paragraphs().size() > 4)
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ QTimer::singleShot(50, this, SLOT(fixVerticalScrollBar()));
+
+
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setAcceptDrops(true);
setMouseTracking(true);
}
+void GuiWorkArea::fixVerticalScrollBar()
+{
+ if (!isFullScreen())
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+}
+
+
void GuiWorkArea::close()
{
lyx_view_->removeWorkArea(this);
{
ScrollbarParameters const & scroll_ = buffer_view_->scrollbarParameters();
+ // Block the scrollbar signal to prevent recursive signal/slot calling.
+ verticalScrollBar()->blockSignals(true);
verticalScrollBar()->setRange(scroll_.min, scroll_.max);
verticalScrollBar()->setPageStep(scroll_.page_step);
verticalScrollBar()->setSingleStep(scroll_.single_step);
- // Block the scrollbar signal to prevent recursive signal/slot calling.
- verticalScrollBar()->blockSignals(true);
verticalScrollBar()->setValue(scroll_.position);
verticalScrollBar()->setSliderPosition(scroll_.position);
verticalScrollBar()->blockSignals(false);
return 0;
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(currentWidget());
- BOOST_ASSERT(wa);
+ LASSERT(wa, /**/);
return wa;
}
{
for (int i = 0; i != count(); ++i) {
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(i));
- BOOST_ASSERT(wa);
+ LASSERT(wa, return 0);
if (&wa->bufferView().buffer() == &buffer)
return wa;
}
{
while (count()) {
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(0));
- BOOST_ASSERT(wa);
+ LASSERT(wa, /**/);
removeTab(0);
delete wa;
}
bool TabWorkArea::setCurrentWorkArea(GuiWorkArea * work_area)
{
- BOOST_ASSERT(work_area);
+ LASSERT(work_area, /**/);
int index = indexOf(work_area);
if (index == -1)
return false;
bool TabWorkArea::removeWorkArea(GuiWorkArea * work_area)
{
- BOOST_ASSERT(work_area);
+ LASSERT(work_area, return false);
int index = indexOf(work_area);
if (index == -1)
return false;
else
// Hide tabbar if there's only one tab.
showBar(count() > 1);
- } else
+ } else {
lastWorkAreaRemoved();
+ }
return true;
}
void TabWorkArea::on_currentTabChanged(int i)
{
+ // returns e.g. on application destruction
+ if (i == -1)
+ return;
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(i));
- BOOST_ASSERT(wa);
+ LASSERT(wa, return);
BufferView & bv = wa->bufferView();
bv.cursor().fixIfBroken();
bv.updateMetrics();
removeWorkArea(currentWorkArea());
else {
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(clicked_tab_));
- BOOST_ASSERT(wa);
+ LASSERT(wa, /**/);
removeWorkArea(wa);
}
}