From c2caef4ad5dac3fa114c1625a69ac76dcef6f06e Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Thu, 7 Oct 2021 19:14:29 +0200 Subject: [PATCH] ui: use SDL clipboard functions for imgui allow cut & paste on linux --- core/sdl/sdl.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/sdl/sdl.cpp b/core/sdl/sdl.cpp index f9441a219..dd6265cef 100644 --- a/core/sdl/sdl.cpp +++ b/core/sdl/sdl.cpp @@ -12,6 +12,7 @@ #include "wsi/context.h" #include "emulator.h" #include "stdclass.h" +#include "imgui/imgui.h" #if !defined(_WIN32) && !defined(__APPLE__) && !defined(__SWITCH__) #include "linux-dist/icon.h" #endif @@ -39,6 +40,7 @@ static int window_width = WINDOW_WIDTH; static int window_height = WINDOW_HEIGHT; static bool gameRunning; static bool mouseCaptured; +static std::string clipboardText; static void sdl_open_joystick(int index) { @@ -540,6 +542,23 @@ bool sdl_recreate_window(u32 flags) return true; } +static const char *getClipboardText(void *) +{ + clipboardText.clear(); + if (SDL_HasClipboardText()) + { + char *text = SDL_GetClipboardText(); + clipboardText = text; + SDL_free(text); + } + return clipboardText.c_str(); +} + +static void setClipboardText(void *, const char *text) +{ + SDL_SetClipboardText(text); +} + void sdl_window_create() { if (SDL_WasInit(SDL_INIT_VIDEO) == 0) @@ -550,6 +569,9 @@ void sdl_window_create() } } InitRenderApi(); + // ImGui copy & paste + ImGui::GetIO().GetClipboardTextFn = getClipboardText; + ImGui::GetIO().SetClipboardTextFn = setClipboardText; } void sdl_window_destroy()