EAPI extern int ECORE_COCOA_EVENT_RESIZE;
EAPI extern int ECORE_COCOA_EVENT_EXPOSE;
EAPI extern int ECORE_COCOA_EVENT_WINDOW_DESTROY;
+EAPI extern int ECORE_COCOA_EVENT_DATA_SOURCE_SEND;
+EAPI extern int ECORE_COCOA_EVENT_SELECTION_DATA_READY;
typedef void * Ecore_Cocoa_Window_Id;
typedef struct _Ecore_Cocoa_Event_Video_Resize Ecore_Cocoa_Event_Video_Resize;
int dummy;
};
+typedef enum
+{
+ ECORE_COCOA_CNP_TYPE_UNKNOWN = 0,
+ ECORE_COCOA_CNP_TYPE_STRING = (1 << 0),
+ ECORE_COCOA_CNP_TYPE_MARKUP = (1 << 1),
+ ECORE_COCOA_CNP_TYPE_IMAGE = (1 << 2),
+ ECORE_COCOA_CNP_TYPE_HTML = (1 << 3)
+} Ecore_Cocoa_Cnp_Type;
+
/* Core */
EAPI int ecore_cocoa_init(void);
EAPI Ecore_Cocoa_Window_Id ecore_cocoa_window_get_window_id(const Ecore_Cocoa_Window *window);
+
+/**
+ * @return false on error, true otherwise
+ *
+ * @ingroup Ecore_Cocoa_Cpn_Group
+ */
+EAPI Eina_Bool ecore_cocoa_selection_clipboard_set(const void *data, int size, Ecore_Cocoa_Cnp_Type type);
+
+/**
+ * @return false if type not found or on error, true otherwise
+ *
+ * @ingroup Ecore_Cocoa_Cnp_Group
+ */
+EAPI void *ecore_cocoa_selection_clipboard_get(int *size, Ecore_Cocoa_Cnp_Type type,
+ Ecore_Cocoa_Cnp_Type *retrieved_types);
+
+/**
+ * @ingroup Ecore_Cocoa_Cnp_Group
+ */
+EAPI void ecore_cocoa_selection_clipboard_clear(void);
+
EAPI void ecore_cocoa_window_cursor_set(Ecore_Cocoa_Window *win, Ecore_Cocoa_Cursor c);
EAPI void ecore_cocoa_window_cursor_show(Ecore_Cocoa_Window *win, Eina_Bool show);
EAPI int ECORE_COCOA_EVENT_RESIZE = 0;
EAPI int ECORE_COCOA_EVENT_EXPOSE = 0;
EAPI int ECORE_COCOA_EVENT_WINDOW_DESTROY = 0;
+EAPI int ECORE_COCOA_EVENT_DATA_SOURCE_SEND = 0;
+EAPI int ECORE_COCOA_EVENT_SELECTION_DATA_READY = 0;
static int _ecore_cocoa_init_count = 0;
}
DBG("");
-
+
ECORE_COCOA_EVENT_GOT_FOCUS = ecore_event_type_new();
ECORE_COCOA_EVENT_LOST_FOCUS = ecore_event_type_new();
ECORE_COCOA_EVENT_RESIZE = ecore_event_type_new();
ECORE_COCOA_EVENT_EXPOSE = ecore_event_type_new();
ECORE_COCOA_EVENT_WINDOW_DESTROY = ecore_event_type_new();
+ ECORE_COCOA_EVENT_DATA_SOURCE_SEND = ecore_event_type_new();
+ ECORE_COCOA_EVENT_SELECTION_DATA_READY = ecore_event_type_new();
+
/* Init the Application handler */
[Ecore_Cocoa_Application sharedApplication];
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Eina.h>
+#include <Evas.h>
+#import <Cocoa/Cocoa.h>
+#import "ecore_cocoa_window.h"
+#include "ecore_cocoa_private.h"
+#import "ecore_cocoa_app.h"
+
+EAPI Eina_Bool
+ecore_cocoa_selection_clipboard_set(const void *data,
+ int size,
+ Ecore_Cocoa_Cnp_Type type)
+{
+ static NSMutableArray *objects = nil;
+ NSPasteboard *pb;
+ NSString *str = nil;
+ BOOL ok = YES;
+
+ if (!objects)
+ objects = [[NSMutableArray alloc] init];
+
+ pb = [NSPasteboard generalPasteboard];
+ [pb clearContents];
+
+ if (type & ECORE_COCOA_CNP_TYPE_STRING)
+ {
+ str = [[NSString alloc] initWithBytes: data
+ length: size
+ encoding: NSUTF8StringEncoding];
+ [objects addObject: str];
+ }
+ if (type & ECORE_COCOA_CNP_TYPE_MARKUP)
+ {
+ char *utf8;
+
+ utf8 = evas_textblock_text_markup_to_utf8(NULL, (const char *)data);
+ str = [[NSString alloc] initWithBytes: utf8
+ length: strlen(utf8) // XXX strlen() ?
+ encoding: NSUTF8StringEncoding];
+ free(utf8);
+ [objects addObject: str];
+ }
+ if (type & ECORE_COCOA_CNP_TYPE_IMAGE)
+ {
+ WRN("Image CNP: NOT IMPLEMENTED");
+ }
+ if (type & ECORE_COCOA_CNP_TYPE_HTML)
+ {
+ WRN("HTML CNP: NOT IMPLEMENTED");
+ }
+
+ /* Write to pasteboard */
+ if ([objects count] > 0)
+ {
+ ok = [pb writeObjects: objects];
+ [objects removeAllObjects];
+ }
+
+ return (ok) ? EINA_TRUE : EINA_FALSE;
+}
+
+
+EAPI void *
+ecore_cocoa_selection_clipboard_get(int *size,
+ Ecore_Cocoa_Cnp_Type type,
+ Ecore_Cocoa_Cnp_Type *retrieved_types)
+{
+ static NSMutableArray *classes = nil;
+ void *data;
+ NSDictionary *options;
+ NSPasteboard *pb;
+ NSArray *items;
+ unsigned int len;
+ BOOL string_class = NO;
+ Ecore_Cocoa_Cnp_Type types = 0;
+
+ if (!classes)
+ classes = [[NSMutableArray alloc] init];
+
+ if ((type & ECORE_COCOA_CNP_TYPE_STRING) ||
+ (type & ECORE_COCOA_CNP_TYPE_MARKUP))
+ {
+ string_class = YES;
+ [classes addObject: [NSString class]];
+ }
+ if (type & ECORE_COCOA_CNP_TYPE_IMAGE)
+ {
+ WRN("Image CNP: NOT IMPLEMENTED");
+ }
+ if (type & ECORE_COCOA_CNP_TYPE_HTML)
+ {
+ WRN("HTML CNP: NOT IMPLEMENTED");
+ }
+
+ if ([classes count] <= 0)
+ {
+ ERR("No registered classes... got nothing from pasteboard");
+ goto fail;
+ }
+
+ pb = [NSPasteboard generalPasteboard];
+ options = [NSDictionary dictionary];
+ items = [pb readObjectsForClasses: classes
+ options: options];
+ if (!items)
+ {
+ ERR("No items in the clipboard");
+ goto remove_fail;
+ }
+ if ([items count] != 1)
+ {
+ ERR("%lu items in pasteboard. Only one at the time can be handled",
+ [items count]);
+ goto fail;
+ }
+
+ if (string_class)
+ {
+ NSString *str = [items objectAtIndex: 0];
+ data = (void *)[str UTF8String];
+ len = [str lengthOfBytesUsingEncoding: NSUTF8StringEncoding];
+ data = strndup((const char *)data, len);
+
+ if (EINA_UNLIKELY(!data))
+ {
+ CRI("Failed to strndup() string \"%s\" (len: %u)",
+ (const char *)data, len);
+ goto remove_fail;
+ }
+ types |= ECORE_COCOA_CNP_TYPE_STRING;
+
+#if 0
+ if (type & ECORE_COCOA_CNP_TYPE_MARKUP)
+ {
+ char *markup;
+ markup = evas_textblock_text_utf8_to_markup(NULL, data);
+ free(data);
+ data = markup;
+ if (EINA_UNLIKELY(!data))
+ {
+ CRI("Failed to retrieve markup from UTF8");
+ goto remove_fail;
+ }
+ len = strlen(markup);
+ }
+#endif
+ }
+
+ if (!types)
+ {
+ ERR("No types retrieved!");
+ goto remove_fail;
+ }
+
+ [classes removeAllObjects];
+
+ if (size) *size = len;
+ if (retrieved_types) *retrieved_types = types;
+ return data;
+
+remove_fail:
+ [classes removeAllObjects];
+fail:
+ if (size) *size = 0;
+ if (retrieved_types) *retrieved_types = 0;
+ return NULL;
+}
+
+EAPI void
+ecore_cocoa_selection_clipboard_clear(void)
+{
+ [[NSPasteboard generalPasteboard] clearContents];
+}