X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fstatusnotifieritemdbus.cpp;h=cd4c4cf9d5ddb41c0ee0290db55d2e178dbc6c42;hp=893b24dd7a9023082ab908cd2f2a5907ea7a3f22;hb=f9efdde7f3a6004af8f834c409cfa6ae1d877692;hpb=0ec85b3e2ce83908af510a25d40eb2b9a0f0ffed diff --git a/src/qtui/statusnotifieritemdbus.cpp b/src/qtui/statusnotifieritemdbus.cpp index 893b24dd..cd4c4cf9 100644 --- a/src/qtui/statusnotifieritemdbus.cpp +++ b/src/qtui/statusnotifieritemdbus.cpp @@ -16,7 +16,7 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "mainwin.h" @@ -24,17 +24,11 @@ #include "statusnotifieritemdbus.h" #include "statusnotifieritem.h" +#include #include -#include #include -#include #include -#include - -#ifdef HAVE_KDE -# include -# include -#endif +#include #include "statusnotifierwatcher.h" #include "statusnotifieritemadaptor.h" @@ -42,14 +36,16 @@ #ifdef Q_OS_WIN64 __inline int toInt(WId wid) { - return (int)((__int64)wid); + return (int)((__int64)wid); } #else __inline int toInt(WId wid) { - return (int)wid; + return (int)wid; } + + #endif // Marshall the ImageStruct data into a D-BUS argument @@ -63,6 +59,7 @@ const QDBusArgument &operator<<(QDBusArgument &argument, const DBusImageStruct & return argument; } + // Retrieve the ImageStruct data from the D-BUS argument const QDBusArgument &operator>>(const QDBusArgument &argument, DBusImageStruct &icon) { @@ -88,31 +85,32 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, DBusImageStruct & const QDBusArgument &operator<<(QDBusArgument &argument, const DBusImageVector &iconVector) { argument.beginArray(qMetaTypeId()); - for (int i=0; i>(const QDBusArgument &argument, DBusImageVector &iconVector) { argument.beginArray(); iconVector.clear(); - while ( !argument.atEnd() ) { - DBusImageStruct element; - argument >> element; - iconVector.append(element); + while (!argument.atEnd()) { + DBusImageStruct element; + argument >> element; + iconVector.append(element); } argument.endArray(); - return argument; } + // Marshall the ToolTipStruct data into a D-BUS argument const QDBusArgument &operator<<(QDBusArgument &argument, const DBusToolTipStruct &toolTip) { @@ -125,6 +123,7 @@ const QDBusArgument &operator<<(QDBusArgument &argument, const DBusToolTipStruct return argument; } + // Retrieve the ToolTipStruct data from the D-BUS argument const QDBusArgument &operator>>(const QDBusArgument &argument, DBusToolTipStruct &toolTip) { @@ -152,52 +151,50 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, DBusToolTipStruct int StatusNotifierItemDBus::s_serviceCount = 0; StatusNotifierItemDBus::StatusNotifierItemDBus(StatusNotifierItem *parent) - : QObject(parent), + : QObject(parent), m_statusNotifierItem(parent), - m_service(QString("org.kde.StatusNotifierItem-%1-%2") - .arg(QCoreApplication::applicationPid()) - .arg(++s_serviceCount)), - m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, m_service)) + m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, + QString("org.kde.StatusNotifierItem-%1-%2").arg(QCoreApplication::applicationPid()).arg(++s_serviceCount))) { - new StatusNotifierItemAdaptor(this); - //qDebug() << "service is" << m_service; - registerService(); + new StatusNotifierItemAdaptor(this); } + StatusNotifierItemDBus::~StatusNotifierItemDBus() { - unregisterService(); + unregisterTrayIcon(); } + QDBusConnection StatusNotifierItemDBus::dbusConnection() const { return m_dbus; } + // FIXME: prevent double registrations, also test this on platforms != KDE // -void StatusNotifierItemDBus::registerService() +void StatusNotifierItemDBus::registerTrayIcon() { - //qDebug() << "registering to" << m_service; - m_dbus.registerService(m_service); m_dbus.registerObject("/StatusNotifierItem", this); } + // FIXME: see above -void StatusNotifierItemDBus::unregisterService() +void StatusNotifierItemDBus::unregisterTrayIcon() { - //qDebug() << "unregistering from" << m_service; - if(m_dbus.isConnected()) { + if (m_dbus.isConnected()) { m_dbus.unregisterObject("/StatusNotifierItem"); - m_dbus.unregisterService(m_service); } } + QString StatusNotifierItemDBus::service() const { - return m_service; + return m_dbus.baseService(); } + //DBUS slots //Values and calls have been adapted to Quassel @@ -206,21 +203,25 @@ QString StatusNotifierItemDBus::Category() const return QString("Communications"); // no need to make this configurable for Quassel } + QString StatusNotifierItemDBus::Title() const { return m_statusNotifierItem->title(); } + QString StatusNotifierItemDBus::Id() const { return QString("QuasselIRC"); } + QString StatusNotifierItemDBus::Status() const { return m_statusNotifierItem->metaObject()->enumerator(m_statusNotifierItem->metaObject()->indexOfEnumerator("State")).valueToKey(m_statusNotifierItem->state()); } + int StatusNotifierItemDBus::WindowId() const { return toInt(QtUi::mainWindow()->winId()); @@ -235,21 +236,25 @@ QString StatusNotifierItemDBus::IconName() const return m_statusNotifierItem->iconName(); } + DBusImageVector StatusNotifierItemDBus::IconPixmap() const { return DBusImageVector(); } + QString StatusNotifierItemDBus::OverlayIconName() const { return QString(); } + DBusImageVector StatusNotifierItemDBus::OverlayIconPixmap() const { return DBusImageVector(); } + //Requesting attention icon and movie QString StatusNotifierItemDBus::AttentionIconName() const @@ -257,11 +262,13 @@ QString StatusNotifierItemDBus::AttentionIconName() const return m_statusNotifierItem->attentionIconName(); } + DBusImageVector StatusNotifierItemDBus::AttentionIconPixmap() const { return DBusImageVector(); } + QString StatusNotifierItemDBus::AttentionMovieName() const { return QString(); @@ -281,11 +288,13 @@ DBusToolTipStruct StatusNotifierItemDBus::ToolTip() const return toolTip; } + QString StatusNotifierItemDBus::IconThemePath() const { return m_statusNotifierItem->iconThemePath(); } + //Menu QDBusObjectPath StatusNotifierItemDBus::Menu() const @@ -304,25 +313,20 @@ void StatusNotifierItemDBus::ContextMenu(int x, int y) //TODO: nicer placement, possible? if (!m_statusNotifierItem->trayMenu()->isVisible()) { -#ifdef HAVE_KDE - m_statusNotifierItem->trayMenu()->setWindowFlags(Qt::Window|Qt::FramelessWindowHint); -#endif - m_statusNotifierItem->trayMenu()->popup(QPoint(x,y)); -#ifdef HAVE_KDE - KWindowSystem::setState(m_statusNotifierItem->trayMenu()->winId(), NET::SkipTaskbar|NET::SkipPager|NET::KeepAbove); - KWindowSystem::setType(m_statusNotifierItem->trayMenu()->winId(), NET::PopupMenu); - KWindowSystem::forceActiveWindow(m_statusNotifierItem->trayMenu()->winId()); -#endif - } else { + m_statusNotifierItem->trayMenu()->popup(QPoint(x, y)); + } + else { m_statusNotifierItem->trayMenu()->hide(); } } + void StatusNotifierItemDBus::Activate(int x, int y) { - m_statusNotifierItem->activated(QPoint(x,y)); + m_statusNotifierItem->activated(QPoint(x, y)); } + void StatusNotifierItemDBus::SecondaryActivate(int x, int y) { Q_UNUSED(x) @@ -330,6 +334,7 @@ void StatusNotifierItemDBus::SecondaryActivate(int x, int y) // emit m_statusNotifierItem->secondaryActivateRequested(QPoint(x,y)); } + void StatusNotifierItemDBus::Scroll(int delta, const QString &orientation) { Q_UNUSED(delta)