1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

fix(screen-grabber): fix crash

This commit is contained in:
Nils Fenner 2016-07-21 10:49:50 +02:00
parent ff92a55950
commit 780a017928
5 changed files with 11 additions and 17 deletions

View File

@ -67,7 +67,6 @@
ChatForm::ChatForm(Friend* chatFriend)
: f(chatFriend)
, screenshotGrabber(nullptr)
, isTyping(false)
{
Core* core = Core::getInstance();
@ -797,8 +796,8 @@ void ChatForm::onScreenshotClicked()
void ChatForm::doScreenshot()
{
if (!screenshotGrabber)
screenshotGrabber = new ScreenshotGrabber(this);
// note: grabber is self-managed and will destroy itself when done
ScreenshotGrabber* screenshotGrabber = new ScreenshotGrabber;
connect(screenshotGrabber, &ScreenshotGrabber::screenshotTaken,
this, &ChatForm::onScreenshotTaken);
@ -827,8 +826,6 @@ void ChatForm::onScreenshotTaken(const QPixmap &pixmap) {
tr("Failed to open temporary file", "Temporary file for screenshot"),
tr("qTox wasn't able to save the screenshot"));
delete screenshotGrabber;
screenshotGrabber = nullptr;
return;
}
@ -839,8 +836,6 @@ void ChatForm::onScreenshotTaken(const QPixmap &pixmap) {
QFileInfo fi(file);
emit sendFile(f->getFriendID(), fi.fileName(), fi.filePath(), filesize);
delete screenshotGrabber;
screenshotGrabber = nullptr;
}
void ChatForm::onLoadHistory()

View File

@ -121,7 +121,6 @@ private:
QAction* loadHistoryAction;
QAction* copyStatusAction;
ScreenshotGrabber* screenshotGrabber;
QHash<uint, FileTransferInstance*> ftransWidgets;
CallConfirmWidget *callConfirm;
bool isTyping;

View File

@ -158,7 +158,8 @@ void AVForm::on_videoModescomboBox_currentIndexChanged(int index)
return;
}
ScreenshotGrabber* screenshotGrabber = new ScreenshotGrabber(this);
// note: grabber is self-managed and will destroy itself when done
ScreenshotGrabber* screenshotGrabber = new ScreenshotGrabber;
auto onGrabbed = [screenshotGrabber, devName, this] (QRect region)
{
@ -170,7 +171,6 @@ void AVForm::on_videoModescomboBox_currentIndexChanged(int index)
Settings::getInstance().setScreenGrabbed(true);
open(devName, mode);
delete screenshotGrabber;
};
connect(screenshotGrabber, &ScreenshotGrabber::regionChosen, this, onGrabbed, Qt::QueuedConnection);

View File

@ -35,14 +35,13 @@
#include "toolboxgraphicsitem.h"
#include "src/widget/widget.h"
ScreenshotGrabber::ScreenshotGrabber(QObject* parent)
: QObject(parent)
ScreenshotGrabber::ScreenshotGrabber()
: QObject()
, mKeysBlocked(false)
, scene(0)
, mQToxVisible(true)
{
window = new QGraphicsView (scene); // Top-level widget
window->setAttribute(Qt::WA_DeleteOnClose);
window->setWindowFlags(Qt::FramelessWindowHint | Qt::BypassWindowManagerHint);
window->setContentsMargins(0, 0, 0, 0);
window->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@ -71,6 +70,7 @@ void ScreenshotGrabber::reInit()
ScreenshotGrabber::~ScreenshotGrabber()
{
delete scene;
delete window;
}
bool ScreenshotGrabber::eventFilter(QObject* object, QEvent* event)
@ -134,9 +134,10 @@ void ScreenshotGrabber::acceptRegion()
emit regionChosen(rect);
qDebug() << "Screenshot accepted, chosen region" << rect;
QPixmap pixmap = this->screenGrab.copy(rect);
this->window->close();
restoreHiddenWindows();
emit screenshotTaken(pixmap);
deleteLater();
}
void ScreenshotGrabber::setupScene()
@ -210,9 +211,8 @@ void ScreenshotGrabber::adjustTooltipPosition()
void ScreenshotGrabber::reject()
{
qDebug() << "Rejected screenshot";
this->window->close();
restoreHiddenWindows();
deleteLater();
}
QPixmap ScreenshotGrabber::grabScreen()

View File

@ -39,7 +39,7 @@ class ScreenshotGrabber : public QObject
Q_OBJECT
public:
explicit ScreenshotGrabber(QObject* parent);
ScreenshotGrabber();
~ScreenshotGrabber() override;
bool eventFilter(QObject* object, QEvent* event) override;