},
};
-static Cnp_Selection selections[ELM_SEL_TYPE_MAX] = {
+static Cnp_Selection selections[ELM_SEL_TYPE_CLIPBOARD + 1] = {
ARRAYINIT(ELM_SEL_TYPE_PRIMARY) {
.debug = "Primary",
.ecore_sel = ECORE_X_SELECTION_PRIMARY,
.clear = ecore_x_selection_secondary_clear,
.request = ecore_x_selection_secondary_request,
},
+ ARRAYINIT(ELM_SEL_TYPE_XDND) {
+ .debug = "XDnD",
+ .ecore_sel = ECORE_X_SELECTION_XDND,
+ .request = ecore_x_selection_xdnd_request,
+ },
ARRAYINIT(ELM_SEL_TYPE_CLIPBOARD) {
.debug = "Clipboard",
.ecore_sel = ECORE_X_SELECTION_CLIPBOARD,
.clear = ecore_x_selection_clipboard_clear,
.request = ecore_x_selection_clipboard_request,
},
- ARRAYINIT(ELM_SEL_TYPE_XDND) {
- .debug = "XDnD",
- .ecore_sel = ECORE_X_SELECTION_XDND,
- .request = ecore_x_selection_xdnd_request,
- },
};
/* Data for DND in progress */
if (top) xwin = elm_win_xwindow_get(top);
else xwin = elm_win_xwindow_get(obj);
- if ((!xwin) || (selection >= ELM_SEL_TYPE_MAX))
+ if ((!xwin) || (selection > ELM_SEL_TYPE_CLIPBOARD))
return EINA_FALSE;
if (!_elm_cnp_init_count) _elm_cnp_init();
if ((!selbuf) && (format != ELM_SEL_FORMAT_IMAGE))
#ifdef HAVE_ELEMENTARY_X
Cnp_Selection *sel;
- if ((unsigned int)selection >= (unsigned int)ELM_SEL_TYPE_MAX)
+ if ((unsigned int)selection > (unsigned int)ELM_SEL_TYPE_CLIPBOARD)
return EINA_FALSE;
if (!_elm_cnp_init_count) _elm_cnp_init();
Evas_Object *top;
Cnp_Selection *sel;
- if (selection >= ELM_SEL_TYPE_MAX)
+ if (selection > ELM_SEL_TYPE_CLIPBOARD)
return EINA_FALSE;
if (!_elm_cnp_init_count) _elm_cnp_init();
Cnp_Selection *sel;
int i;
- for (i = 0; i < ELM_SEL_TYPE_MAX; i++)
+ for (i = 0; i <= ELM_SEL_TYPE_CLIPBOARD; i++)
{
if (selections[i].ecore_sel == ev->selection) break;
}
cnp_debug("selection %d clear\n", i);
/* Not me... Don't care */
- if (i == ELM_SEL_TYPE_MAX) return ECORE_CALLBACK_PASS_ON;
+ if (i > ELM_SEL_TYPE_CLIPBOARD) return ECORE_CALLBACK_PASS_ON;
sel = selections + i;
sel->active = EINA_FALSE;
cnp_debug("selection notify callback: %d\n",ev->selection);
switch (ev->selection)
{
- case ECORE_X_SELECTION_CLIPBOARD:
- sel = selections + ELM_SEL_TYPE_CLIPBOARD;
- break;
case ECORE_X_SELECTION_PRIMARY:
sel = selections + ELM_SEL_TYPE_PRIMARY;
break;
case ECORE_X_SELECTION_XDND:
sel = selections + ELM_SEL_TYPE_XDND;
break;
+ case ECORE_X_SELECTION_CLIPBOARD:
+ sel = selections + ELM_SEL_TYPE_CLIPBOARD;
+ break;
default:
return ECORE_CALLBACK_PASS_ON;
}
Cnp_Selection *sel = selections + *((int *)data);
if (sel->active &&
(sel->format >= ELM_SEL_FORMAT_TARGETS) &&
- (sel->format < ELM_SEL_FORMAT_MAX))
+ (sel->format <= ELM_SEL_FORMAT_HTML))
return sel->format;
}
return ELM_SEL_FORMAT_NONE;
/**
- * @addtogroup CopyPaste
+ * @defgroup CopyPaste
+ *
+ * Implement the copy and paste + clipboard functionality, in order to
+ * share data across application windows.
+ *
+ * Contains functions to select a portion of text, stick it to a clipboard
+ * and to paste the selection to an appropriate place.
+ *
+ *
+ *
* @{
*/
-
typedef struct _Elm_Selection_Data Elm_Selection_Data;
typedef Eina_Bool (*Elm_Drop_Cb)(void *d, Evas_Object *o, Elm_Selection_Data *data);
/**
- * Types of X window selection property names.
+ * Defines the types of selection property names.
* Kindly refer to http://www.x.org/docs/X11/xlib.pdf
* for more details.
*/
typedef enum
{
ELM_SEL_TYPE_PRIMARY, //primary text selection
- ELM_SEL_TYPE_SECONDARY,
+ ELM_SEL_TYPE_SECONDARY, // used when primary selection is in use.
ELM_SEL_TYPE_XDND, //drag and drop
- ELM_SEL_TYPE_CLIPBOARD,
-
- ELM_SEL_TYPE_MAX,
+ ELM_SEL_TYPE_CLIPBOARD, // highlighted text
} Elm_Sel_Type;
typedef enum
ELM_SEL_FORMAT_VCARD = 0x08,
/** Raw HTML-like things for widgets that want that stuff (hello webkit!) */
ELM_SEL_FORMAT_HTML = 0x10,
-
- ELM_SEL_FORMAT_MAX
} Elm_Sel_Format;
struct _Elm_Selection_Data