]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiWorkArea.cpp
Complete the removal of the embedding stuff. Maybe. It's hard to be sure we got every...
[lyx.git] / src / frontends / qt4 / GuiWorkArea.cpp
index 16f2135a1fa6da2e689377bdd0222e4bc3248543..79277e7ff10582389b04b94e1f2331348ab842d1 100644 (file)
@@ -30,6 +30,7 @@
 #include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "qt_helpers.h"
+#include "Text.h"
 #include "version.h"
 
 #include "graphics/GraphicsImage.h"
@@ -46,7 +47,7 @@
 #include <QContextMenuEvent>
 #include <QInputContext>
 #include <QHelpEvent>
-#ifdef Q_WS_MAC
+#ifdef Q_WS_MACX
 #include <QMacStyle>
 #endif
 #include <QMainWindow>
@@ -239,14 +240,26 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & lv)
        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);
@@ -292,6 +305,13 @@ GuiWorkArea::~GuiWorkArea()
 }
 
 
+void GuiWorkArea::fixVerticalScrollBar()
+{
+       if (!isFullScreen())
+               setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+}
+
+
 void GuiWorkArea::close()
 {
        lyx_view_->removeWorkArea(this);
@@ -392,7 +412,6 @@ void GuiWorkArea::processKeySym(KeySymbol const & key, KeyModifier mod)
 
        theLyXFunc().setLyXView(lyx_view_);
        theLyXFunc().processKeySym(key, mod);
-       
 }
 
 
@@ -505,7 +524,8 @@ void GuiWorkArea::showCursor()
                cursorInView = false;
 
        // show cursor on screen
-       bool completable = completer_.completionAvailable()
+       bool completable = cur.inset().showCompletionCursor()
+               && completer_.completionAvailable()
                && !completer_.popupVisible()
                && !completer_.inlineVisible();
        if (cursorInView) {
@@ -538,11 +558,11 @@ void GuiWorkArea::updateScrollbar()
 {
        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);
@@ -1142,7 +1162,7 @@ class NoTabFrameMacStyle : public QMacStyle {
 public:
        ///
        QRect subElementRect(SubElement element, const QStyleOption * option,
-                            const QWidget * widget = 0 ) const 
+                            const QWidget * widget = 0) const
        {
                QRect rect = QMacStyle::subElementRect(element, option, widget);
                bool noBar = static_cast<QTabWidget const *>(widget)->count() <= 1;
@@ -1236,7 +1256,7 @@ GuiWorkArea * TabWorkArea::currentWorkArea()
                return 0;
 
        GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(currentWidget()); 
-       BOOST_ASSERT(wa);
+       LASSERT(wa, /**/);
        return wa;
 }
 
@@ -1245,7 +1265,7 @@ GuiWorkArea * TabWorkArea::workArea(Buffer & buffer)
 {
        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;
        }
@@ -1257,7 +1277,7 @@ void TabWorkArea::closeAll()
 {
        while (count()) {
                GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(0));
-               BOOST_ASSERT(wa);
+               LASSERT(wa, /**/);
                removeTab(0);
                delete wa;
        }
@@ -1266,7 +1286,7 @@ void TabWorkArea::closeAll()
 
 bool TabWorkArea::setCurrentWorkArea(GuiWorkArea * work_area)
 {
-       BOOST_ASSERT(work_area);
+       LASSERT(work_area, /**/);
        int index = indexOf(work_area);
        if (index == -1)
                return false;
@@ -1306,7 +1326,7 @@ GuiWorkArea * TabWorkArea::addWorkArea(Buffer & buffer, GuiView & view)
 
 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;
@@ -1318,13 +1338,14 @@ bool TabWorkArea::removeWorkArea(GuiWorkArea * work_area)
        if (count()) {
                // make sure the next work area is enabled.
                currentWidget()->setUpdatesEnabled(true);
-               if ((currentWorkArea() && currentWorkArea()->isFullScreen()))
+               if (currentWorkArea() && currentWorkArea()->isFullScreen())
                        setFullScreen(true);
                else
                        // Hide tabbar if there's only one tab.
                        showBar(count() > 1);
-       } else
+       } else {
                lastWorkAreaRemoved();
+       }
 
        return true;
 }
@@ -1332,8 +1353,11 @@ bool TabWorkArea::removeWorkArea(GuiWorkArea * work_area)
 
 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();
@@ -1363,7 +1387,7 @@ void TabWorkArea::closeCurrentTab()
                removeWorkArea(currentWorkArea());
        else {
                GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(clicked_tab_)); 
-               BOOST_ASSERT(wa);
+               LASSERT(wa, /**/);
                removeWorkArea(wa);
        }
 }