From 0b4ef3214e8e9d114393ac470c6769cf4ac4b19b Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Tue, 12 Sep 2023 09:17:34 +0400 Subject: [PATCH] Leverage QImage's CoW in Linux native notifications --- .../linux/notifications_manager_linux.cpp | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp index 20c26143b..f173cac01 100644 --- a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp @@ -355,7 +355,7 @@ public: void show(); void close(); - void setImage(const QImage &image); + void setImage(QImage image); private: const not_null _manager; @@ -695,7 +695,7 @@ void NotificationData::close() { _manager->clearNotification(_id); } -void NotificationData::setImage(const QImage &image) { +void NotificationData::setImage(QImage image) { if (_notification) { const auto imageData = [&] { QByteArray ba; @@ -718,20 +718,22 @@ void NotificationData::setImage(const QImage &image) { return; } - const auto convertedImage = image.hasAlphaChannel() - ? image.convertToFormat(QImage::Format_RGBA8888) - : image.convertToFormat(QImage::Format_RGB888); + if (image.hasAlphaChannel()) { + image.convertTo(QImage::Format_RGBA8888); + } else { + image.convertTo(QImage::Format_RGB888); + } _hints[_imageKey] = Glib::create_variant(std::tuple{ - convertedImage.width(), - convertedImage.height(), - int(convertedImage.bytesPerLine()), - convertedImage.hasAlphaChannel(), + image.width(), + image.height(), + int(image.bytesPerLine()), + image.hasAlphaChannel(), 8, - convertedImage.hasAlphaChannel() ? 4 : 3, + image.hasAlphaChannel() ? 4 : 3, std::vector( - convertedImage.constBits(), - convertedImage.constBits() + convertedImage.sizeInBytes()), + image.constBits(), + image.constBits() + image.sizeInBytes()), }); }