From 1fd25e8778b0dabb547ea150c3cf8e78088afa75 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 30 Sep 2014 07:13:47 -0700 Subject: [PATCH] fixed custom context menu for os x, fixed file drag-n-drop in os x 10.10 --- Telegram/SourceFiles/gui/contextmenu.cpp | 5 +++++ Telegram/SourceFiles/historywidget.cpp | 4 ++++ Telegram/SourceFiles/pspecific_linux.h | 3 +++ Telegram/SourceFiles/pspecific_mac.cpp | 4 ++++ Telegram/SourceFiles/pspecific_mac.h | 1 + Telegram/SourceFiles/pspecific_mac_p.h | 1 + Telegram/SourceFiles/pspecific_mac_p.mm | 9 +++++++++ Telegram/SourceFiles/pspecific_wnd.h | 3 +++ Telegram/SourceFiles/window.cpp | 4 ++-- 9 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/gui/contextmenu.cpp b/Telegram/SourceFiles/gui/contextmenu.cpp index c71137e95..f02f84f17 100644 --- a/Telegram/SourceFiles/gui/contextmenu.cpp +++ b/Telegram/SourceFiles/gui/contextmenu.cpp @@ -127,6 +127,11 @@ void ContextMenu::resizeEvent(QResizeEvent *e) { void ContextMenu::paintEvent(QPaintEvent *e) { QPainter p(this); + QPainter::CompositionMode m = p.compositionMode(); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect(e->rect(), st::transparent->b); + p.setCompositionMode(m); + if (animating()) { p.setOpacity(a_opacity.current()); } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index af7e7b336..ed41ac306 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2471,6 +2471,8 @@ DragState HistoryWidget::getDragState(const QMimeData *d) { if (!i->isLocalFile()) return DragStateNone; QString file(i->toLocalFile()); + if (file.startsWith(qsl("/.file/id="))) file = psConvertFileUrl(file); + quint64 s = QFileInfo(file).size(); if (s >= MaxUploadDocumentSize) { return DragStateNone; @@ -3283,6 +3285,8 @@ QStringList HistoryWidget::getMediasFromMime(const QMimeData *d) { if (!i->isLocalFile()) return QStringList(); QString file(i->toLocalFile()); + if (file.startsWith(qsl("/.file/id="))) file = psConvertFileUrl(file); + QFileInfo info(file); uint64 s = info.size(); if (s >= MaxUploadDocumentSize) { diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index a671e5f0e..008600a6d 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -184,3 +184,6 @@ void psStart(); void psFinish(); void psUpdateOverlayed(QWidget *widget); +inline QString psConvertFileUrl(const QString &url) { + return url; +} diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 86d3dd74a..ee3cd7de5 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -979,3 +979,7 @@ void psSendToMenu(bool send, bool silent) { void psUpdateOverlayed(QWidget *widget) { } + +QString psConvertFileUrl(const QString &url) { + return objc_convertFileUrl(url); +} diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 303b79d99..c7fc85a14 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -200,3 +200,4 @@ void psStart(); void psFinish(); void psUpdateOverlayed(QWidget *widget); +QString psConvertFileUrl(const QString &url); diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 26897dbae..033e0f049 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -68,3 +68,4 @@ void objc_deleteDir(const QString &dir); QString objc_appDataPath(); QString objc_currentCountry(); QString objc_currentLang(); +QString objc_convertFileUrl(const QString &url); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index cfe6f015b..0eab142bc 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -692,3 +692,12 @@ QString objc_currentLang() { NSString *currentLang = [currentLocale objectForKey:NSLocaleLanguageCode]; return currentLang ? QString::fromUtf8([currentLang cStringUsingEncoding:NSUTF8StringEncoding]) : QString(); } + +QString objc_convertFileUrl(const QString &url) { + NSString *nsurl = [[[NSURL URLWithString: [NSString stringWithUTF8String: (qsl("file://") + url).toUtf8().constData()]] filePathURL] absoluteString]; + if (!nsurl) return QString(); + + QString result = QString::fromUtf8([nsurl cStringUsingEncoding:NSUTF8StringEncoding]); + return result.startsWith(qsl("file://")) ? result.mid(7) : result; +} + diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index df075f433..2e1f5be09 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -194,3 +194,6 @@ void psStart(); void psFinish(); void psUpdateOverlayed(TWidget *widget); +inline QString psConvertFileUrl(const QString &url) { + return url; +} diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 1e6bc6a0e..ebfa61b2b 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -787,7 +787,7 @@ void Window::setupTrayIcon() { } void Window::updateTrayMenu(bool force) { - if (!trayIconMenu || cPlatform() == dbipWindows && !force) return; + if (!trayIconMenu || (cPlatform() == dbipWindows && !force)) return; bool active = psIsActive(); QAction *first = trayIconMenu->actions().at(0); @@ -869,7 +869,7 @@ void Window::showFromTray(QSystemTrayIcon::ActivationReason reason) { } void Window::toggleTray(QSystemTrayIcon::ActivationReason reason) { - if (trayIconMenu && cPlatform() == dbipMac) return; + if (cPlatform() == dbipMac && psIsActive()) return; if (reason == QSystemTrayIcon::Context) { updateTrayMenu(true); QTimer::singleShot(1, this, SLOT(psShowTrayMenu()));