From e3a9bd7b2689930333f89207986c38de7e1703f5 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Sun, 26 Dec 2010 13:38:35 +0000 Subject: [PATCH] Make DBUS bits optional on Linux. Thanks Nickollai. Fixes issue #1177 --- CMakeLists.txt | 19 ++++++++++++++----- src/CMakeLists.txt | 24 ++++++++++++++---------- src/core/player.cpp | 4 ++-- src/core/player.h | 2 +- src/devices/devicemanager.cpp | 2 +- src/ui/screensaver.cpp | 4 ++-- src/widgets/osd.cpp | 4 ++-- src/widgets/osd.h | 4 ++-- src/widgets/osd_x11.cpp | 19 +++++++++++++++++-- 9 files changed, 55 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cfafdedbf..79e6b8796 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,18 @@ include(cmake/Rpm.cmake) find_package(Qt4 4.5.0 REQUIRED QtCore QtGui QtOpenGL QtSql QtNetwork QtXml) if(UNIX AND NOT APPLE) - find_package(Qt4 REQUIRED QtDbus) + option(ENABLE_DBUS "Enable D-Bus, MPRIS and native notifications. Required for DeviceKit and Wii remote support" ON) + if(ENABLE_DBUS) + find_package(Qt4 REQUIRED QtDbus) + set(HAVE_DBUS ON) + + option(ENABLE_DEVICEKIT "DeviceKit backend" ON) + if(ENABLE_DEVICEKIT) + set(HAVE_DEVICEKIT ON) + endif(ENABLE_DEVICEKIT) + + option(ENABLE_WIIMOTEDEV "Enable Wii remote support in Clementine" ON) + endif(ENABLE_DBUS) endif(UNIX AND NOT APPLE) if(NOT APPLE) @@ -127,10 +138,6 @@ option(BUNDLE_PROJECTM_PRESETS "Install Clementine's own copies of libprojectm p option(ENABLE_SOUNDMENU "Add Clementine to the Gnome sound menu" ON) option(ENABLE_LIBLASTFM "Use liblastfm for fetching song info, scrobbling and radio streams" ON) -if(NOT APPLE AND NOT WIN32) - option(ENABLE_WIIMOTEDEV "Enable Wii remote support in Clementine" ON) -endif(NOT APPLE AND NOT WIN32) - if(ENABLE_LIBGPOD AND LIBGPOD_FOUND) set(HAVE_LIBGPOD ON) endif(ENABLE_LIBGPOD AND LIBGPOD_FOUND) @@ -260,10 +267,12 @@ add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") # Show a summary of what we have enabled +summary_add("devices: DeviceKit backend" HAVE_DEVICEKIT) summary_add("devices: iPod classic support" HAVE_LIBGPOD) summary_add("devices: iPod Touch, iPhone, iPad support" HAVE_IMOBILEDEVICE) summary_add("devices: MTP support" HAVE_LIBMTP) summary_add("devices: GIO backend" HAVE_GIO) +summary_add("D-Bus support" HAVE_DBUS) summary_add("Gnome sound menu integration" HAVE_LIBINDICATE) summary_add("Wiimote support" ENABLE_WIIMOTEDEV) summary_add("Visualisations" ENABLE_VISUALISATIONS) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 94f80d6af..0ff33e7c9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -534,7 +534,7 @@ else(APPLE) endif(APPLE) # DBUS and MPRIS - Linux specific -if(NOT APPLE AND NOT WIN32) +if(HAVE_DBUS) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dbus) # Hack to get it to generate interfaces without namespaces - required @@ -570,12 +570,14 @@ if(NOT APPLE AND NOT WIN32) dbus/notification) # DeviceKit DBUS interfaces - qt4_add_dbus_interface(SOURCES - dbus/org.freedesktop.UDisks.xml - dbus/udisks) - qt4_add_dbus_interface(SOURCES - dbus/org.freedesktop.UDisks.Device.xml - dbus/udisksdevice) + if(HAVE_DEVICEKIT) + qt4_add_dbus_interface(SOURCES + dbus/org.freedesktop.UDisks.xml + dbus/udisks) + qt4_add_dbus_interface(SOURCES + dbus/org.freedesktop.UDisks.Device.xml + dbus/udisksdevice) + endif(HAVE_DEVICEKIT) # MPRIS source list(APPEND SOURCES core/mpris.cpp core/mpris2.cpp) @@ -599,12 +601,14 @@ if(NOT APPLE AND NOT WIN32) endif(ENABLE_WIIMOTEDEV) # DeviceKit lister source - list(APPEND SOURCES devices/devicekitlister.cpp) - list(APPEND HEADERS devices/devicekitlister.h) + if(HAVE_DEVICEKIT) + list(APPEND SOURCES devices/devicekitlister.cpp) + list(APPEND HEADERS devices/devicekitlister.h) + endif(HAVE_DEVICEKIT) # Gnome Screensaver DBus interface list(APPEND SOURCES ui/dbusscreensaver.cpp) -endif(NOT APPLE AND NOT WIN32) +endif(HAVE_DBUS) # Libgpod device backend if(HAVE_LIBGPOD) diff --git a/src/core/player.cpp b/src/core/player.cpp index 108015b76..d2d73eecb 100644 --- a/src/core/player.cpp +++ b/src/core/player.cpp @@ -29,7 +29,7 @@ # include "radio/lastfmservice.h" #endif -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS # include "mpris.h" # include "mpris2.h" # include @@ -67,7 +67,7 @@ Player::Player(MainWindow* main_window, PlaylistManager* playlists, connect(playlists, SIGNAL(CurrentSongChanged(Song)), art_loader_, SLOT(LoadArt(Song))); -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS // MPRIS DBus interface. qDBusRegisterMetaType(); qDBusRegisterMetaType(); diff --git a/src/core/player.h b/src/core/player.h index 1feee067d..66dfdcbf3 100644 --- a/src/core/player.h +++ b/src/core/player.h @@ -42,7 +42,7 @@ namespace mpris { class ArtLoader; } -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS # include QDBusArgument& operator<< (QDBusArgument& arg, const QImage& image); const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image); diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp index a4fe94a0a..cc12c2192 100644 --- a/src/devices/devicemanager.cpp +++ b/src/devices/devicemanager.cpp @@ -182,7 +182,7 @@ DeviceManager::DeviceManager(BackgroundThread* database, connected_devices_model_ = new DeviceStateFilterModel(this); connected_devices_model_->setSourceModel(this); -#ifdef Q_WS_X11 +#ifdef HAVE_DEVICEKIT AddLister(new DeviceKitLister); #endif #ifdef HAVE_GIO diff --git a/src/ui/screensaver.cpp b/src/ui/screensaver.cpp index a8353b17d..b548ce13a 100644 --- a/src/ui/screensaver.cpp +++ b/src/ui/screensaver.cpp @@ -19,7 +19,7 @@ #include -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS #include "dbusscreensaver.h" #include #include @@ -42,7 +42,7 @@ Screensaver* Screensaver::screensaver_ = 0; Screensaver* Screensaver::GetScreensaver() { if (!screensaver_) { - #if defined(Q_WS_X11) + #if defined(HAVE_DBUS) if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kGnomeService)) { screensaver_ = new DBusScreensaver(kGnomeService, kGnomePath, kGnomeInterface); } else if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kKdeService)) { diff --git a/src/widgets/osd.cpp b/src/widgets/osd.cpp index 29dc2ffec..f38379f8a 100644 --- a/src/widgets/osd.cpp +++ b/src/widgets/osd.cpp @@ -19,7 +19,7 @@ #include "osdpretty.h" #include "ui/systemtrayicon.h" -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS # include "dbus/notification.h" #endif @@ -193,7 +193,7 @@ void OSD::ShowMessage(const QString& summary, } } -#ifndef Q_WS_X11 +#ifndef HAVE_DBUS void OSD::CallFinished(QDBusPendingCallWatcher*) {} #endif diff --git a/src/widgets/osd.h b/src/widgets/osd.h index 7e25d1a79..e899c639f 100644 --- a/src/widgets/osd.h +++ b/src/widgets/osd.h @@ -33,7 +33,7 @@ class SystemTrayIcon; class QDBusPendingCallWatcher; -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS # include # include @@ -127,7 +127,7 @@ class OSD : public QObject { GrowlNotificationWrapper* wrapper_; #endif // Q_OS_DARWIN -#ifdef Q_WS_X11 +#ifdef HAVE_DBUS boost::scoped_ptr interface_; uint notification_id_; QDateTime last_notification_time_; diff --git a/src/widgets/osd_x11.cpp b/src/widgets/osd_x11.cpp index b87e0ad90..6ea482b40 100644 --- a/src/widgets/osd_x11.cpp +++ b/src/widgets/osd_x11.cpp @@ -16,10 +16,12 @@ */ #include "osd.h" -#include "dbus/notification.h" -#include #include + +#ifdef HAVE_DBUS +#include "dbus/notification.h" +#include #include using boost::scoped_ptr; @@ -52,8 +54,10 @@ const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image) { Q_ASSERT(0); return arg; } +#endif // HAVE_DBUS void OSD::Init() { +#ifdef HAVE_DBUS interface_.reset(new OrgFreedesktopNotificationsInterface( OrgFreedesktopNotificationsInterface::staticInterfaceName(), "/org/freedesktop/Notifications", @@ -63,10 +67,15 @@ void OSD::Init() { } notification_id_ = 0; +#endif // HAVE_DBUS } bool OSD::SupportsNativeNotifications() { +#ifdef HAVE_DBUS return true; +#else + return false; +#endif } bool OSD::SupportsTrayPopups() { @@ -75,6 +84,7 @@ bool OSD::SupportsTrayPopups() { void OSD::ShowMessageNative(const QString& summary, const QString& message, const QString& icon, const QImage& image) { +#ifdef HAVE_DBUS QVariantMap hints; if (!image.isNull()) { hints["image_data"] = QVariant(image); @@ -101,8 +111,12 @@ void OSD::ShowMessageNative(const QString& summary, const QString& message, QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(CallFinished(QDBusPendingCallWatcher*))); +#else // HAVE_DBUS + qWarning() << __PRETTY_FUNCTION__ << ": NOT IMPLEMENTED"; +#endif // HAVE_DBUS } +#ifdef HAVE_DBUS void OSD::CallFinished(QDBusPendingCallWatcher* watcher) { scoped_ptr w(watcher); @@ -118,3 +132,4 @@ void OSD::CallFinished(QDBusPendingCallWatcher* watcher) { last_notification_time_ = QDateTime::currentDateTime(); } } +#endif