diff options
author | Ivan Čukić <ivan.cukic@kde.org> | 2012-10-23 19:40:34 +0200 |
---|---|---|
committer | Ivan Čukić <ivan.cukic@kde.org> | 2012-10-23 19:40:34 +0200 |
commit | 3011d175e9c116d7448cd1b00db59e6be35c9501 (patch) | |
tree | 0226cc2615d6a4b3b28dbccfeb41b8636c842a1b | |
parent | SVN_SILENT made messages (.desktop file) (diff) | |
download | rekonq-3011d175e9c116d7448cd1b00db59e6be35c9501.tar.xz |
Rekonq reports the open/close document events to activity manager daemon.
By knowing which window contains which documents and which one is in
focus, we can do the following:
- collect the statistics about visited pages. Further, this provides a
score for each document visited, that depends on the number of times it
was open, the time the user spent on that location, and the time passed
since the last visit.
- availability of a global/workspace applet that allows sharing the
current document via e-mail, social networks; bookmarking and rating the
link, or connecting it to the current activity. (advantage of this is a
unified UI for sharing/rating/linking that works with any
application)
- jump-lists (not impl. yet in plasma) to list top rated documents on a
launcher icon or in the task manager applet
- krunner can sort the documents based on the score
- more things that I haven't thought of yet
There is no need to *use* ativities to have these benefits. Activities
just serve as manual data clustering to provide more useful scores
compared to the one-activity approach.
REVIEW:106912
-rw-r--r-- | CMakeLists.txt | 19 | ||||
-rw-r--r-- | config-kactivities.h.cmake | 1 | ||||
-rw-r--r-- | src/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/mainview.cpp | 49 | ||||
-rw-r--r-- | src/mainview.h | 12 | ||||
-rw-r--r-- | src/tests/CMakeLists.txt | 11 |
6 files changed, 92 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 030f0fbd..37311a13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,15 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-nepomuk.h.cmake ${CMAKE_CURREN # ================================================================================== +# optional KActivities requirements + +MACRO_OPTIONAL_FIND_PACKAGE(KActivities 6.1.0) +MACRO_BOOL_TO_01(KActivities_FOUND HAVE_KACTIVITIES) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kactivities.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/config-kactivities.h ) + + +# ================================================================================== # optional QCA2 & QtOAuth requirements MACRO_OPTIONAL_FIND_PACKAGE(QCA2) @@ -146,6 +155,16 @@ IF(REKONQ_CAN_BE_COMPILED) MESSAGE(STATUS " Rekonq will be compiled WITHOUT support for bookmarks tagging") ENDIF(HAVE_NEPOMUK) + # KActivities + + IF(HAVE_KACTIVITIES) + MESSAGE(STATUS " KActivities Libraries................. YES") + MESSAGE(STATUS " Rekonq will be compiled with support for document event reporting") + ELSE(HAVE_KACTIVITIES) + MESSAGE(STATUS " KActivities Libraries................. NO") + MESSAGE(STATUS " Rekonq will be compiled WITHOUT support for document event reporting") + ENDIF(HAVE_KACTIVITIES) + MESSAGE(STATUS "") # QCA2 diff --git a/config-kactivities.h.cmake b/config-kactivities.h.cmake new file mode 100644 index 00000000..e136858c --- /dev/null +++ b/config-kactivities.h.cmake @@ -0,0 +1 @@ +#cmakedefine HAVE_KACTIVITIES diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6c27376f..75c1b0eb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -239,6 +239,13 @@ IF(HAVE_NEPOMUK) ) ENDIF(HAVE_NEPOMUK) +# KActivities optional target link libraries +IF(HAVE_KACTIVITIES) + TARGET_LINK_LIBRARIES( kdeinit_rekonq + ${KACTIVITIES_LIBRARY} + ) +ENDIF(HAVE_KACTIVITIES) + # Opera sync optional link libraries IF(HAVE_QCA2 AND HAVE_QTOAUTH) TARGET_LINK_LIBRARIES( kdeinit_rekonq diff --git a/src/mainview.cpp b/src/mainview.cpp index b71a81ea..aa6526e8 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -52,6 +52,11 @@ #include <KMessageBox> #include <KStandardDirs> +#include <config-kactivities.h> +#ifdef HAVE_KACTIVITIES +#include <KActivities/ResourceInstance> +#endif + // Qt Includes #include <QtGui/QLabel> #include <QtGui/QMovie> @@ -255,6 +260,23 @@ void MainView::currentChanged(int index) // retrieve the old webview (that where we move from) WebTab *oldTab = this->webTab(m_currentTabIndex); + WebView *view = tab->view(); + +#ifdef HAVE_KACTIVITIES + if (!QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { + if (oldTab) { + WebView *oldView = oldTab->view(); + if (activityResourceInstance(oldView)) { + activityResourceInstance(oldView)->notifyFocusedOut(); + } + } + + if (activityResourceInstance(view)) { + activityResourceInstance(view)->notifyFocusedIn(); + } + } +#endif + // set current index m_currentTabIndex = index; @@ -272,7 +294,7 @@ void MainView::currentChanged(int index) connect(tab->page(), SIGNAL(linkHovered(QString, QString, QString)), this, SIGNAL(linkHovered(QString))); - emit currentTitle(tab->view()->title()); + emit currentTitle(view->title()); m_widgetBar->setCurrentIndex(index); // clean up "status bar" @@ -285,7 +307,7 @@ void MainView::currentChanged(int index) if (tab->url().scheme() == QL1S("about")) m_widgetBar->currentWidget()->setFocus(); else - tab->view()->setFocus(); + view->setFocus(); tabBar()->resetTabHighlighted(index); } @@ -641,6 +663,21 @@ void MainView::webViewUrlChanged(const QUrl &url) if (!tab) return; +#ifdef HAVE_KACTIVITIES + if ( + !QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled) && + !url.isEmpty() && + url.scheme() != "about" + ) + { + if (!activityResourceInstance(view)) { + new KActivities::ResourceInstance(window()->winId(), view); + } + + activityResourceInstance(view)->setUri(url); + } +#endif + int index = indexOf(tab); if (ReKonfig::hoveringTabOption() == 2) tabBar()->setTabToolTip(index, url.toString()); @@ -801,3 +838,11 @@ void MainView::detachTab(int index, MainWindow *toWindow) connect(tab->page(), SIGNAL(printRequested(QWebFrame*)), w->mainView(), SIGNAL(printRequested(QWebFrame*))); } } + +#ifdef HAVE_KACTIVITIES +KActivities::ResourceInstance * MainView::activityResourceInstance(WebView * view) +{ + return view->findChild<KActivities::ResourceInstance*> (); +} +#endif + diff --git a/src/mainview.h b/src/mainview.h index 89ee36ec..d8547530 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -38,18 +38,26 @@ // KDE Includes #include <KTabWidget> +// Config +#include <config-kactivities.h> + // Forward Declarations class MainWindow; class StackedUrlBar; class TabBar; class UrlBar; class WebTab; +class WebView; class QLabel; class QToolButton; class QUrl; class QWebFrame; +#ifdef HAVE_KACTIVITIES +namespace KActivities { class ResourceInstance; } +#endif + /** * This class represent rekonq Main View. @@ -194,6 +202,10 @@ private: int m_currentTabIndex; QList<TabHistory> m_recentlyClosedTabs; + +#ifdef HAVE_KACTIVITIES + KActivities::ResourceInstance * activityResourceInstance(WebView * view); +#endif }; #endif // MAINVIEW_H diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 176d1e94..560e7755 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -3,6 +3,7 @@ SET( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} ) INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../adblock ${CMAKE_CURRENT_SOURCE_DIR}/../analyzer @@ -30,7 +31,7 @@ target_link_libraries( findbar_test ##### ------------- mainwindow test kde4_add_unit_test( mainwindow_test mainwindow_test.cpp ) - + target_link_libraries( mainwindow_test kdeinit_rekonq ${KDE4_KDECORE_LIBS} @@ -41,7 +42,7 @@ target_link_libraries( mainwindow_test ##### ------------- mainview test kde4_add_unit_test( mainview_test mainview_test.cpp ) - + target_link_libraries( mainview_test kdeinit_rekonq ${KDE4_KDECORE_LIBS} @@ -52,7 +53,7 @@ target_link_libraries( mainview_test ##### ------------- networkaccessmanager test kde4_add_unit_test( networkaccessmanager_test networkaccessmanager_test.cpp ) - + target_link_libraries( networkaccessmanager_test kdeinit_rekonq ${KDE4_KDECORE_LIBS} @@ -63,7 +64,7 @@ target_link_libraries( networkaccessmanager_test ##### ------------- protocolhandler test kde4_add_unit_test( protocolhandler_test protocolhandler_test.cpp ) - + target_link_libraries( protocolhandler_test kdeinit_rekonq ${KDE4_KDECORE_LIBS} @@ -76,7 +77,7 @@ target_link_libraries( protocolhandler_test ##### ------------- sessionmanager test kde4_add_unit_test( sessionmanager_test sessionmanager_test.cpp ) - + target_link_libraries( sessionmanager_test kdeinit_rekonq ${KDE4_KDECORE_LIBS} |