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

Screen grabber: Wait for the flyout to collapse before grabbing

After clicking the "Screenshot" button in the file flyout, the flyout
now collapses and then triggers the screenshot functionality. This adds
a delay of ca. 1/3 seconds between the click and the action.
This commit is contained in:
Stefan Merettig 2015-03-25 14:43:40 +01:00 committed by tux3
parent 04dc650596
commit 7ab64d5628
4 changed files with 23 additions and 4 deletions

View File

@ -48,6 +48,7 @@
#include "src/chatlog/chatlog.h"
#include "src/offlinemsgengine.h"
#include "src/widget/tool/screenshotgrabber.h"
#include "src/widget/tool/flyoutoverlaywidget.h"
ChatForm::ChatForm(Friend* chatFriend)
: f(chatFriend)
@ -865,11 +866,18 @@ void ChatForm::loadHistory(QDateTime since, bool processUndelivered)
void ChatForm::onScreenshotClicked()
{
connect(fileFlyout, &FlyoutOverlayWidget::hidden, this, &ChatForm::doScreenshot);
hideFileMenu();
}
void ChatForm::doScreenshot()
{
disconnect(fileFlyout, &FlyoutOverlayWidget::hidden, this, &ChatForm::doScreenshot);
ScreenshotGrabber* screenshotGrabber = new ScreenshotGrabber (this);
connect(screenshotGrabber, &ScreenshotGrabber::screenshotTaken, this, &ChatForm::onScreenshotTaken);
screenshotGrabber->showGrabber();
// Try to not grab the context-menu
QTimer::singleShot(200, screenshotGrabber, &ScreenshotGrabber::showGrabber);
}
void ChatForm::onScreenshotTaken (const QPixmap &pixmap) {

View File

@ -97,6 +97,7 @@ private slots:
void onEnableCallButtons();
void onScreenshotClicked();
void onScreenshotTaken(const QPixmap &pixmap);
void doScreenshot();
protected:
// drag & drop

View File

@ -20,6 +20,7 @@
#include <QHBoxLayout>
#include <QPainter>
#include <QBitmap>
#include <QTimer>
FlyoutOverlayWidget::FlyoutOverlayWidget(QWidget *parent)
: QWidget(parent)
@ -97,4 +98,9 @@ void FlyoutOverlayWidget::finishedAnimation()
{
bool hide = (animation->direction() == QAbstractAnimation::Backward);
setAttribute(Qt::WA_TransparentForMouseEvents, hide);
// Delay it by a few frames to let the system catch up on rendering
if (hide)
QTimer::singleShot(50, this, &FlyoutOverlayWidget::hidden);
}

View File

@ -40,6 +40,10 @@ public:
void animateShow();
void animateHide();
signals:
void hidden();
protected:
void leaveEvent(QEvent* event);