[sdl] allow copy/paste URL to/from a clipboard
parent
3702250525
commit
c95e554c7a
|
@ -15,6 +15,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <celestia/celestiacore.h>
|
#include <celestia/celestiacore.h>
|
||||||
|
#include <celestia/url.h>
|
||||||
|
|
||||||
namespace celestia
|
namespace celestia
|
||||||
{
|
{
|
||||||
|
@ -67,6 +68,8 @@ class SDL_Application
|
||||||
|
|
||||||
// aux functions
|
// aux functions
|
||||||
void toggleFullscreen();
|
void toggleFullscreen();
|
||||||
|
void copyURL();
|
||||||
|
void pasteURL();
|
||||||
|
|
||||||
// state variables
|
// state variables
|
||||||
std::string m_appName;
|
std::string m_appName;
|
||||||
|
@ -294,8 +297,18 @@ SDL_Application::handleKeyPressEvent(const SDL_KeyboardEvent &event)
|
||||||
int k = tolower(key);
|
int k = tolower(key);
|
||||||
if (k >= 'a' && k <= 'z')
|
if (k >= 'a' && k <= 'z')
|
||||||
{
|
{
|
||||||
key = k + 1 - 'a';
|
switch (k)
|
||||||
m_appCore->charEntered(key, mod);
|
{
|
||||||
|
case 'c':
|
||||||
|
copyURL();
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
pasteURL();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
key = k + 1 - 'a';
|
||||||
|
m_appCore->charEntered(key, mod);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mod |= CelestiaCore::ControlKey;
|
mod |= CelestiaCore::ControlKey;
|
||||||
|
@ -471,6 +484,29 @@ SDL_Application::toggleFullscreen()
|
||||||
m_fullscreen = true;
|
m_fullscreen = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SDL_Application::copyURL()
|
||||||
|
{
|
||||||
|
CelestiaState appState(m_appCore);
|
||||||
|
appState.captureState();
|
||||||
|
|
||||||
|
if (SDL_SetClipboardText(Url(appState).getAsString().c_str()) == 0)
|
||||||
|
m_appCore->flash(_("Copied URL"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SDL_Application::pasteURL()
|
||||||
|
{
|
||||||
|
if (SDL_HasClipboardText() != SDL_TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// on error SDL_GetClipboardText returns a new empty string
|
||||||
|
char *str = SDL_GetClipboardText(); // don't add const due to SDL_free
|
||||||
|
if (*str != '\0' && m_appCore->goToUrl(str))
|
||||||
|
m_appCore->flash(_("Pasting URL"));
|
||||||
|
|
||||||
|
SDL_free(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -503,7 +539,7 @@ void DumpGLInfo()
|
||||||
if (s != nullptr)
|
if (s != nullptr)
|
||||||
std::cout << s << '\n';
|
std::cout << s << '\n';
|
||||||
}
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
using namespace celestia;
|
using namespace celestia;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue