Git commit f788b5a384b5445bd08c775e51e4041ca7045da2 by Albert Astals Cid, on behalf of Shubham Jangra. Committed on 21/04/2019 at 23:11. Pushed by aacid into branch 'master'.
Add action in Edit menu to select the text on current page BUG: 358868 Test Plan: Click on "Select All Text on Current Page" entry in Edit menu to select the entire page. The selected text can then be copied via Edit menu item "Copy" Reviewers: aacid, #vdg, ngraham Reviewed By: #vdg, ngraham Subscribers: yurchor, michaelweghorn, kde-doc-english, davidhurka, abetts, loh.tar, alexde, ngraham, okular-devel Tags: #okular, #documentation Differential Revision: https://phabricator.kde.org/D18744 M +15 -0 doc/index.docbook M +9 -0 part.cpp M +1 -0 part.h M +2 -1 part.rc M +15 -0 ui/pageview.cpp M +2 -0 ui/pageview.h https://commits.kde.org/okular/f788b5a384b5445bd08c775e51e4041ca7045da2 diff --git a/doc/index.docbook b/doc/index.docbook index 8b83b422c..886e59365 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -1284,6 +1284,21 @@ Context menu actions like Rename Bookmarks etc.) </varlistentry> </variablelist> + <variablelist> + <varlistentry> + <term> + <menuchoice> + <guimenu>Edit</guimenu> + <guimenuitem>Select All Text on Current Page</guimenuitem> + </menuchoice> + </term> + <listitem> + <para><action>Selects</action> all the text (if the document provides it) of the current page. + </para> + </listitem> + </varlistentry> + </variablelist> + <variablelist> <varlistentry> <term> diff --git a/part.cpp b/part.cpp index 869ee8a40..c831f8793 100644 --- a/part.cpp +++ b/part.cpp @@ -720,6 +720,7 @@ void Part::setupViewerActions() m_copy = nullptr; m_selectAll = nullptr; + m_selectCurrentPage = nullptr; // Find and other actions m_find = KStandardAction::find( this, SLOT(slotShowFindBar()), ac ); @@ -843,6 +844,12 @@ void Part::setupActions() m_selectAll = KStandardAction::selectAll( m_pageView, SLOT(selectAll()), ac ); + // Setup select all action for the current page + m_selectCurrentPage = ac->addAction(QStringLiteral("edit_select_all_current_page")); + m_selectCurrentPage->setText(i18n("Select All Text on Current Page")); + connect( m_selectCurrentPage, &QAction::triggered, m_pageView, &PageView::slotSelectPage ); + m_selectCurrentPage->setEnabled( false ); + m_save = KStandardAction::save( this, [this] { saveFile(); }, ac ); m_save->setEnabled( false ); @@ -2146,6 +2153,7 @@ void Part::updateViewActions() m_reload->setEnabled( true ); if (m_copy) m_copy->setEnabled( true ); if (m_selectAll) m_selectAll->setEnabled( true ); + if (m_selectCurrentPage) m_selectCurrentPage->setEnabled( true ); } else { @@ -2159,6 +2167,7 @@ void Part::updateViewActions() m_reload->setEnabled( false ); if (m_copy) m_copy->setEnabled( false ); if (m_selectAll) m_selectAll->setEnabled( false ); + if (m_selectCurrentPage) m_selectCurrentPage->setEnabled( false ); } if ( factory() ) diff --git a/part.h b/part.h index 2954e45d6..3cfc5a31d 100644 --- a/part.h +++ b/part.h @@ -360,6 +360,7 @@ class OKULARPART_EXPORT Part : public KParts::ReadWritePart, public Okular::Docu QAction *m_nextBookmark; QAction *m_copy; QAction *m_selectAll; + QAction *m_selectCurrentPage; QAction *m_find; QAction *m_findNext; QAction *m_findPrev; diff --git a/part.rc b/part.rc index c8dc309a0..bf15cac50 100644 --- a/part.rc +++ b/part.rc @@ -1,5 +1,5 @@ <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<kpartgui name="okular_part" version="39"> +<kpartgui name="okular_part" version="40"> <MenuBar> <Menu name="file"><text>&File</text> <Action name="get_new_stuff" group="file_open"/> @@ -21,6 +21,7 @@ <Action name="edit_copy"/> <Separator/> <Action name="edit_select_all"/> + <Action name="edit_select_all_current_page"/> <Separator/> <Action name="edit_find"/> <Action name="edit_find_next"/> diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 6369c87e5..59f9565e5 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -5538,6 +5538,21 @@ void PageView::slotFitWindowToPage() emit fitWindowToPage( viewportSize, pageSize ); } +void PageView::slotSelectPage() +{ + textSelectionClear(); + const int currentPage = d->document->viewport().pageNumber; + PageViewItem *item = d->items.at( currentPage ); + + if ( item ) + { + Okular::RegularAreaRect * area = textSelectionForItem( item ); + const QString text = item->page()->text( area ); + d->pagesWithTextSelection.insert( currentPage ); + d->document->setPageTextSelection( currentPage, area, palette().color( QPalette::Active, QPalette::Highlight ) ); + } +} + void PageView::highlightSignatureFormWidget( const Okular::FormFieldSignature *form ) { QVector< PageViewItem * >::const_iterator dIt = d->items.constBegin(), dEnd = d->items.constEnd(); diff --git a/ui/pageview.h b/ui/pageview.h index 4af4333d9..a892a5bb0 100644 --- a/ui/pageview.h +++ b/ui/pageview.h @@ -130,6 +130,8 @@ Q_OBJECT void slotToggleChangeColors(); void slotSetChangeColors(bool active); + void slotSelectPage(); + Q_SIGNALS: void rightClick( const Okular::Page *, const QPoint & ); void mouseBackButtonClick();
