fixed custom context menu for os x, fixed file drag-n-drop in os x 10.10

This commit is contained in:
John Preston 2014-09-30 07:13:47 -07:00
parent 0d85f91453
commit 1fd25e8778
9 changed files with 32 additions and 2 deletions

View File

@ -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());
}

View File

@ -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) {

View File

@ -184,3 +184,6 @@ void psStart();
void psFinish();
void psUpdateOverlayed(QWidget *widget);
inline QString psConvertFileUrl(const QString &url) {
return url;
}

View File

@ -979,3 +979,7 @@ void psSendToMenu(bool send, bool silent) {
void psUpdateOverlayed(QWidget *widget) {
}
QString psConvertFileUrl(const QString &url) {
return objc_convertFileUrl(url);
}

View File

@ -200,3 +200,4 @@ void psStart();
void psFinish();
void psUpdateOverlayed(QWidget *widget);
QString psConvertFileUrl(const QString &url);

View File

@ -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);

View File

@ -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;
}

View File

@ -194,3 +194,6 @@ void psStart();
void psFinish();
void psUpdateOverlayed(TWidget *widget);
inline QString psConvertFileUrl(const QString &url) {
return url;
}

View File

@ -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()));