mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
E-book viewer: Fix copy keyboard shortcut/context menu action not working on some windows systems
Now all copying happens via the current selection. This means that HTML copying no longer works. But it is likely needed for systems with buggy clipboard implementations. See #1477696 (Copy-Paste does not work)
This commit is contained in:
parent
64cae0cef7
commit
0a45fa19af
@ -12,7 +12,7 @@ from future_builtins import map
|
||||
from PyQt5.Qt import (
|
||||
QSize, QSizePolicy, QUrl, Qt, QPainter, QPalette, QBrush,
|
||||
QDialog, QColor, QPoint, QImage, QRegion, QIcon, QAction, QMenu,
|
||||
pyqtSignal, QApplication, pyqtSlot, QKeySequence, QMimeData)
|
||||
pyqtSignal, QApplication, pyqtSlot, QKeySequence)
|
||||
from PyQt5.QtWebKitWidgets import QWebPage, QWebView
|
||||
from PyQt5.QtWebKit import QWebSettings, QWebElement
|
||||
|
||||
@ -553,13 +553,10 @@ class DocumentView(QWebView): # {{{
|
||||
self.document.selectionChanged[()].connect(self.selection_changed)
|
||||
self.document.animated_scroll_done_signal.connect(self.animated_scroll_done, type=Qt.QueuedConnection)
|
||||
self.document.page_turn.connect(self.page_turn_requested)
|
||||
copy_action = self.copy_action
|
||||
copy_action.setIcon(QIcon(I('edit-copy.png')))
|
||||
copy_action.triggered.connect(self.copy, Qt.QueuedConnection)
|
||||
d = self.document
|
||||
self.unimplemented_actions = list(map(self.pageAction,
|
||||
[d.DownloadImageToDisk, d.OpenLinkInNewWindow, d.DownloadLinkToDisk, d.CopyImageUrlToClipboard,
|
||||
d.OpenImageInNewWindow, d.OpenLink, d.Reload, d.InspectElement]))
|
||||
d.OpenImageInNewWindow, d.OpenLink, d.Reload, d.InspectElement, d.Copy]))
|
||||
|
||||
self.search_online_action = QAction(QIcon(I('search.png')), '', self)
|
||||
self.search_online_action.triggered.connect(self.search_online)
|
||||
@ -628,10 +625,6 @@ class DocumentView(QWebView): # {{{
|
||||
if self.manager is not None:
|
||||
self.manager.goto_end()
|
||||
|
||||
@property
|
||||
def copy_action(self):
|
||||
return self.pageAction(self.document.Copy)
|
||||
|
||||
def animated_scroll_done(self):
|
||||
if self.manager is not None:
|
||||
self.manager.scrolled(self.document.scroll_fraction)
|
||||
@ -668,17 +661,6 @@ class DocumentView(QWebView): # {{{
|
||||
def selected_text(self):
|
||||
return self.document.selectedText().replace(u'\u00ad', u'').strip()
|
||||
|
||||
def copy(self):
|
||||
self.document.triggerAction(self.document.Copy)
|
||||
c = QApplication.clipboard()
|
||||
md = c.mimeData()
|
||||
if iswindows:
|
||||
nmd = QMimeData()
|
||||
nmd.setHtml(md.html().replace(u'\u00ad', ''))
|
||||
md = nmd
|
||||
md.setText(self.selected_text)
|
||||
QApplication.clipboard().setMimeData(md)
|
||||
|
||||
def selection_changed(self):
|
||||
if self.manager is not None:
|
||||
self.manager.selection_changed(self.selected_text)
|
||||
@ -724,6 +706,9 @@ class DocumentView(QWebView): # {{{
|
||||
for action in self.unimplemented_actions:
|
||||
menu.removeAction(action)
|
||||
|
||||
if self.manager is not None and self.manager.action_copy.isEnabled():
|
||||
menu.addAction(self.manager.action_copy)
|
||||
|
||||
if not img.isNull():
|
||||
cia = self.pageAction(self.document.CopyImageToClipboard)
|
||||
for action in menu.actions():
|
||||
@ -1383,7 +1368,8 @@ class DocumentView(QWebView): # {{{
|
||||
if self.manager is not None:
|
||||
self.manager.forward(None)
|
||||
elif event.matches(QKeySequence.Copy):
|
||||
self.copy()
|
||||
if self.manager is not None:
|
||||
self.manager.copy()
|
||||
else:
|
||||
handled = False
|
||||
return handled
|
||||
|
@ -574,7 +574,7 @@ class EbookViewer(MainWindow):
|
||||
self.selected_text = selected_text.strip()
|
||||
self.action_copy.setEnabled(bool(self.selected_text))
|
||||
|
||||
def copy(self, x):
|
||||
def copy(self, x=False):
|
||||
if self.selected_text:
|
||||
QApplication.clipboard().setText(self.selected_text)
|
||||
|
||||
@ -1098,7 +1098,7 @@ class EbookViewer(MainWindow):
|
||||
action = {
|
||||
'Quit':self.action_quit,
|
||||
'Show metadata':self.action_metadata,
|
||||
'Copy':self.view.copy_action,
|
||||
'Copy':self.action_copy,
|
||||
'Font larger': self.action_font_size_larger,
|
||||
'Font smaller': self.action_font_size_smaller,
|
||||
'Fullscreen': self.action_full_screen,
|
||||
|
Loading…
x
Reference in New Issue
Block a user