Clipboard paste support for Haiku.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1828 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2011-09-25 11:48:37 +00:00
parent afa22ae0ac
commit d34c3d9df5
3 changed files with 29 additions and 2 deletions

View File

@ -121,7 +121,7 @@ byte Native_filesel(byte load)
return CommDlgExtendedError(); return CommDlgExtendedError();
} }
#else #else
#ifndef(__linux__) // This makes no sense on X11-oriented platform. Nothing is really native there. #ifndef __linux__ // This makes no sense on X11-oriented platforms. Nothing is really native there.
#warning "EXPERIMENTAL function for native fileselector not available for this platform!" #warning "EXPERIMENTAL function for native fileselector not available for this platform!"
#endif #endif
return 255; // fail ! return 255; // fail !

View File

@ -20,10 +20,14 @@
#include "struct.h" #include "struct.h"
#ifdef __HAIKU__ #ifdef __HAIKU__
#include <Clipboard.h>
#include <Entry.h> #include <Entry.h>
#include <Volume.h> #include <Volume.h>
#include <string.h>
extern "C" qword haiku_get_free_space(char* path); extern "C" qword haiku_get_free_space(char* path);
extern "C" char* haiku_get_clipboard();
qword haiku_get_free_space(char* path) qword haiku_get_free_space(char* path)
{ {
@ -33,4 +37,17 @@ qword haiku_get_free_space(char* path)
BVolume disk(ref.device); BVolume disk(ref.device);
return (qword) disk.Capacity(); return (qword) disk.Capacity();
} }
char* haiku_get_clipboard()
{
if (be_clipboard->Lock())
{
const char* value;
ssize_t len;
be_clipboard->Data()->FindData("text/plain", B_MIME_TYPE, &(const void*)value, &len);
return strdup(value);
}
return NULL;
}
#endif #endif

View File

@ -179,6 +179,10 @@ char* getClipboard()
CloseClipboard(); CloseClipboard();
} }
} }
#elif defined __HAIKU__
return haiku_get_clipboard();
#else
#warning "Missing platform-specific code in getClipboard function"
#endif #endif
return dst; return dst;
} }
@ -453,7 +457,12 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
input_key=SDLK_RETURN; input_key=SDLK_RETURN;
// Handle paste request on CTRL+v // Handle paste request on CTRL+v
if ((Key & MOD_CTRL) && ((Key & 0xFFF) == 'v')) #if defined __HAIKU__
#define SHORTCUTKEY MOD_ALT
#else
#define SHORTCUTKEY MOD_CTRL
#endif
if ((Key & SHORTCUTKEY) && ((Key & 0xFFF) == 'v'))
{ {
char* data = getClipboard(); char* data = getClipboard();
if (data == NULL) continue; // No clipboard data if (data == NULL) continue; // No clipboard data
@ -465,6 +474,7 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
goto affichage; goto affichage;
} }
} while(input_key==0); } while(input_key==0);
#undef SHORTCUTKEY
} }
Hide_cursor(); Hide_cursor();