Le 05/10/2017 à 12:19, Stephan Witt a écrit :
I understand that this is no good start for further investigations. Unfortunately I neither have an idea what to search for with google nor what to search for in Qt bug database or Qt sources. The latter I can do when I have more time than now.
Here is a new try, that reads the screeen and detects when the point at (0,0) has turned black. At least we will now if the color change happens inside an event handler.
JMarc
From 73db1cb163793c35092a98f43bf5b1165abd90ca Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Wed, 4 Oct 2017 15:26:41 +0200 Subject: [PATCH] debug2 --- src/frontends/qt4/GuiWorkArea.cpp | 29 ++++++++++++++++++++++++++--- src/frontends/qt4/GuiWorkArea.h | 3 +++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index a24e8da..3b6ab57 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -268,13 +268,13 @@ GuiWorkArea::Private::~Private() GuiWorkArea::GuiWorkArea(QWidget * /* w */) -: d(new Private(this)) + : init_done_(false), d(new Private(this)) { } GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv) -: d(new Private(this)) + : init_done_(false), d(new Private(this)) { setGuiView(gv); buffer.params().display_pixel_ratio = theGuiApp()->pixelRatio(); @@ -432,7 +432,7 @@ void GuiWorkArea::startBlinkingCaret() d->showCaret(); //we're not supposed to cache this value. - int const time = QApplication::cursorFlashTime() / 2; + int const time = 1000000; //QApplication::cursorFlashTime() / 2; if (time <= 0) return; d->caret_timeout_.setInterval(time); @@ -684,8 +684,19 @@ void GuiWorkArea::scrollTo(int value) } +bool GuiWorkArea::isBlack() +{ + if (!init_done_) + return false; + QImage qi = QPixmap::grabWidget(viewport(), QRect(0,0,10,10)).toImage(); + return qi.pixel(0,0) == 0xff000000; +} + + bool GuiWorkArea::event(QEvent * e) { + if (isBlack()) + LYXERR0("Screen black before event(" << e->type() << ")"); switch (e->type()) { case QEvent::ToolTip: { QHelpEvent * helpEvent = static_cast<QHelpEvent *>(e); @@ -700,6 +711,8 @@ bool GuiWorkArea::event(QEvent * e) } // Don't forget to accept the event! e->accept(); + if (isBlack()) + LYXERR0("Screen black after event(" << e->type() << ")"); return true; } @@ -707,6 +720,8 @@ bool GuiWorkArea::event(QEvent * e) // keyPressEvent is ShortcutOverride-aware and only accepts the event in // this case keyPressEvent(static_cast<QKeyEvent *>(e)); + if (isBlack()) + LYXERR0("Screen black after event(" << e->type() << ")"); return e->isAccepted(); case QEvent::KeyPress: { @@ -719,12 +734,18 @@ bool GuiWorkArea::event(QEvent * e) ke->modifiers() == Qt::ShiftModifier || ke->modifiers() == Qt::NoModifier))) { keyPressEvent(ke); + if (isBlack()) + LYXERR0("Screen black after event(" << e->type() << ")"); return true; } + if (isBlack()) + LYXERR0("Screen black after event(" << e->type() << ")"); return QAbstractScrollArea::event(e); } default: + if (isBlack()) + LYXERR0("Screen black after event(" << e->type() << ")"); return QAbstractScrollArea::event(e); } return false; @@ -1243,6 +1264,8 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev) if (d->caret_visible_) d->caret_->draw(pain); ev->accept(); + init_done_ = true; + } diff --git a/src/frontends/qt4/GuiWorkArea.h b/src/frontends/qt4/GuiWorkArea.h index 4fd5249..5a87976 100644 --- a/src/frontends/qt4/GuiWorkArea.h +++ b/src/frontends/qt4/GuiWorkArea.h @@ -151,6 +151,9 @@ private: /// The slot connected to SyntheticMouseEvent::timeout. void generateSyntheticMouseEvent(); + bool init_done_; + bool isBlack(); + friend class GuiCompleter; struct Private; Private * const d; -- 2.7.4