Show now playing in the dock menu somewhat like iTunes.
This commit is contained in:
parent
977dd916b0
commit
effa826abb
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ar\n"
|
||||||
"X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n"
|
"X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: bg\n"
|
||||||
"X-Launchpad-Export-Date: 2010-07-25 04:25+0000\n"
|
"X-Launchpad-Export-Date: 2010-07-25 04:25+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Language: bg\n"
|
"Language: bg\n"
|
||||||
|
@ -15,6 +15,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: da\n"
|
||||||
"X-Launchpad-Export-Date: 2010-07-25 04:25+0000\n"
|
"X-Launchpad-Export-Date: 2010-07-25 04:25+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: \n"
|
||||||
"X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n"
|
"X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: \n"
|
||||||
"X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n"
|
"X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: gl\n"
|
||||||
"X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n"
|
"X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: kk\n"
|
||||||
"X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n"
|
"X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt\n"
|
||||||
"X-Launchpad-Export-Date: 2010-07-25 04:26+0000\n"
|
"X-Launchpad-Export-Date: 2010-07-25 04:26+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Language: lt\n"
|
"Language: lt\n"
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: \n"
|
||||||
"X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n"
|
"X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ro\n"
|
||||||
"X-Launchpad-Export-Date: 2010-05-04 03:52+0000\n"
|
"X-Launchpad-Export-Date: 2010-05-04 03:52+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: sr\n"
|
||||||
"X-Launchpad-Export-Date: 2010-07-25 04:26+0000\n"
|
"X-Launchpad-Export-Date: 2010-07-25 04:26+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Language: sr\n"
|
"Language: sr\n"
|
||||||
|
@ -1198,6 +1198,9 @@ msgstr ""
|
|||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Now Playing"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "OSD Preview"
|
msgid "OSD Preview"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: \n"
|
||||||
"X-Launchpad-Export-Date: 2010-06-08 03:51+0000\n"
|
"X-Launchpad-Export-Date: 2010-06-08 03:51+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
|
@ -35,6 +35,9 @@ public:
|
|||||||
QAction* stop_after, QAction* next, QAction* love,
|
QAction* stop_after, QAction* next, QAction* love,
|
||||||
QAction* ban, QAction* quit);
|
QAction* ban, QAction* quit);
|
||||||
|
|
||||||
|
void SetNowPlaying(const Song& song);
|
||||||
|
void ClearNowPlaying();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetupMenuItem(QAction* action);
|
void SetupMenuItem(QAction* action);
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include "macsystemtrayicon.h"
|
#include "macsystemtrayicon.h"
|
||||||
|
|
||||||
|
#include "core/song.h"
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
@ -57,9 +59,32 @@ class MacSystemTrayIconPrivate : boost::noncopyable {
|
|||||||
MacSystemTrayIconPrivate() {
|
MacSystemTrayIconPrivate() {
|
||||||
dock_menu_ = [[NSMenu alloc] initWithTitle:@"DockMenu"];
|
dock_menu_ = [[NSMenu alloc] initWithTitle:@"DockMenu"];
|
||||||
|
|
||||||
|
QString title = QT_TR_NOOP("Now Playing");
|
||||||
|
NSString* t = [[NSString alloc] initWithUTF8String:title.toUtf8().constData()];
|
||||||
|
now_playing_ = [[NSMenuItem alloc]
|
||||||
|
initWithTitle:t
|
||||||
|
action:NULL
|
||||||
|
keyEquivalent:@""];
|
||||||
|
|
||||||
|
now_playing_artist_ = [[NSMenuItem alloc]
|
||||||
|
initWithTitle:@"Nothing to see here"
|
||||||
|
action:NULL
|
||||||
|
keyEquivalent:@""];
|
||||||
|
|
||||||
|
now_playing_title_ = [[NSMenuItem alloc]
|
||||||
|
initWithTitle:@"Nothing to see here"
|
||||||
|
action:NULL
|
||||||
|
keyEquivalent:@""];
|
||||||
|
|
||||||
|
[dock_menu_ insertItem:now_playing_title_ atIndex:0];
|
||||||
|
[dock_menu_ insertItem:now_playing_artist_ atIndex:0];
|
||||||
|
[dock_menu_ insertItem:now_playing_ atIndex:0];
|
||||||
|
|
||||||
// Don't look now.
|
// Don't look now.
|
||||||
// This must be called after our custom NSApplicationDelegate has been set.
|
// This must be called after our custom NSApplicationDelegate has been set.
|
||||||
[[NSApp delegate] setDockMenu:dock_menu_];
|
[[NSApp delegate] setDockMenu:dock_menu_];
|
||||||
|
|
||||||
|
ClearNowPlaying();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddMenuItem(QAction* action) {
|
void AddMenuItem(QAction* action) {
|
||||||
@ -89,10 +114,43 @@ class MacSystemTrayIconPrivate : boost::noncopyable {
|
|||||||
[dock_menu_ addItem:separator];
|
[dock_menu_ addItem:separator];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShowNowPlaying(const QString& artist, const QString& title) {
|
||||||
|
ClearNowPlaying(); // Makes sure the order is consistent.
|
||||||
|
[now_playing_artist_ setTitle:
|
||||||
|
[[NSString alloc] initWithUTF8String: artist.toUtf8().constData()]];
|
||||||
|
[now_playing_title_ setTitle:
|
||||||
|
[[NSString alloc] initWithUTF8String: title.toUtf8().constData()]];
|
||||||
|
title.isEmpty() ? HideItem(now_playing_title_) : ShowItem(now_playing_title_);
|
||||||
|
artist.isEmpty() ? HideItem(now_playing_artist_) : ShowItem(now_playing_artist_);
|
||||||
|
artist.isEmpty() && title.isEmpty() ? HideItem(now_playing_) : ShowItem(now_playing_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearNowPlaying() {
|
||||||
|
// Hiding doesn't seem to work in the dock menu.
|
||||||
|
HideItem(now_playing_);
|
||||||
|
HideItem(now_playing_artist_);
|
||||||
|
HideItem(now_playing_title_);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void HideItem(NSMenuItem* item) {
|
||||||
|
if ([dock_menu_ indexOfItem:item] != -1) {
|
||||||
|
[dock_menu_ removeItem:item];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowItem(NSMenuItem* item, int index = 0) {
|
||||||
|
if ([dock_menu_ indexOfItem:item] == -1) {
|
||||||
|
[dock_menu_ insertItem:item atIndex:index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QMap<QAction*, NSMenuItem*> actions_;
|
QMap<QAction*, NSMenuItem*> actions_;
|
||||||
|
|
||||||
NSMenu* dock_menu_;
|
NSMenu* dock_menu_;
|
||||||
|
NSMenuItem* now_playing_;
|
||||||
|
NSMenuItem* now_playing_artist_;
|
||||||
|
NSMenuItem* now_playing_title_;
|
||||||
};
|
};
|
||||||
|
|
||||||
MacSystemTrayIcon::MacSystemTrayIcon(QObject* parent)
|
MacSystemTrayIcon::MacSystemTrayIcon(QObject* parent)
|
||||||
@ -135,3 +193,11 @@ void MacSystemTrayIcon::ActionChanged() {
|
|||||||
QAction* action = qobject_cast<QAction*>(sender());
|
QAction* action = qobject_cast<QAction*>(sender());
|
||||||
p_->ActionChanged(action);
|
p_->ActionChanged(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacSystemTrayIcon::ClearNowPlaying() {
|
||||||
|
p_->ClearNowPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MacSystemTrayIcon::SetNowPlaying(const Song& song) {
|
||||||
|
p_->ShowNowPlaying(song.artist(), song.PrettyTitle());
|
||||||
|
}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
|
|
||||||
class QAction;
|
class QAction;
|
||||||
|
class Song;
|
||||||
|
|
||||||
class SystemTrayIcon : public QObject {
|
class SystemTrayIcon : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -39,6 +40,8 @@ class SystemTrayIcon : public QObject {
|
|||||||
// Called by the OSD
|
// Called by the OSD
|
||||||
virtual void ShowPopup(const QString& summary, const QString& message,
|
virtual void ShowPopup(const QString& summary, const QString& message,
|
||||||
int timeout) {}
|
int timeout) {}
|
||||||
|
virtual void SetNowPlaying(const Song& song) {}
|
||||||
|
virtual void ClearNowPlaying() {}
|
||||||
|
|
||||||
static SystemTrayIcon* CreateSystemTrayIcon(QObject* parent = 0);
|
static SystemTrayIcon* CreateSystemTrayIcon(QObject* parent = 0);
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ void OSD::ReloadSettings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OSD::SongChanged(const Song &song) {
|
void OSD::SongChanged(const Song &song) {
|
||||||
|
tray_icon_->SetNowPlaying(song);
|
||||||
QString summary(song.PrettyTitle());
|
QString summary(song.PrettyTitle());
|
||||||
if (!song.artist().isEmpty())
|
if (!song.artist().isEmpty())
|
||||||
summary = QString("%1 - %2").arg(song.artist(), summary);
|
summary = QString("%1 - %2").arg(song.artist(), summary);
|
||||||
@ -120,6 +121,7 @@ void OSD::Paused() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OSD::Stopped() {
|
void OSD::Stopped() {
|
||||||
|
tray_icon_->ClearNowPlaying();
|
||||||
if (ignore_next_stopped_) {
|
if (ignore_next_stopped_) {
|
||||||
ignore_next_stopped_ = false;
|
ignore_next_stopped_ = false;
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user