Le 05/10/2017 à 16:46, Stephan Witt a écrit :
I attach a screen shot to present the result. Interestingly it’s always black.
Perhaps there are two or more images used???

Actually there is only a message when the color is black. So the first time when it is black is before the shortcut override (51) event. We should maybe add messages when the screen is OK too. I do not know what to look for.

It looks like grabWidget is not good in Qt5, this updated patch may be better.

I have tried to look a bit at the qt sources, but this is too complicated for me...

JMarc

From 4464cd20e694bb8425a6b5e61a4125f06d655086 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.1

---
 src/frontends/qt4/GuiWorkArea.cpp | 33 ++++++++++++++++++++++++++++++---
 src/frontends/qt4/GuiWorkArea.h   |  3 +++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp
index a24e8da..4ec72d4 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,23 @@ void GuiWorkArea::scrollTo(int value)
 }
 
 
+bool GuiWorkArea::isBlack()
+{
+	if (!init_done_)
+		return false;
+#if (QT_VERSION < 0x050000)
+	QImage qi = QPixmap::grabWidget(viewport(), QRect(0,0,10,10)).toImage();
+#else
+	QImage qi = viewport()->grab(QRect(0,0,10,10)).toImage();
+#endif
+	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 +715,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 +724,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 +738,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 +1268,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

Reply via email to