mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-02 23:26:44 +00:00
ALL: Move Clipboard support to OSystem
Commit adds kFeatureClipboardSupport. hasTextInClipboard() and getTextFromClipboard(). OSystem_SDL has this feature if SDL2 is used. EditableWidget and StorageWizardDialog use g_system to access clipboard now.
This commit is contained in:
parent
527ab4cdf6
commit
b9bba9bd4b
@ -64,6 +64,11 @@
|
||||
#include <SDL/SDL_net.h>
|
||||
#endif
|
||||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_clipboard.h>
|
||||
#endif
|
||||
|
||||
OSystem_SDL::OSystem_SDL()
|
||||
:
|
||||
#ifdef USE_OPENGL
|
||||
@ -171,6 +176,13 @@ void OSystem_SDL::init() {
|
||||
|
||||
}
|
||||
|
||||
bool OSystem_SDL::hasFeature(Feature f) {
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
if (f == kFeatureClipboardSupport) return true;
|
||||
#endif
|
||||
return ModularBackend::hasFeature(f);
|
||||
}
|
||||
|
||||
void OSystem_SDL::initBackend() {
|
||||
// Check if backend has not been initialized
|
||||
assert(!_inited);
|
||||
@ -453,6 +465,26 @@ Common::String OSystem_SDL::getSystemLanguage() const {
|
||||
#endif // USE_DETECTLANG
|
||||
}
|
||||
|
||||
bool OSystem_SDL::hasTextInClipboard() {
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
return SDL_HasClipboardText() == SDL_TRUE;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
Common::String OSystem_SDL::getTextFromClipboard() {
|
||||
if (!hasTextInClipboard()) return "";
|
||||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
char *text = SDL_GetClipboardText();
|
||||
if (text == nullptr) return "";
|
||||
return text;
|
||||
#else
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32 OSystem_SDL::getMillis(bool skipRecord) {
|
||||
uint32 millis = SDL_GetTicks();
|
||||
|
||||
|
@ -55,6 +55,8 @@ public:
|
||||
*/
|
||||
virtual SdlMixerManager *getMixerManager();
|
||||
|
||||
virtual bool hasFeature(Feature f);
|
||||
|
||||
// Override functions from ModularBackend and OSystem
|
||||
virtual void initBackend();
|
||||
#if defined(USE_TASKBAR)
|
||||
@ -69,6 +71,10 @@ public:
|
||||
|
||||
virtual Common::String getSystemLanguage() const;
|
||||
|
||||
// Clipboard
|
||||
virtual bool hasTextInClipboard();
|
||||
virtual Common::String getTextFromClipboard();
|
||||
|
||||
virtual void setWindowCaption(const char *caption);
|
||||
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
|
||||
virtual uint32 getMillis(bool skipRecord = false);
|
||||
|
@ -314,7 +314,15 @@ public:
|
||||
*
|
||||
* This feature has no associated state.
|
||||
*/
|
||||
kFeatureDisplayLogFile
|
||||
kFeatureDisplayLogFile,
|
||||
|
||||
/**
|
||||
* The presence of this feature indicates whether the hasTextInClipboard()
|
||||
* and getTextFromClipboard() calls are supported.
|
||||
*
|
||||
* This feature has no associated state.
|
||||
*/
|
||||
kFeatureClipboardSupport
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1238,6 +1246,28 @@ public:
|
||||
*/
|
||||
virtual bool displayLogFile() { return false; }
|
||||
|
||||
/**
|
||||
* Returns whether there is text available in the clipboard.
|
||||
*
|
||||
* The kFeatureClipboardSupport feature flag can be used to
|
||||
* test whether this call has been implemented by the active
|
||||
* backend.
|
||||
*
|
||||
* @return true if there is text in the clipboard, false otherwise
|
||||
*/
|
||||
virtual bool hasTextInClipboard() { return false; }
|
||||
|
||||
/**
|
||||
* Returns clipboard contents as a String.
|
||||
*
|
||||
* The kFeatureClipboardSupport feature flag can be used to
|
||||
* test whether this call has been implemented by the active
|
||||
* backend.
|
||||
*
|
||||
* @return clipboard contents ("" if hasTextInClipboard() == false)
|
||||
*/
|
||||
virtual Common::String getTextFromClipboard() { return ""; }
|
||||
|
||||
/**
|
||||
* Returns the locale of the system.
|
||||
*
|
||||
|
@ -20,13 +20,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef USE_SDL2
|
||||
#define FORBIDDEN_SYMBOL_ALLOW_ALL
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_clipboard.h>
|
||||
#endif
|
||||
|
||||
#include "gui/storagewizarddialog.h"
|
||||
#include "gui/gui-manager.h"
|
||||
#include "gui/message.h"
|
||||
@ -217,32 +210,27 @@ void StorageWizardDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
|
||||
break;
|
||||
}
|
||||
case kPasteCodeCmd: {
|
||||
#ifdef USE_SDL2
|
||||
if (SDL_HasClipboardText() == SDL_TRUE) {
|
||||
char *text = SDL_GetClipboardText();
|
||||
if (text != nullptr) {
|
||||
Common::String message = text;
|
||||
for (uint32 i = 0; i < CODE_FIELDS; ++i) {
|
||||
if (message.empty()) break;
|
||||
Common::String subcode = "";
|
||||
for (uint32 j = 0; j < message.size(); ++j) {
|
||||
if (message[j] == ' ') {
|
||||
message.erase(0, j+1);
|
||||
break;
|
||||
}
|
||||
subcode += message[j];
|
||||
if (j+1 == message.size()) {
|
||||
message = "";
|
||||
break;
|
||||
}
|
||||
if (g_system->hasTextInClipboard()) {
|
||||
Common::String message = g_system->getTextFromClipboard();
|
||||
for (uint32 i = 0; i < CODE_FIELDS; ++i) {
|
||||
if (message.empty()) break;
|
||||
Common::String subcode = "";
|
||||
for (uint32 j = 0; j < message.size(); ++j) {
|
||||
if (message[j] == ' ') {
|
||||
message.erase(0, j+1);
|
||||
break;
|
||||
}
|
||||
subcode += message[j];
|
||||
if (j+1 == message.size()) {
|
||||
message = "";
|
||||
break;
|
||||
}
|
||||
_codeWidget[i]->setEditString(subcode);
|
||||
}
|
||||
handleCommand(sender, kCodeBoxCmd, data);
|
||||
draw();
|
||||
_codeWidget[i]->setEditString(subcode);
|
||||
}
|
||||
handleCommand(sender, kCodeBoxCmd, data);
|
||||
draw();
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case kConnectCmd: {
|
||||
@ -302,11 +290,7 @@ void StorageWizardDialog::containerWidgetsReflow() {
|
||||
}
|
||||
if (_openUrlWidget) _openUrlWidget->setVisible(true);
|
||||
if (_pasteCodeWidget) {
|
||||
#ifdef USE_SDL2
|
||||
bool visible = showFields;
|
||||
#else
|
||||
bool visible = false;
|
||||
#endif
|
||||
bool visible = showFields && g_system->hasFeature(OSystem::kFeatureClipboardSupport);
|
||||
_pasteCodeWidget->setVisible(visible);
|
||||
}
|
||||
|
||||
|
@ -20,13 +20,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef USE_SDL2
|
||||
#define FORBIDDEN_SYMBOL_ALLOW_ALL
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_clipboard.h>
|
||||
#endif
|
||||
|
||||
#include "common/rect.h"
|
||||
#include "common/system.h"
|
||||
#include "gui/widgets/editable.h"
|
||||
@ -192,24 +185,20 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
|
||||
forcecaret = true;
|
||||
break;
|
||||
|
||||
#ifdef USE_SDL2
|
||||
case Common::KEYCODE_v:
|
||||
if (state.flags & Common::KBD_CTRL) {
|
||||
if (SDL_HasClipboardText() == SDL_TRUE) {
|
||||
char *text = SDL_GetClipboardText();
|
||||
if (text != nullptr) {
|
||||
for (char *ptr = text; *ptr; ++ptr) {
|
||||
if (tryInsertChar(*ptr, _caretPos))
|
||||
++_caretPos;
|
||||
}
|
||||
dirty = true;
|
||||
}
|
||||
case Common::KEYCODE_v:
|
||||
if (g_system->hasFeature(OSystem::kFeatureClipboardSupport) && state.flags & Common::KBD_CTRL) {
|
||||
if (g_system->hasTextInClipboard()) {
|
||||
String text = g_system->getTextFromClipboard();
|
||||
for (uint32 i = 0; i < text.size(); ++i) {
|
||||
if (tryInsertChar(text[i], _caretPos))
|
||||
++_caretPos;
|
||||
}
|
||||
} else {
|
||||
defaultKeyDownHandler(state, dirty, forcecaret, handled);
|
||||
dirty = true;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
} else {
|
||||
defaultKeyDownHandler(state, dirty, forcecaret, handled);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef MACOSX
|
||||
// Let ctrl-a / ctrl-e move the caret to the start / end of the line.
|
||||
|
Loading…
Reference in New Issue
Block a user