[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/okular/ui
From:       Eike Hein <hein () kde ! org>
Date:       2010-09-11 13:34:23
Message-ID: 20100911133423.2DD21AC888 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1174208 by hein:

Add support for KDE's Web Shortcuts to the page view popup menus of
the two text selection tools.

BUG:119685
FIXED-IN:4.6


 M  +79 -0     pageview.cpp  
 M  +6 -0      pageview.h  


--- trunk/KDE/kdegraphics/okular/ui/pageview.cpp #1174207:1174208
@@ -45,6 +45,9 @@
 #include <kdebug.h>
 #include <kmessagebox.h>
 #include <kicon.h>
+#include <kurifilter.h>
+#include <kstringhandler.h>
+#include <ktoolinvocation.h>
 
 // system includes
 #include <math.h>
@@ -2032,6 +2035,7 @@
                 if ( Okular::Settings::useKTTSD() )
                     speakText = menu.addAction( KIcon("text-speak"), i18n( "Speak \
Text" ) );  }
+            addWebShortcutsMenu( &menu, selectedText );
             menu.addTitle( i18n( "Image (%1 by %2 pixels)", selectionRect.width(), \
                selectionRect.height() ) );
             imageToClipboard = menu.addAction( KIcon("image-x-generic"), i18n( "Copy \
                to Clipboard" ) );
             imageToFile = menu.addAction( KIcon("document-save"), i18n( "Save to \
File..." ) ); @@ -2135,6 +2139,7 @@
                         textToClipboard->setEnabled( false );
                         textToClipboard->setText( i18n("Copy forbidden by DRM") );
                     }
+                    addWebShortcutsMenu( &menu, d->selectedText() );
                     QAction *choice = menu.exec( e->globalPos() );
                     // check if the user really selected an action
                     if ( choice )
@@ -2908,6 +2913,60 @@
     verticalScrollBar()->setPageStep( vs.height() );
 }
 
+void PageView::addWebShortcutsMenu( KMenu * menu, const QString & text )
+{
+    if ( text.isEmpty() )
+    {
+        return;
+    }
+
+    QString searchText = text;
+    searchText = searchText.replace( '\n', ' ' ).replace( '\r', ' ' ).simplified();
+
+    if ( searchText.isEmpty() )
+    {
+        return;
+    }
+
+    KUriFilterData filterData( searchText );
+
+    filterData.setSearchFilteringOptions( \
KUriFilterData::RetrievePreferredSearchProvidersOnly ); +
+    if ( KUriFilter::self()->filterSearchUri( filterData, \
KUriFilter::NormalTextFilter ) ) +    {
+        const QStringList searchProviders = filterData.preferredSearchProviders();
+
+        if ( !searchProviders.isEmpty() )
+        {
+            KMenu *webShortcutsMenu = new KMenu( menu );
+            webShortcutsMenu->setIcon( KIcon( "preferences-web-browser-shortcuts" ) \
); +
+            const QString squeezedText = KStringHandler::rsqueeze( searchText, 21 );
+            webShortcutsMenu->setTitle( i18n( "Search for '%1' with", squeezedText ) \
); +
+            KAction *action = 0;
+
+            foreach( const QString &searchProvider, searchProviders )
+            {
+                action = new KAction( searchProvider, webShortcutsMenu );
+                action->setIcon( KIcon( \
filterData.iconNameForPreferredSearchProvider( searchProvider ) ) ); +                \
action->setData( filterData.queryForPreferredSearchProvider( searchProvider ) ); +    \
connect( action, SIGNAL( triggered() ), this, SLOT( slotHandleWebShortcutAction() ) \
); +                webShortcutsMenu->addAction( action );
+            }
+
+            webShortcutsMenu->addSeparator();
+
+            action = new KAction( i18n( "Configure Web Shortcuts..." ), \
webShortcutsMenu ); +            action->setIcon( KIcon( "configure" ) );
+            connect( action, SIGNAL( triggered() ), this, SLOT( \
slotConfigureWebShortcuts() ) ); +            webShortcutsMenu->addAction( action );
+
+            menu->addMenu(webShortcutsMenu);
+        }
+    }
+}
+
 //BEGIN private SLOTS
 void PageView::slotRelayoutPages()
 // called by: notifySetup, viewportResizeEvent, slotViewMode, slotContinuousToggled, \
updateZoom @@ -3316,6 +3375,26 @@
     setCursor( Qt::SizeAllCursor );
 }
 
+void PageView::slotHandleWebShortcutAction()
+{
+    KAction *action = qobject_cast<KAction*>( sender() );
+
+    if (action)
+    {
+        KUriFilterData filterData( action->data().toString() );
+
+        if ( KUriFilter::self()->filterSearchUri( filterData, \
KUriFilter::WebShortcutFilter ) ) +        {
+            KToolInvocation::invokeBrowser( filterData.uri().url() );
+        }
+    }
+}
+
+void PageView::slotConfigureWebShortcuts()
+{
+    KToolInvocation::kdeinitExec( "kcmshell4", QStringList() << "ebrowsing" );
+}
+
 void PageView::slotZoom()
 {
     setFocus();
--- trunk/KDE/kdegraphics/okular/ui/pageview.h #1174207:1174208
@@ -29,6 +29,7 @@
 
 class KAction;
 class KActionCollection;
+class KMenu;
 class KUrl;
 
 namespace Okular {
@@ -174,6 +175,8 @@
 
         void resizeContentArea( const QSize & newSize );
 
+        void addWebShortcutsMenu( KMenu * menu, const QString & text );
+
         // don't want to expose classes in here
         class PageViewPrivate * d;
 
@@ -193,6 +196,9 @@
         // activated by left click timer
         void slotShowSizeAllCursor();
 
+        void slotHandleWebShortcutAction();
+        void slotConfigureWebShortcuts();
+
         // connected to local actions (toolbar, menu, ..)
         void slotZoom();
         void slotZoomIn();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic