And fixup launcher too

This commit is contained in:
UnknownShadow200 2018-06-17 13:58:38 +10:00
parent 40532a439f
commit 8ae11b80a1
3 changed files with 17 additions and 24 deletions

View File

@ -72,9 +72,11 @@ namespace Launcher.Gui.Screens {
RedrawLastInput();
OnRemovedChar();
} else if (e.Key == Key.C && ControlDown) {
curInput.Chars.CopyToClipboard();
if (String.IsNullOrEmpty(curInput.Text)) return;
game.Window.SetClipboardText(curInput.Text);
} else if (e.Key == Key.V && ControlDown) {
if (curInput.Chars.CopyFromClipboard()) RedrawLastInput();
string text = game.Window.GetClipboardText();
if (curInput.Chars.CopyFromClipboard(text)) RedrawLastInput();
} else if (e.Key == Key.Escape) {
if (curInput.Chars.Clear()) RedrawLastInput();
} else if (e.Key == Key.Left) {

View File

@ -1,7 +1,6 @@
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
using System;
using System.Drawing;
using System.Windows.Forms;
using ClassicalSharp;
namespace Launcher.Gui.Widgets {
@ -100,17 +99,12 @@ namespace Launcher.Gui.Widgets {
return true;
}
/// <summary> Copies the contents of the currently entered text to the system clipboard. </summary>
public void CopyToClipboard() {
if (String.IsNullOrEmpty(input.Text)) return;
Clipboard.SetText(input.Text);
}
static char[] trimChars = new char[] {'\r', '\n', '\v', '\f', ' ', '\t', '\0'};
/// <summary> Sets the currently entered text to the contents of the system clipboard. </summary>
/// <returns> true if a redraw is necessary, false otherwise. </returns>
public bool CopyFromClipboard() {
string text = Clipboard.GetText().Trim(trimChars);
public bool CopyFromClipboard(string text) {
text = text.Trim(trimChars);
if (String.IsNullOrEmpty(text)) return false;
if (input.Text.Length >= MaxChars) return false;

View File

@ -58,7 +58,7 @@ namespace OpenTK.Platform.X11 {
IntPtr net_wm_icon;
IntPtr net_frame_extents;
IntPtr clipboard, xa_targets, xa_utf8_string, xa_atom, data_sel;
IntPtr xa_clipboard, xa_targets, xa_utf8_string, xa_atom, xa_data_sel;
string clipboard_paste_text, clipboard_copy_text;
static readonly IntPtr xa_cardinal = (IntPtr)6;
@ -193,11 +193,11 @@ namespace OpenTK.Platform.X11 {
net_wm_icon = API.XInternAtom(window.Display, "_NEW_WM_ICON", false);
net_frame_extents = API.XInternAtom(window.Display, "_NET_FRAME_EXTENTS", false);
clipboard = API.XInternAtom(window.Display, "CLIPBOARD", false);
xa_clipboard = API.XInternAtom(window.Display, "CLIPBOARD", false);
xa_targets = API.XInternAtom(window.Display, "TARGETS", false);
xa_utf8_string = API.XInternAtom(window.Display, "UTF8_STRING", false);
xa_atom = API.XInternAtom(window.Display, "ATOM", false);
data_sel = API.XInternAtom(window.Display, "CS_SEL_DATA", false);
xa_data_sel = API.XInternAtom(window.Display, "CS_SEL_DATA", false);
}
void SetWindowMinMax(short min_width, short min_height, short max_width, short max_height) {
@ -433,14 +433,14 @@ namespace OpenTK.Platform.X11 {
case XEventName.SelectionNotify:
clipboard_paste_text = "";
if (e.SelectionEvent.selection == clipboard && e.SelectionEvent.target == xa_utf8_string && e.SelectionEvent.property == data_sel) {
if (e.SelectionEvent.selection == xa_clipboard && e.SelectionEvent.target == xa_utf8_string && e.SelectionEvent.property == xa_data_sel) {
IntPtr prop_type, num_items, bytes_after, data = IntPtr.Zero;
int prop_format;
API.XGetWindowProperty (window.Display, window.WinHandle, data_sel, IntPtr.Zero, new IntPtr (1024), false, IntPtr.Zero,
API.XGetWindowProperty (window.Display, window.WinHandle, xa_data_sel, IntPtr.Zero, new IntPtr (1024), false, IntPtr.Zero,
out prop_type, out prop_format, out num_items, out bytes_after, ref data);
API.XDeleteProperty (window.Display, window.WinHandle, data_sel);
API.XDeleteProperty (window.Display, window.WinHandle, xa_data_sel);
if (num_items == IntPtr.Zero) break;
if (prop_type == xa_utf8_string) {
@ -465,7 +465,7 @@ namespace OpenTK.Platform.X11 {
reply.SelectionEvent.property = IntPtr.Zero;
reply.SelectionEvent.time = e.SelectionRequestEvent.time;
if (e.SelectionRequestEvent.selection == clipboard && e.SelectionRequestEvent.target == xa_utf8_string && clipboard_copy_text != null) {
if (e.SelectionRequestEvent.selection == xa_clipboard && e.SelectionRequestEvent.target == xa_utf8_string && clipboard_copy_text != null) {
reply.SelectionEvent.property = GetSelectionProperty(ref e);
byte[] utf8_data = Encoding.UTF8.GetBytes (clipboard_copy_text);
@ -473,7 +473,7 @@ namespace OpenTK.Platform.X11 {
API.XChangeProperty(window.Display, reply.SelectionEvent.requestor, reply.SelectionEvent.property, xa_utf8_string, 8,
PropertyMode.Replace, (IntPtr)utf8_ptr, utf8_data.Length);
}
} else if (e.SelectionRequestEvent.selection == clipboard && e.SelectionRequestEvent.target == xa_targets) {
} else if (e.SelectionRequestEvent.selection == xa_clipboard && e.SelectionRequestEvent.target == xa_targets) {
reply.SelectionEvent.property = GetSelectionProperty(ref e);
IntPtr[] data = new IntPtr[] { xa_utf8_string, xa_targets };
@ -500,13 +500,10 @@ namespace OpenTK.Platform.X11 {
}
public string GetClipboardText() {
IntPtr owner = API.XGetSelectionOwner(window.Display, clipboard);
IntPtr owner = API.XGetSelectionOwner(window.Display, xa_clipboard);
if (owner == IntPtr.Zero) return ""; // no window owner
Console.WriteLine (window.WinHandle + ", " + window.WindowHandle);
int result = API.XConvertSelection (window.Display, clipboard, xa_utf8_string, data_sel, window.WinHandle, IntPtr.Zero);
Console.WriteLine (owner.ToInt64 () + ", " + result);
API.XConvertSelection(window.Display, xa_clipboard, xa_utf8_string, xa_data_sel, window.WinHandle, IntPtr.Zero);
clipboard_paste_text = null;
// wait up to 1 second for SelectionNotify event to arrive
@ -520,7 +517,7 @@ namespace OpenTK.Platform.X11 {
public void SetClipboardText(string value) {
clipboard_copy_text = value;
API.XSetSelectionOwner(window.Display, clipboard, window.WinHandle, IntPtr.Zero);
API.XSetSelectionOwner(window.Display, xa_clipboard, window.WinHandle, IntPtr.Zero);
}
public Rectangle Bounds {