diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 47d5201fa..a93675a3b 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -383,8 +383,11 @@ function ReaderHighlight:onHoldRelease() }, { { - text = "-", - enabled = false, + text = "Copy", + enabled = Device:hasClipboard(), + callback = function() + Device.input.setClipboardText(self.selected_text.text) + end, }, { text = _("Translate"), diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 576483343..29281e573 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -24,6 +24,7 @@ local Device = { isTouchDevice = no, hasFrontlight = no, needsTouchScreenProbe = no, + hasClipboard = no, hasColorScreen = no, -- use these only as a last resort. We should abstract the functionality diff --git a/frontend/device/sdl/device.lua b/frontend/device/sdl/device.lua index 0e26b0da2..a1920ac78 100644 --- a/frontend/device/sdl/device.lua +++ b/frontend/device/sdl/device.lua @@ -34,10 +34,22 @@ function Device:init() end if util.haveSDL2() then + self.hasClipboard = yes self.screen = require("ffi/framebuffer_SDL2_0"):new{device = self, debug = logger.dbg} + + local input = require("ffi/input") self.input = require("device/input"):new{ device = self, event_map = require("device/sdl/event_map_sdl2"), + hasClipboardText = function() + return input.hasClipboardText() + end, + getClipboardText = function() + return input.getClipboardText() + end, + setClipboardText = function(text) + return input.setClipboardText(text) + end, } else self.screen = require("ffi/framebuffer_SDL1_2"):new{device = self, debug = logger.dbg}