All pastes #1491386 Raw Edit

Mine

public text v1 · immutable
#1491386 ·published 2009-07-11 01:27 UTC
rendered paste body
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 <QPixmap>
 
+#include <config-konversation.h>
+
+#ifdef HAVE_KNOTIFYITEM
+#include <knotificationitem-1/knotificationitem.h>
+using namespace Experimental;
+#else
 #include <ksystemtrayicon.h>
+#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<KMenu*>(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)