mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
[feat, UX] SDL: add Gtk3 filechooser (#3827)
The specifics for other implementations are easy to change in the backend.
This commit is contained in:
@@ -114,6 +114,7 @@ local Input = {
|
||||
-- keyboard state:
|
||||
modifiers = {
|
||||
Alt = false,
|
||||
Ctrl = false,
|
||||
Shift = false,
|
||||
},
|
||||
|
||||
@@ -301,9 +302,22 @@ function Input:handleKeyBoardEv(ev)
|
||||
end
|
||||
end
|
||||
|
||||
local FileChooser = self.file_chooser
|
||||
if FileChooser and self:isEvKeyPress(ev)
|
||||
and self.modifiers["Ctrl"] and keycode == "O" then
|
||||
logger.dbg("Opening FileChooser:", FileChooser.type)
|
||||
local file_path = FileChooser:open()
|
||||
|
||||
if file_path then
|
||||
local ReaderUI = require("apps/reader/readerui")
|
||||
ReaderUI:doShowReader(file_path)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
-- quit on Alt + F4
|
||||
-- this is also emitted by the close event in SDL
|
||||
if self.modifiers["Alt"] and keycode == "F4" then
|
||||
if self:isEvKeyPress(ev) and self.modifiers["Alt"] and keycode == "F4" then
|
||||
local Device = require("frontend/device")
|
||||
local UIManager = require("ui/uimanager")
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ function Device:init()
|
||||
|
||||
-- SDL events can remain cdata but are almost completely transparent
|
||||
local SDL_MOUSEWHEEL = 1027
|
||||
local SDL_MULTIGESTURE = 2050
|
||||
local SDL_DROPFILE = 4096
|
||||
local SDL_WINDOWEVENT_RESIZED = 5
|
||||
|
||||
@@ -99,6 +100,9 @@ function Device:init()
|
||||
UIManager:broadcastEvent(fake_pan_ev)
|
||||
UIManager:broadcastEvent(fake_release_ev)
|
||||
end
|
||||
elseif ev.code == SDL_MULTIGESTURE then
|
||||
-- no-op for now
|
||||
do end -- luacheck: ignore 541
|
||||
elseif ev.code == SDL_DROPFILE then
|
||||
local dropped_file_path = ev.value
|
||||
if dropped_file_path and dropped_file_path ~= "" then
|
||||
@@ -132,6 +136,7 @@ function Device:init()
|
||||
setClipboardText = function(text)
|
||||
return input.setClipboardText(text)
|
||||
end,
|
||||
file_chooser = input.file_chooser,
|
||||
}
|
||||
else
|
||||
self.screen = require("ffi/framebuffer_SDL1_2"):new{device = self, debug = logger.dbg}
|
||||
|
||||
@@ -32,4 +32,7 @@ return {
|
||||
[81] = "Down", -- arrow down
|
||||
[78] = "RPgFwd", -- normal PageDown
|
||||
[76] = "Del", -- Delete
|
||||
[101] = "ContextMenu", -- Context menu key
|
||||
[224] = "Ctrl", -- Left Ctrl
|
||||
[228] = "Ctrl", -- Right Ctrl
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user