From 832163c1b7331d9aa0638ecd2dc481a7763bdcb0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 26 Jul 2016 15:09:40 +0300 Subject: [PATCH] Displaying time in chat list for all timestamps in the last 20 hours. Fixed possible crash in MediaView video player seek after clip error. Fixed possible crash in native event filter on Windows. Removed unused lng_stickers_add key. --- Telegram/SourceFiles/boxes/stickersetbox.cpp | 6 +----- Telegram/SourceFiles/boxes/stickersetbox.h | 3 --- Telegram/SourceFiles/dialogs/dialogs_layout.cpp | 7 ++++++- Telegram/SourceFiles/media/media_clip_reader.cpp | 6 +++--- Telegram/SourceFiles/mediaview.cpp | 10 +++++++--- .../platform/win/windows_event_filter.cpp | 12 +++++++++--- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 1a002920d..adb47c99a 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -473,8 +473,6 @@ StickersInner::StickersInner(StickersBox::Section section) : TWidget() , _removeWidth(st::normalFont->width(lang(lng_stickers_remove))) , _returnWidth(st::normalFont->width(lang(lng_stickers_return))) , _restoreWidth(st::normalFont->width(lang(lng_stickers_restore))) -, _addText(lang(lng_stickers_add).toUpper()) -, _addWidth(st::defaultActiveButton.font->width(_addText)) , _aboveShadow(st::boxShadow) { setup(); } @@ -489,8 +487,6 @@ StickersInner::StickersInner(const Stickers::Order &archivedIds) : TWidget() , _removeWidth(st::normalFont->width(lang(lng_stickers_remove))) , _returnWidth(st::normalFont->width(lang(lng_stickers_return))) , _restoreWidth(st::normalFont->width(lang(lng_stickers_restore))) -, _addText(lang(lng_stickers_add).toUpper()) -, _addWidth(st::defaultActiveButton.font->width(_addText)) , _aboveShadow(st::boxShadow) { setup(); } @@ -1128,7 +1124,7 @@ int StickersInner::countMaxNameWidth() const { if (_section == Section::Installed) { namew -= qMax(qMax(qMax(_returnWidth, _removeWidth), _restoreWidth), _clearWidth); } else { - namew -= _addWidth - st::defaultActiveButton.width; + namew -= st::stickersAddIcon.width() - st::defaultActiveButton.width; } return namew; } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index 42d9e23cf..cde1293f1 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -312,9 +312,6 @@ private: ConfirmBox *_clearBox = nullptr; - QString _addText; - int _addWidth; - int _buttonHeight = 0; bool _hasFeaturedButton = false; bool _hasArchivedButton = false; diff --git a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp index 29e8ea46d..cb19698b9 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp @@ -33,11 +33,16 @@ namespace Layout { namespace { +// Show all dates that are in the last 20 hours in time format. +constexpr int kRecentlyInSeconds = 20 * 3600; + void paintRowDate(Painter &p, const QDateTime &date, QRect &rectForName, bool active) { QDateTime now(QDateTime::currentDateTime()), lastTime(date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt; - if (lastDate == nowDate) { + bool wasSameDay = (lastDate == nowDate); + bool wasRecently = qAbs(lastTime.secsTo(now)) < kRecentlyInSeconds; + if (wasSameDay || wasRecently) { dt = lastTime.toString(cTimeFormat()); } else if (lastDate.year() == nowDate.year() && lastDate.weekNumber() == nowDate.weekNumber()) { dt = langDayOfWeek(lastDate); diff --git a/Telegram/SourceFiles/media/media_clip_reader.cpp b/Telegram/SourceFiles/media/media_clip_reader.cpp index 043d149e3..5d8756317 100644 --- a/Telegram/SourceFiles/media/media_clip_reader.cpp +++ b/Telegram/SourceFiles/media/media_clip_reader.cpp @@ -110,7 +110,7 @@ Reader::Reader(const FileLocation &location, const QByteArray &data, Callback && } Reader::Frame *Reader::frameToShow(int32 *index) const { // 0 means not ready - int32 step = _step.loadAcquire(), i; + int step = _step.loadAcquire(), i; if (step == WaitingForDimensionsStep) { if (index) *index = 0; return nullptr; @@ -205,8 +205,8 @@ void Reader::start(int32 framew, int32 frameh, int32 outerw, int32 outerh, Image } QPixmap Reader::current(int32 framew, int32 frameh, int32 outerw, int32 outerh, uint64 ms) { - Frame *frame = frameToShow(); - t_assert(frame != 0); + auto frame = frameToShow(); + t_assert(frame != nullptr); if (ms) { frame->displayed.storeRelease(1); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 3afe8ae3f..62307f3bd 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -731,7 +731,10 @@ void MediaView::clipCallback(Media::Clip::Notification notification) { case NotificationReinit: { if (auto item = App::histItemById(_msgmigrated ? 0 : _channel, _msgid)) { if (_gif->state() == State::Error) { - _current = QPixmap(); + stopGif(); + updateControls(); + update(); + break; } else if (_gif->state() == State::Finished) { _videoPositionMs = _videoDurationMs; _videoStopped = true; @@ -1118,7 +1121,10 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty messages shown as docs: doc can be NULL if (!doc || (!doc->isAnimation() && !doc->isVideo()) || doc != _doc || (item && (item->id != _msgid || (item->history() != (_msgmigrated ? _migrated : _history))))) { _fullScreenVideo = false; + _current = QPixmap(); stopGif(); + } else if (gifShown()) { + _current = QPixmap(); } _doc = doc; _photo = nullptr; @@ -1128,8 +1134,6 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty _autoplayVideoDocument = nullptr; } - _current = QPixmap(); - _caption = Text(); if (_doc) { if (_doc->sticker()) { diff --git a/Telegram/SourceFiles/platform/win/windows_event_filter.cpp b/Telegram/SourceFiles/platform/win/windows_event_filter.cpp index f782a9eb9..0d9331782 100644 --- a/Telegram/SourceFiles/platform/win/windows_event_filter.cpp +++ b/Telegram/SourceFiles/platform/win/windows_event_filter.cpp @@ -103,7 +103,10 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa } } return false; - case WM_NCPAINT: if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) return false; *result = 0; return true; + case WM_NCPAINT: { + if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) return false; + if (result) *result = 0; + } return true; case WM_NCCALCSIZE: { WINDOWPLACEMENT wp; @@ -120,12 +123,13 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa } } } - *result = 0; + if (result) *result = 0; return true; } case WM_NCACTIVATE: { - *result = DefWindowProc(hWnd, msg, wParam, -1); + auto res = DefWindowProc(hWnd, msg, wParam, -1); + if (result) *result = res; } return true; case WM_WINDOWPOSCHANGING: @@ -172,6 +176,8 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa } return false; case WM_NCHITTEST: { + if (!result) return false; + POINTS p = MAKEPOINTS(lParam); RECT r; GetWindowRect(hWnd, &r);