Refactored checking of last input while notifications are displayed.

- Removed condition for Windows platform only.
 - Added smooth hiding of notifications in case video is watched or voice message is recorded.
 - psUserActionDone() was completely replaced with Core::App().updateNonIdle().
This commit is contained in:
23rd 2019-03-10 16:40:44 +03:00 committed by John Preston
parent 78d00bcf22
commit 3372dfcd3e
11 changed files with 9 additions and 54 deletions

View File

@ -233,7 +233,7 @@ bool Application::eventFilter(QObject *object, QEvent *e) {
case QEvent::MouseButtonPress:
case QEvent::TouchBegin:
case QEvent::Wheel: {
psUserActionDone();
updateNonIdle();
} break;
case QEvent::ShortcutOverride: {
@ -252,7 +252,7 @@ bool Application::eventFilter(QObject *object, QEvent *e) {
case QEvent::ApplicationActivate: {
if (object == QCoreApplication::instance()) {
psUserActionDone();
updateNonIdle();
}
} break;

View File

@ -484,7 +484,7 @@ bool MainWindow::eventFilter(QObject *object, QEvent *e) {
case QEvent::MouseMove: {
if (_main && _main->isIdle()) {
psUserActionDone();
Core::App().updateNonIdle();
_main->checkIdleFinish();
}
} break;

View File

@ -193,16 +193,6 @@ void psDeleteDir(const QString &dir) {
_removeDirectory(dir);
}
namespace {
auto _lastUserAction = 0LL;
} // namespace
void psUserActionDone() {
_lastUserAction = crl::now();
}
bool psIdleSupported() {
return false;
}
@ -446,7 +436,7 @@ bool OpenSystemSettings(SystemSettingsType type) {
}
crl::time LastUserInputTime() {
return _lastUserAction;
return 0LL;
}
namespace ThirdParty {

View File

@ -51,7 +51,6 @@ void psWriteDump();
void psDeleteDir(const QString &dir);
void psUserActionDone();
bool psIdleSupported();
QStringList psInitLogs();

View File

@ -52,7 +52,6 @@ void psWriteDump();
void psDeleteDir(const QString &dir);
void psUserActionDone();
bool psIdleSupported();
QStringList psInitLogs();

View File

@ -90,16 +90,6 @@ void psDeleteDir(const QString &dir) {
objc_deleteDir(dir);
}
namespace {
auto _lastUserAction = 0LL;
} // namespace
void psUserActionDone() {
_lastUserAction = crl::now();
}
bool psIdleSupported() {
return objc_idleSupported();
}
@ -267,7 +257,7 @@ bool OpenSystemSettings(SystemSettingsType type) {
crl::time LastUserInputTime() {
auto idleTime = 0LL;
return objc_idleTime(idleTime) ? (crl::now() - crl::time(idleTime)) : _lastUserAction;
return objc_idleTime(idleTime) ? (crl::now() - crl::time(idleTime)) : 0LL;
}
} // namespace Platform

View File

@ -128,17 +128,6 @@ namespace {
}
}
namespace {
crl::time _lastUserAction = 0;
} // namespace
void psUserActionDone() {
_lastUserAction = crl::now();
EventFilter::getInstance()->setSessionLoggedOff(false);
}
bool psIdleSupported() {
LASTINPUTINFO lii;
lii.cbSize = sizeof(LASTINPUTINFO);
@ -347,7 +336,7 @@ QString CurrentExecutablePath(int argc, char *argv[]) {
crl::time LastUserInputTime() {
LASTINPUTINFO lii;
lii.cbSize = sizeof(LASTINPUTINFO);
return GetLastInputInfo(&lii) ? (crl::now() + lii.dwTime - GetTickCount()) : _lastUserAction;
return GetLastInputInfo(&lii) ? (crl::now() + lii.dwTime - GetTickCount()) : 0LL;
}
namespace {

View File

@ -59,7 +59,6 @@ void psWriteDump();
void psDeleteDir(const QString &dir);
void psUserActionDone();
bool psIdleSupported();
QStringList psInitLogs();

View File

@ -288,7 +288,7 @@ void MainWindow::init() {
void MainWindow::handleStateChanged(Qt::WindowState state) {
stateChangedHook(state);
updateIsActive((state == Qt::WindowMinimized) ? Global::OfflineBlurTimeout() : Global::OnlineFocusTimeout());
psUserActionDone();
Core::App().updateNonIdle();
if (state == Qt::WindowMinimized && Global::WorkMode().value() == dbiwmTrayOnly) {
minimizeToTray();
}

View File

@ -505,9 +505,7 @@ Notification::Notification(
int shift,
Direction shiftDirection)
: Widget(manager, startPosition, shift, shiftDirection)
#ifdef Q_OS_WIN
, _started(GetTickCount())
#endif // Q_OS_WIN
, _started(crl::now())
, _history(history)
, _peer(peer)
, _author(author)
@ -588,14 +586,7 @@ void Notification::prepareActionsCache() {
bool Notification::checkLastInput(bool hasReplyingNotifications) {
if (!_waitingForInput) return true;
auto wasUserInput = true; // TODO
#ifdef Q_OS_WIN
LASTINPUTINFO lii;
lii.cbSize = sizeof(LASTINPUTINFO);
BOOL res = GetLastInputInfo(&lii);
wasUserInput = (!res || lii.dwTime >= _started);
#endif // Q_OS_WIN
if (wasUserInput) {
if (Core::App().lastNonIdleTime() > _started) {
_waitingForInput = false;
if (!hasReplyingNotifications) {
_hideTimer.start(st::notifyWaitLongHide);

View File

@ -216,9 +216,7 @@ private:
Animation a_actionsOpacity;
QPixmap _buttonsCache;
#ifdef Q_OS_WIN
crl::time _started;
#endif // Q_OS_WIN
History *_history;
PeerData *_peer;