Implement Pasting (with command-V) in OS X
This commit is contained in:
parent
d0ac732d8e
commit
c72b3ce5b7
@ -397,3 +397,23 @@ int main (int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char * get_paste_board(void)
|
||||||
|
{
|
||||||
|
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
||||||
|
// only available with 10.6+
|
||||||
|
//NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
|
||||||
|
//NSDictionary *options = [NSDictionary dictionary];
|
||||||
|
|
||||||
|
//BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
|
||||||
|
//if (ok) {
|
||||||
|
// NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options];
|
||||||
|
// NSString * string = [objectsToPaste objectAtIndex:0];
|
||||||
|
// NSLog(@"%@", string);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//NSLog(@"types : %@", [pasteboard types]);
|
||||||
|
NSString * string = [pasteboard stringForType:NSStringPboardType];
|
||||||
|
NSLog(@"pasteboard content : %@", string);
|
||||||
|
return [string UTF8String];
|
||||||
|
}
|
||||||
|
|||||||
@ -78,7 +78,7 @@ extern char * Drop_file_name;
|
|||||||
|
|
||||||
#if defined __HAIKU__
|
#if defined __HAIKU__
|
||||||
#define SHORTCUT_COPY (KEY_c|MOD_ALT)
|
#define SHORTCUT_COPY (KEY_c|MOD_ALT)
|
||||||
#elif defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__)
|
#elif defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) || defined(__macosx__)
|
||||||
#define SHORTCUT_COPY (KEY_c|MOD_META)
|
#define SHORTCUT_COPY (KEY_c|MOD_META)
|
||||||
#else
|
#else
|
||||||
#define SHORTCUT_COPY (KEY_c|MOD_CTRL)
|
#define SHORTCUT_COPY (KEY_c|MOD_CTRL)
|
||||||
@ -86,7 +86,7 @@ extern char * Drop_file_name;
|
|||||||
|
|
||||||
#if defined __HAIKU__
|
#if defined __HAIKU__
|
||||||
#define SHORTCUT_PASTE (KEY_v|MOD_ALT)
|
#define SHORTCUT_PASTE (KEY_v|MOD_ALT)
|
||||||
#elif defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__)
|
#elif defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) || defined(__macosx__)
|
||||||
#define SHORTCUT_PASTE (KEY_v|MOD_META)
|
#define SHORTCUT_PASTE (KEY_v|MOD_META)
|
||||||
#else
|
#else
|
||||||
#define SHORTCUT_PASTE (KEY_v|MOD_CTRL)
|
#define SHORTCUT_PASTE (KEY_v|MOD_CTRL)
|
||||||
|
|||||||
@ -71,6 +71,8 @@
|
|||||||
extern Display * X11_display;
|
extern Display * X11_display;
|
||||||
extern Window X11_window;
|
extern Window X11_window;
|
||||||
extern char * X11_clipboard;
|
extern char * X11_clipboard;
|
||||||
|
#elif defined(__macosx__)
|
||||||
|
const char * get_paste_board(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Virtual keyboard is ON by default on these platforms:
|
// Virtual keyboard is ON by default on these platforms:
|
||||||
@ -405,7 +407,8 @@ bye:
|
|||||||
if (unicode)
|
if (unicode)
|
||||||
*unicode = NULL;
|
*unicode = NULL;
|
||||||
return haiku_get_clipboard();
|
return haiku_get_clipboard();
|
||||||
#elif defined(USE_X11)
|
#elif defined(USE_X11) || defined(__macosx__)
|
||||||
|
#if defined(USE_X11)
|
||||||
Atom selection = XInternAtom(X11_display, "CLIPBOARD", False);
|
Atom selection = XInternAtom(X11_display, "CLIPBOARD", False);
|
||||||
Window selection_owner = XGetSelectionOwner(X11_display, selection);
|
Window selection_owner = XGetSelectionOwner(X11_display, selection);
|
||||||
|
|
||||||
@ -430,11 +433,18 @@ bye:
|
|||||||
{
|
{
|
||||||
char * utf8_str = X11_clipboard;
|
char * utf8_str = X11_clipboard;
|
||||||
X11_clipboard = NULL;
|
X11_clipboard = NULL;
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
// mac OS without X11
|
||||||
|
const char * utf8_str = get_paste_board();
|
||||||
|
if (utf8_str != NULL)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
// UTF8 -> UTF16 and UTF8 -> ANSI conversions
|
// UTF8 -> UTF16 and UTF8 -> ANSI conversions
|
||||||
#if defined(ENABLE_FILENAMES_ICONV)
|
#if defined(ENABLE_FILENAMES_ICONV)
|
||||||
if (unicode != NULL)
|
if (unicode != NULL)
|
||||||
{
|
{
|
||||||
char * input = utf8_str;
|
char * input = (char *)utf8_str;
|
||||||
size_t inbytesleft = strlen(utf8_str);
|
size_t inbytesleft = strlen(utf8_str);
|
||||||
char * output;
|
char * output;
|
||||||
size_t outbytesleft;
|
size_t outbytesleft;
|
||||||
@ -459,7 +469,7 @@ bye:
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
char * ansi_str;
|
char * ansi_str;
|
||||||
char * input = utf8_str;
|
char * input = (char *)utf8_str;
|
||||||
size_t inbytesleft = strlen(utf8_str);
|
size_t inbytesleft = strlen(utf8_str);
|
||||||
char * output;
|
char * output;
|
||||||
size_t outbytesleft;
|
size_t outbytesleft;
|
||||||
@ -473,7 +483,9 @@ bye:
|
|||||||
if (r != (size_t)-1)
|
if (r != (size_t)-1)
|
||||||
{
|
{
|
||||||
*output = '\0';
|
*output = '\0';
|
||||||
|
#if defined(USE_X11)
|
||||||
free(utf8_str);
|
free(utf8_str);
|
||||||
|
#endif
|
||||||
return ansi_str;
|
return ansi_str;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -484,7 +496,13 @@ bye:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// we can get there if the charset conversions failed
|
||||||
|
// return the uf8_string, that's better than nothing
|
||||||
|
#if defined(USE_X11)
|
||||||
return utf8_str;
|
return utf8_str;
|
||||||
|
#else
|
||||||
|
return strdup(utf8_str);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user