X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fstatusnotifieritemdbus.cpp;h=2d5e2d2155d0c059e7ceac963870231a0a6e00fc;hp=5e67e698a3ae86a71acdef7ebb74d6da06a8f0af;hb=f04db2cb802b1296ca739c823495930c71d3b4ab;hpb=55362eeaa19678bd8ba36ecce134d98cc0d7eccd diff --git a/src/qtui/statusnotifieritemdbus.cpp b/src/qtui/statusnotifieritemdbus.cpp index 5e67e698..2d5e2d21 100644 --- a/src/qtui/statusnotifieritemdbus.cpp +++ b/src/qtui/statusnotifieritemdbus.cpp @@ -4,9 +4,9 @@ * Quasselfied 2010 by Manuel Nickschas * * * * This file is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * + * it under the terms of the GNU Library General Public License (LGPL) * + * as published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * @@ -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" @@ -39,6 +39,22 @@ #include "statusnotifierwatcher.h" #include "statusnotifieritemadaptor.h" +#ifdef Q_OS_WIN64 +__inline int toInt(WId wid) +{ + return (int)((__int64)wid); +} + + +#else +__inline int toInt(WId wid) +{ + return (int)wid; +} + + +#endif + // Marshall the ImageStruct data into a D-BUS argument const QDBusArgument &operator<<(QDBusArgument &argument, const DBusImageStruct &icon) { @@ -50,6 +66,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) { @@ -75,31 +92,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) { @@ -112,6 +130,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) { @@ -139,46 +158,58 @@ 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)), + .arg(QCoreApplication::applicationPid()) + .arg(++s_serviceCount)), m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, m_service)) { - new StatusNotifierItemAdaptor(this); - //qDebug() << "service is" << m_service; - registerService(); - m_dbus.registerObject("/StatusNotifierItem", this); + new StatusNotifierItemAdaptor(this); + //qDebug() << "service is" << m_service; + registerService(); } + StatusNotifierItemDBus::~StatusNotifierItemDBus() { unregisterService(); } + +QDBusConnection StatusNotifierItemDBus::dbusConnection() const +{ + return m_dbus; +} + + // FIXME: prevent double registrations, also test this on platforms != KDE // void StatusNotifierItemDBus::registerService() { //qDebug() << "registering to" << m_service; m_dbus.registerService(m_service); + m_dbus.registerObject("/StatusNotifierItem", this); } + // FIXME: see above void StatusNotifierItemDBus::unregisterService() { //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; } + //DBUS slots //Values and calls have been adapted to Quassel @@ -187,24 +218,28 @@ 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 (int)QtUi::mainWindow()->winId(); + return toInt(QtUi::mainWindow()->winId()); } @@ -216,21 +251,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 @@ -238,11 +277,13 @@ QString StatusNotifierItemDBus::AttentionIconName() const return m_statusNotifierItem->attentionIconName(); } + DBusImageVector StatusNotifierItemDBus::AttentionIconPixmap() const { return DBusImageVector(); } + QString StatusNotifierItemDBus::AttentionMovieName() const { return QString(); @@ -262,6 +303,21 @@ DBusToolTipStruct StatusNotifierItemDBus::ToolTip() const return toolTip; } + +QString StatusNotifierItemDBus::IconThemePath() const +{ + return m_statusNotifierItem->iconThemePath(); +} + + +//Menu + +QDBusObjectPath StatusNotifierItemDBus::Menu() const +{ + return QDBusObjectPath(m_statusNotifierItem->menuObjectPath()); +} + + //Interaction void StatusNotifierItemDBus::ContextMenu(int x, int y) @@ -275,22 +331,25 @@ void StatusNotifierItemDBus::ContextMenu(int x, int y) #ifdef HAVE_KDE m_statusNotifierItem->trayMenu()->setWindowFlags(Qt::Window|Qt::FramelessWindowHint); #endif - m_statusNotifierItem->trayMenu()->popup(QPoint(x,y)); + 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 { + } + 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) @@ -298,6 +357,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)