rendered paste bodyIndex: 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)