[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim] /: Make KTimeTracker build on OSX
From: Christophe Giboudeaux <cgiboudeaux () gmx ! com>
Date: 2014-07-31 20:27:57
Message-ID: E1XCwxB-0001xE-CJ () scm ! kde ! org
[Download RAW message or body]
Git commit b7d3171ac39a3dab66d1fea2e1540a82e7d0c5d4 by Christophe Giboudeaux, on \
behalf of René J.V. Bertin. Committed on 31/07/2014 at 20:21.
Pushed by cgiboudeaux into branch 'master'.
Make KTimeTracker build on OSX
On OSX, XScreensaver doesn't exist. This commit makes KTimeTracker use the native \
method from the ApplicationServices framework on this platform.
REVIEW: 119533
M +1 -2 CMakeLists.txt
M +18 -6 ktimetracker/CMakeLists.txt
M +25 -10 ktimetracker/idletimedetector.cpp
M +5 -4 ktimetracker/idletimedetector.h
M +2 -0 ktimetracker/ktimetrackerutility.cpp
M +8 -0 ktimetracker/mainwindow.cpp
http://commits.kde.org/kdepim/b7d3171ac39a3dab66d1fea2e1540a82e7d0c5d4
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 470eddb..1f8670c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -306,8 +306,7 @@ else()
if(QT_QT3SUPPORT_FOUND)
macro_optional_add_subdirectory(knode)
endif()
-
- if(Q_WS_X11)
+ if(NOT WIN32)
macro_optional_add_subdirectory(ktimetracker)
endif()
diff --git a/ktimetracker/CMakeLists.txt b/ktimetracker/CMakeLists.txt
index bf7b0ef..f61c9c7 100644
--- a/ktimetracker/CMakeLists.txt
+++ b/ktimetracker/CMakeLists.txt
@@ -1,15 +1,18 @@
project(ktimetracker)
+if(NOT Q_WS_MAC)
#We check if X11_Xscreensaver was found
-if(X11_Xscreensaver_FOUND)
- message(STATUS "Found the X11 screensaver extension")
- macro_bool_to_01(X11_Xscreensaver_LIB HAVE_LIBXSS)
+ if(X11_Xscreensaver_FOUND)
+ message(STATUS "Found the X11 screensaver extension")
+ macro_bool_to_01(X11_Xscreensaver_LIB HAVE_LIBXSS)
+ else()
+ message(STATUS "The X11 screensaver extension was NOT found.")
+ endif()
+ add_feature_info("KtimeTracker idle detection" X11_Xscreensaver_FOUND "Measure the \
screen idle time in KTimeTracker") else()
- message(STATUS "The X11 screensaver extension was NOT found.")
+ add_feature_info("KtimeTracker idle detection" Q_WS_MAC "Measure the screen idle \
time in KTimeTracker") endif()
-add_feature_info("KtimeTracker idle detection" X11_Xscreensaver_FOUND "Measure the \
screen idle time in KTimeTracker")
-
configure_file(config-ktimetracker.h.cmake \
${CMAKE_CURRENT_BINARY_DIR}/config-ktimetracker.h )
add_subdirectory( support )
@@ -69,6 +72,9 @@ target_link_libraries(ktimetracker ${KDE4_KCMUTILS_LIBS} \
${KDE4_KPARTS_LIBRARY if(X11_Xscreensaver_LIB)
target_link_libraries(ktimetracker ${X11_Xscreensaver_LIB} )
endif()
+if(Q_WS_MAC)
+ target_link_libraries(ktimetracker "-framework ApplicationServices" )
+endif()
install( TARGETS karm ${INSTALL_TARGETS_DEFAULT_ARGS} )
install( TARGETS ktimetracker ${INSTALL_TARGETS_DEFAULT_ARGS} )
@@ -84,6 +90,9 @@ target_link_libraries(kcm_ktimetracker ${KDE4_KIO_LIBS} \
${KDE4_KDEUI_LIBS} ${K if(X11_Xscreensaver_LIB)
target_link_libraries(kcm_ktimetracker ${X11_Xscreensaver_LIB} )
endif()
+if(Q_WS_MAC)
+ target_link_libraries(kcm_ktimetracker "-framework ApplicationServices" )
+endif()
install(TARGETS kcm_ktimetracker DESTINATION ${PLUGIN_INSTALL_DIR})
@@ -99,6 +108,9 @@ target_link_libraries(ktimetrackerpart ${KDE4_KCMUTILS_LIBS} \
${KDEPIMLIBS_KCALC if(X11_Xscreensaver_LIB)
target_link_libraries(ktimetrackerpart ${X11_Xscreensaver_LIB})
endif()
+if(Q_WS_MAC)
+ target_link_libraries(ktimetrackerpart "-framework ApplicationServices" )
+endif()
install(TARGETS ktimetrackerpart DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/ktimetracker/idletimedetector.cpp b/ktimetracker/idletimedetector.cpp
index 250dda5..ccd35f6 100644
--- a/ktimetracker/idletimedetector.cpp
+++ b/ktimetracker/idletimedetector.cpp
@@ -39,6 +39,10 @@
#include <QX11Info>
#endif
+#ifdef Q_OS_MAC
+# include <ApplicationServices/ApplicationServices.h>
+#endif
+
IdleTimeDetector::IdleTimeDetector(int maxIdle)
{
_maxIdle = maxIdle;
@@ -47,11 +51,16 @@ IdleTimeDetector::IdleTimeDetector(int maxIdle)
int event_base, error_base;
if(XScreenSaverQueryExtension(QX11Info::display(), &event_base, &error_base)) \
_idleDetectionPossible = true; else _idleDetectionPossible = false;
- _timer = new QTimer(this);
- connect(_timer, SIGNAL(timeout()), this, SLOT(check()));
+#elif defined(Q_OS_MAC)
+ _idleDetectionPossible = true;
#else
_idleDetectionPossible = false;
#endif // HAVE_LIBXSS
+ if( _idleDetectionPossible ){
+ _timer = new QTimer(this);
+ // the slot was renamed to runOnce() to avoid a macro defined through \
ApplicationServices.h on OS X + connect(_timer, SIGNAL(timeout()), this, \
SLOT(runOnce())); + }
}
bool IdleTimeDetector::isIdleDetectionPossible()
@@ -59,11 +68,11 @@ bool IdleTimeDetector::isIdleDetectionPossible()
return _idleDetectionPossible;
}
-void IdleTimeDetector::check()
+void IdleTimeDetector::runOnce()
{
kDebug(5970) << "Entering function";
#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
- kDebug(5970) << "kompiled for libxss and x11, idledetectionpossible is " << \
_idleDetectionPossible; + kDebug(5970) << "compiled for libxss and x11, \
idledetectionpossible is " << _idleDetectionPossible; if (_idleDetectionPossible)
{
_mit_info = XScreenSaverAllocInfo();
@@ -74,6 +83,12 @@ void IdleTimeDetector::check()
if (idleminutes >= _maxIdle)
informOverrun();
}
+#elif defined(Q_OS_MAC)
+ // see http://stackoverflow.com/a/22307622/1460868
+ idleminutes = (int) CGEventSourceSecondsSinceLastEventType( \
kCGEventSourceStateHIDSystemState, kCGAnyInputEventType ) / secsPerMinute; + if( \
idleminutes >= _maxIdle ){ + informOverrun();
+ }
#endif // HAVE_LIBXSS
}
@@ -92,7 +107,7 @@ void IdleTimeDetector::revert()
emit(stopAllTimers(idlestart));
}
-#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
+#if (defined(HAVE_LIBXSS) && defined(Q_WS_X11)) || defined(Q_OS_MAC)
void IdleTimeDetector::informOverrun()
{
if (!_overAllIdleDetect)
@@ -126,20 +141,20 @@ void IdleTimeDetector::informOverrun()
kDebug(5970) << "Setting WinId " << dialog->winId() << " to deskTop " << \
KWindowSystem::self()->currentDesktop(); dialog->show();
}
-#endif // HAVE_LIBXSS
+#endif // HAVE_LIBXSS || Q_OS_MAC
void IdleTimeDetector::startIdleDetection()
{
-#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
- if (!_timer->isActive())
+#if (defined(HAVE_LIBXSS) && defined(Q_WS_X11)) || defined(Q_OS_MAC)
+ if (!_timer->isActive())
_timer->start(testInterval);
#endif //HAVE_LIBXSS
}
void IdleTimeDetector::stopIdleDetection()
{
-#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
- if (_timer->isActive())
+#if (defined(HAVE_LIBXSS) && defined(Q_WS_X11)) || defined(Q_OS_MAC)
+ if (_timer->isActive())
_timer->stop();
#endif // HAVE_LIBXSS
}
diff --git a/ktimetracker/idletimedetector.h b/ktimetracker/idletimedetector.h
index 524f739..ddf1166 100644
--- a/ktimetracker/idletimedetector.h
+++ b/ktimetracker/idletimedetector.h
@@ -59,13 +59,14 @@ public:
Returns true if it is possible to do idle detection.
Idle detection relys on a feature in the X server, which might not
always be present.
+ On OS X, it uses CGEventSourceSecondsSinceLastEventType() from \
ApplicationServices.framework
**/
bool isIdleDetectionPossible();
Q_SIGNALS:
/**
Tells the listener to subtract time from current timing.
- The time to subtract is due to the idle time since the dialog wass
+ The time to subtract is due to the idle time since the dialog was
shown, and until the user answers the dialog.
@param minutes Minutes to subtract.
**/
@@ -104,12 +105,12 @@ public Q_SLOTS:
protected:
-#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
+#if (defined(HAVE_LIBXSS) && defined(Q_WS_X11)) || defined(Q_OS_MAC)
void informOverrun();
-#endif // HAVE_LIBXSS
+#endif // HAVE_LIBXSS || Q_OS_MAC
protected Q_SLOTS:
- void check();
+ void runOnce();
private:
#if defined(HAVE_LIBXSS) && defined(Q_WS_X11)
diff --git a/ktimetracker/ktimetrackerutility.cpp \
b/ktimetracker/ktimetrackerutility.cpp index efeba3a..567fa45 100644
--- a/ktimetracker/ktimetrackerutility.cpp
+++ b/ktimetracker/ktimetrackerutility.cpp
@@ -26,8 +26,10 @@
#include <math.h>
#include <stdlib.h>
+#ifdef Q_WS_X11
#include <X11/Xlib.h>
#include <fixx11h.h>
+#endif
QString getFocusWindow()
{
diff --git a/ktimetracker/mainwindow.cpp b/ktimetracker/mainwindow.cpp
index 56d4c28..6661b9c 100644
--- a/ktimetracker/mainwindow.cpp
+++ b/ktimetracker/mainwindow.cpp
@@ -71,7 +71,15 @@ MainWindow::MainWindow( const QString &icsfile )
// and another one in the plugin. The build system should be fixed.
//m_part = factory->create<ktimetrackerpart>( this );
+#ifdef Q_OS_MAC
+ // not sure if this is really required but this is the code that works for me \
with g++-mp-4.8 + static KParts::ReadWritePart *rwp = \
factory->create<KParts::ReadWritePart>( this ); + static ktimetrackerpart *mp \
= dynamic_cast<ktimetrackerpart*>( rwp ); + m_part = \
dynamic_cast<ktimetrackerpart*>( rwp ); + kError() << "this=" << this << "; rwp=" \
<< rwp << "; mp=" << mp << "; m_part=" << m_part; +#else
m_part = dynamic_cast<ktimetrackerpart*>( \
factory->create<KParts::ReadWritePart>( this ) ); +#endif // Q_OS_MAC
if (m_part)
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic