X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fqtui%2Fstatusnotifieritemdbus.cpp;h=e359c45d04e36cd94dbe2133a38681ffb599550f;hb=5d9af8ed007d38faf3995ea18174249121f246fe;hp=db93d5c2ab8e2d461f74231b8038d21c4982ecdc;hpb=b858144c9d38623bdd9afaa02c404d9515243ab7;p=quassel.git diff --git a/src/qtui/statusnotifieritemdbus.cpp b/src/qtui/statusnotifieritemdbus.cpp index db93d5c2..e359c45d 100644 --- a/src/qtui/statusnotifieritemdbus.cpp +++ b/src/qtui/statusnotifieritemdbus.cpp @@ -19,9 +19,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "mainwin.h" +#include "qtui.h" #include "statusnotifieritemdbus.h" #include "statusnotifieritem.h" -#include "qtui.h" #include #include @@ -38,6 +39,19 @@ #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) { @@ -146,14 +160,36 @@ StatusNotifierItemDBus::StatusNotifierItemDBus(StatusNotifierItem *parent) m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, m_service)) { new StatusNotifierItemAdaptor(this); - qDebug() << "service is" << m_service; - m_dbus.registerService(m_service); + //qDebug() << "service is" << m_service; + registerService(); m_dbus.registerObject("/StatusNotifierItem", this); } StatusNotifierItemDBus::~StatusNotifierItemDBus() { - m_dbus.unregisterService(m_service); + 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); +} + +// FIXME: see above +void StatusNotifierItemDBus::unregisterService() +{ + //qDebug() << "unregistering from" << m_service; + if(m_dbus.isConnected()) { + m_dbus.unregisterService(m_service); + } } QString StatusNotifierItemDBus::service() const @@ -180,13 +216,13 @@ QString StatusNotifierItemDBus::Id() const } 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()); } @@ -244,6 +280,19 @@ 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) @@ -254,7 +303,9 @@ 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);