Index: konversation/cmake/modules/FindLibKNotificationItem-1.cmake =================================================================== --- konversation/cmake/modules/FindLibKNotificationItem-1.cmake (revision 0) +++ konversation/cmake/modules/FindLibKNotificationItem-1.cmake (revision 0) @@ -0,0 +1,40 @@ +# - Find libkonitification-1 +# Find the libkonitification-1 +# +# This module defines +# LIBKNOTIFICATIONITEM-1_FOUND - whether the libkonitification-1 library was found +# KNOTIFICATIONITEM_LIBRARIES - the libkonitification-1 library +# KNOTIFICATIONITEM_INCLUDE_DIR - the include path of the libkonitification-1 library +# + +if (KNOTIFICATIONITEM_INCLUDE_DIR AND KNOTIFICATIONITEM_LIBRARIES) + + # Already in cache + set (LIBKNOTIFICATIONITEM-1_FOUND TRUE) + +else (KNOTIFICATIONITEM_INCLUDE_DIR AND KNOTIFICATIONITEM_LIBRARIES) + + find_library (KNOTIFICATIONITEM_LIBRARIES + NAMES + knotificationitem-1 + PATHS + ${LIB_INSTALL_DIR} + ${KDE4_LIB_DIR} + ) + + find_path (KNOTIFICATIONITEM_INCLUDE_DIR + NAMES + knotificationitem.h + PATH_SUFFIXES + knotificationitem-1 + PATHS + ${INCLUDE_INSTALL_DIR} + ${KDE4_INCLUDE_DIR} + ) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(LibKNotificationItem-1 DEFAULT_MSG KNOTIFICATIONITEM_LIBRARIES KNOTIFICATIONITEM_INCLUDE_DIR) + +endif (KNOTIFICATIONITEM_INCLUDE_DIR AND KNOTIFICATIONITEM_LIBRARIES) + +mark_as_advanced(KNOTIFICATIONITEM_INCLUDE_DIR KNOTIFICATIONITEM_LIBRARIES) \ No newline at end of file Index: konversation/src/viewer/trayicon.h =================================================================== --- konversation/src/viewer/trayicon.h (revision 989777) +++ konversation/src/viewer/trayicon.h (working copy) @@ -17,18 +17,44 @@ #include +#include + +#ifdef HAVE_KNOTIFYITEM +#include +using namespace Experimental; +#else #include +#endif - class QTimer; namespace Konversation { + #ifdef HAVE_KNOTIFYITEM + class TrayIcon : public KNotificationItem + { + Q_OBJECT + public: + explicit TrayIcon(QWidget* parent = 0); + ~TrayIcon(); + + bool notificationEnabled() { return m_notificationEnabled; } + + public slots: + void startNotification(); + void endNotification(); + void setNotificationEnabled(bool notify) { m_notificationEnabled = notify; } + void updateAppearance(); + void setVisible(bool visible); + + private: + bool m_notificationEnabled; + }; + #else class TrayIcon : public KSystemTrayIcon { Q_OBJECT - public: explicit TrayIcon(QWidget* parent = 0); ~TrayIcon(); @@ -49,10 +75,9 @@ bool m_blinkOn; bool m_notificationEnabled; - QIcon m_nomessagePix; QIcon m_messagePix; }; - + #endif } #endif Index: konversation/src/viewer/trayicon.cpp =================================================================== --- konversation/src/viewer/trayicon.cpp (revision 989777) +++ konversation/src/viewer/trayicon.cpp (working copy) @@ -27,7 +27,21 @@ namespace Konversation { + #ifdef HAVE_KNOTIFYITEM + TrayIcon::TrayIcon(QWidget* parent) : KNotificationItem(parent) + { + setCategory(Communications); + setStatus(Active); + setIconByName("konversation"); + setAttentionIconByName("konv_message"); + m_notificationEnabled = false; + + updateAppearance(); + + setToolTip("konversation", i18n("Konversation"), i18n("Konversation - IRC Client")); + } + #else TrayIcon::TrayIcon(QWidget* parent) : KSystemTrayIcon(parent) { m_notificationEnabled = false; @@ -38,6 +52,7 @@ setToolTip(i18n("Konversation - IRC Client")); } + #endif TrayIcon::~TrayIcon() { @@ -52,26 +67,40 @@ if(Preferences::self()->trayNotifyBlink()) { + #ifdef HAVE_KNOTIFYITEM + setStatus(NeedsAttention); + #else if(!m_blinkTimer->isActive()) { setIcon(m_messagePix); m_blinkOn = true; m_blinkTimer->start(500); } + #endif } else { + #ifdef HAVE_KNOTIFYITEM + setIconByName("konv_message"); + setStatus(NeedsAttention); + #else setIcon(m_messagePix); m_blinkTimer->stop(); + #endif } } void TrayIcon::endNotification() { + #ifdef HAVE_KNOTIFYITEM + setStatus(Active); + setIconByName("konversation"); + #else m_blinkTimer->stop(); setIcon(m_nomessagePix); + #endif } - + #ifndef HAVE_KNOTIFYITEM void TrayIcon::blinkTimeout() { m_blinkOn = !m_blinkOn; @@ -85,13 +114,30 @@ setIcon(m_nomessagePix); } } - + #endif void TrayIcon::updateAppearance() { + #ifdef HAVE_KNOTIFYITEM + setIconByName("konversation"); + #else m_nomessagePix = loadIcon("konversation"); m_messagePix = loadIcon("konv_message"); setIcon(m_nomessagePix); + #endif } + + #ifdef HAVE_KNOTIFYITEM + void TrayIcon::setVisible(bool visible) + { + if(visible) + { + setStatus(Active); + } + else + { + setStatus(Passive); + } + } + #endif } - #include "trayicon.moc" Index: konversation/src/CMakeLists.txt =================================================================== --- konversation/src/CMakeLists.txt (revision 989777) +++ konversation/src/CMakeLists.txt (working copy) @@ -6,6 +6,10 @@ include_directories(${QCA2_INCLUDE_DIR}) endif (QCA2_FOUND) +if (LIBKNOTIFICATIONITEM-1_FOUND) + include_directories(${KNOTIFICATIONITEM_INCLUDE_DIR}) +endif (LIBKNOTIFICATIONITEM-1_FOUND) + set(core_SRCS #==================================== #=== Application @@ -224,6 +228,10 @@ target_link_libraries(konversation ${QCA2_LIBRARIES}) endif (QCA2_FOUND) +if (LIBKNOTIFICATIONITEM-1_FOUND) + target_link_libraries(konversation ${KNOTIFICATIONITEM_LIBRARIES}) +endif (LIBKNOTIFICATIONITEM-1_FOUND) + CHECK_INCLUDE_FILE( "stropts.h" HAVE_STROPTS_H) IF(HAVE_STROPTS_H) Index: konversation/src/mainwindow.cpp =================================================================== --- konversation/src/mainwindow.cpp (revision 989777) +++ konversation/src/mainwindow.cpp (working copy) @@ -485,7 +485,10 @@ m_trayIcon = new Konversation::TrayIcon(this); connect(this, SIGNAL(endNotification()), m_trayIcon, SLOT(endNotification())); connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)), m_trayIcon, SLOT(updateAppearance())); + //TODO what does this do? maybe we can reimplement it with knotificationitem + #ifndef HAVE_KNOTIFYITEM connect(m_trayIcon, SIGNAL(quitSelected()), this, SLOT(quitProgram())); + #endif KMenu *trayMenu = qobject_cast(m_trayIcon->contextMenu()); trayMenu->addAction(configureNotificationsAction); trayMenu->addAction(preferencesAction); @@ -667,11 +670,14 @@ void MainWindow::updateTrayIcon() { m_trayIcon->setNotificationEnabled(Preferences::self()->trayNotify()); - +#ifdef HAVE_KNOTIFYITEM + m_trayIcon->setVisible(Preferences::self()->showTrayIcon()); +#else if (Preferences::self()->showTrayIcon()) m_trayIcon->show(); else m_trayIcon->hide(); +#endif } void MainWindow::toggleMenubar(bool dontShowWarning) Index: konversation/config-konversation.h.cmake =================================================================== --- konversation/config-konversation.h.cmake (revision 989777) +++ konversation/config-konversation.h.cmake (working copy) @@ -1,4 +1,5 @@ #cmakedefine HAVE_XSCREENSAVER 1 #cmakedefine HAVE_X11 1 #cmakedefine HAVE_XUTIL 1 -#cmakedefine HAVE_QCA2 1 \ No newline at end of file +#cmakedefine HAVE_QCA2 1 +#cmakedefine HAVE_KNOTIFYITEM 1 \ No newline at end of file Index: konversation/CMakeLists.txt =================================================================== --- konversation/CMakeLists.txt (revision 989777) +++ konversation/CMakeLists.txt (working copy) @@ -4,6 +4,7 @@ cmake_minimum_required(VERSION 2.6.0) set(KDE_MIN_VERSION "4.00.82") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) #atm this gets is FindQt4 and FindX11 (provided that the default cmake FindQt4 doesn't get used) find_package(KDE4 REQUIRED) @@ -37,6 +38,10 @@ macro_bool_to_01(QCA2_FOUND HAVE_QCA2) macro_log_feature(QCA2_FOUND "QCA" "Qt Cryptographic Architecture" "http://delta.affinix.com/qca" FALSE "2.0.0" "Required for using encryption in IRC") +macro_optional_find_package(LibKNotificationItem-1) +macro_bool_to_01(LIBKNOTIFICATIONITEM-1_FOUND HAVE_KNOTIFYITEM) +macro_log_feature(LIBKNOTIFICATIONITEM-1_FOUND "LibKNotificationItem-1" "KDE enhanced system tray library" "http://kde.org/" FALSE "" "Needed to build enhanced systray support") + configure_file(config-konversation.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-konversation.h ) add_subdirectory(src)