mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[client,sdl] add dialog paste support
This commit is contained in:
@@ -110,6 +110,16 @@ bool SdlInputWidget::resize_input(size_t size)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SdlInputWidget::set_str(SDL_Renderer* renderer, const std::string& text)
|
||||
{
|
||||
if (readonly())
|
||||
return true;
|
||||
_text = text;
|
||||
if (!resize_input(_text.size()))
|
||||
return false;
|
||||
return update_input(renderer);
|
||||
}
|
||||
|
||||
bool SdlInputWidget::remove_str(SDL_Renderer* renderer, size_t count)
|
||||
{
|
||||
if (readonly())
|
||||
|
||||
@@ -47,6 +47,7 @@ class SdlInputWidget
|
||||
bool update_input(SDL_Renderer* renderer);
|
||||
bool resize_input(size_t size);
|
||||
|
||||
bool set_str(SDL_Renderer* renderer, const std::string& text);
|
||||
bool remove_str(SDL_Renderer* renderer, size_t count);
|
||||
bool append_str(SDL_Renderer* renderer, const std::string& text);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <assert.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "sdl_input_widgets.hpp"
|
||||
|
||||
@@ -138,6 +139,7 @@ int SdlInputWidgetList::run(std::vector<std::string>& result)
|
||||
try
|
||||
{
|
||||
bool running = true;
|
||||
std::vector<SDL_Keycode> pressed;
|
||||
while (running)
|
||||
{
|
||||
if (!clear_window(_renderer))
|
||||
@@ -153,7 +155,14 @@ int SdlInputWidgetList::run(std::vector<std::string>& result)
|
||||
SDL_WaitEvent(&event);
|
||||
switch (event.type)
|
||||
{
|
||||
case SDL_KEYUP:
|
||||
{
|
||||
auto it = std::remove(pressed.begin(), pressed.end(), event.key.keysym.sym);
|
||||
pressed.erase(it, pressed.end());
|
||||
}
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
pressed.push_back(event.key.keysym.sym);
|
||||
switch (event.key.keysym.sym)
|
||||
{
|
||||
case SDLK_BACKSPACE:
|
||||
@@ -179,6 +188,20 @@ int SdlInputWidgetList::run(std::vector<std::string>& result)
|
||||
running = false;
|
||||
res = INPUT_BUTTON_CANCEL;
|
||||
break;
|
||||
case SDLK_v:
|
||||
if (pressed.size() == 2)
|
||||
{
|
||||
if ((pressed[0] == SDLK_LCTRL) || (pressed[0] == SDLK_RCTRL))
|
||||
{
|
||||
auto cur = get(CurrentActiveTextInput);
|
||||
if (cur)
|
||||
{
|
||||
auto text = SDL_GetClipboardText();
|
||||
cur->set_str(_renderer, text);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user