Jean-Marc Lasgouttes wrote:
"Abdelrazak" == Abdelrazak Younes <[EMAIL PROTECTED]> writes:

Abdelrazak> Looking at the backtrace, it seems that a resize event is
Abdelrazak> triggered just after the doGreyOut() method is initiated
Abdelrazak> and before it is finished, hence the crash. Now the
Abdelrazak> question is why a resize is triggered?

Because we remove the scroll bar? (shot in the dark)

I think you were right and I fixed this. Bennet, please update and check that it works for you.

Abdel.

Author: younes
Date: Thu Jan  4 13:36:17 2007
New Revision: 16499

URL: http://www.lyx.org/trac/changeset/16499
Log:
Reorganize window resizing so that no painting occurs during a resizeEvent(). This caused the crash on MacOSX because the splash image drawing was not finished before the resizeEvent() occurred because of scrollbar hiding.

* WorkArea::resizeBufferView(): delete redraw() call.

* GuiWorkArea:
  - need_resize_: new private member.
- expose(): move pixmap painting code to new private updateScreen() method.
  - paintEvent(): resize the backing pixmap  if need be.
  - resizeEvent(): move the resizing code to paintEvent().

Modified:
    lyx-devel/trunk/src/frontends/WorkArea.C
    lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.C
    lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h

Modified: lyx-devel/trunk/src/frontends/WorkArea.C
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/frontends/WorkArea.C?rev=16499
==============================================================================
--- lyx-devel/trunk/src/frontends/WorkArea.C (original)
+++ lyx-devel/trunk/src/frontends/WorkArea.C Thu Jan  4 13:36:17 2007
@@ -227,7 +227,6 @@
        lyx_view_.message(_("Formatting document..."));
        buffer_view_->workAreaResize(width(), height());
        lyx_view_.updateLayoutChoice();
-       redraw();
        lyx_view_.busy(false);
        lyx_view_.clearMessage();
 }

Modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.C
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.C?rev=16499
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.C (original)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.C Thu Jan  4 13:36:17 2007
@@ -159,7 +159,7 @@


 GuiWorkArea::GuiWorkArea(int w, int h, int id, LyXView & lyx_view)
-       : WorkArea(id, lyx_view)
+       : WorkArea(id, lyx_view), need_resize_(false)
 {
        cursor_ = new frontend::CursorWidget();
        cursor_->hide();
@@ -430,12 +430,9 @@

 void GuiWorkArea::resizeEvent(QResizeEvent * ev)
 {
-       stopBlinkingCursor();
-       screen_ = QPixmap(ev->size().width(), ev->size().height());
        verticalScrollBar()->setPageStep(viewport()->height());
        QAbstractScrollArea::resizeEvent(ev);
-       resizeBufferView();
-       startBlinkingCursor();
+       need_resize_ = true;
 }


@@ -500,6 +497,13 @@
                << " h: " << rc.height() << endl;
        */

+       if (need_resize_) {
+               screen_ = QPixmap(viewport()->width(), viewport()->height());
+               resizeBufferView();
+               updateScreen();
+               need_resize_ = false;
+       }
+
        QPainter pain(viewport());
        pain.drawPixmap(rc, screen_, rc);
        cursor_->draw(pain);
@@ -508,19 +512,24 @@

 void GuiWorkArea::expose(int x, int y, int w, int h)
 {
+       updateScreen();
+       update(x, y, w, h);
+}
+
+
+void GuiWorkArea::updateScreen()
+{
        QLPainter pain(&screen_);

        if (greyed_out_) {
                lyxerr[Debug::GUI] << "splash screen requested" << endl;
+               verticalScrollBar()->hide();
                doGreyOut(pain);
-               verticalScrollBar()->hide();
-               update(0, 0, width(), height());
                return;
        }

        verticalScrollBar()->show();
        paintText(*buffer_view_, pain);
-       update(x, y, w, h);
 }



Modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h?rev=16499
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h (original)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h Thu Jan  4 13:36:17 2007
@@ -166,7 +166,11 @@
        ///     
        CursorWidget * cursor_;
        ///
+       void updateScreen();
+       ///
        QPixmap screen_;
+       ///
+       bool need_resize_;
 };

 } // namespace frontend



Reply via email to