Dear all.
As I suggested, I made a patch for some cnp apis.
I think copying and pasting APIs are pretty mature to be public
Those are elm_selection_set, elm_selection_clear, elm_selection_get.
And adding cnp prefix for distinction from word, or char selections.
elm_selection_set --> elm_cnp_selection_set
elm_selection_clear --> elm_cnp_selection_clear
elm_selection_get --> elm_cnp_selection_get
And drag and drop APIs should be remained as private.
It has many flaws.
My remain concern is that elm_cnp_* APIs are tightly coupled with xlib.
We should care elm_cnp_* to operate on other window system.
Thanks.
Index: src/lib/elm_entry.c
===================================================================
--- src/lib/elm_entry.c (리ë¹ì 66475)
+++ src/lib/elm_entry.c (ìì
ì¬ë³¸)
@@ -1126,7 +1126,7 @@
formats = ELM_SEL_FORMAT_MARKUP;
if (!wd->textonly)
formats |= ELM_SEL_FORMAT_IMAGE;
- elm_selection_get(ELM_SEL_CLIPBOARD, formats, data, NULL, NULL);
+ elm_cnp_selection_get(ELM_SEL_CLIPBOARD, formats, data, NULL, NULL);
#endif
}
}
@@ -1140,7 +1140,7 @@
if (!wd) return;
sel = edje_object_part_text_selection_get(wd->ent, "elm.text");
if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */
- elm_selection_set(seltype, obj, ELM_SEL_FORMAT_MARKUP, sel);
+ elm_cnp_selection_set(seltype, obj, ELM_SEL_FORMAT_MARKUP, sel);
if (seltype == ELM_SEL_CLIPBOARD)
eina_stringshare_replace(&wd->cut_sel, sel);
}
@@ -1531,7 +1531,7 @@
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- elm_selection_set(ELM_SEL_PRIMARY, data, ELM_SEL_FORMAT_MARKUP, txt);
+ elm_cnp_selection_set(ELM_SEL_PRIMARY, data, ELM_SEL_FORMAT_MARKUP,
txt);
}
#endif
}
@@ -1579,7 +1579,7 @@
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- elm_selection_set(ELM_SEL_PRIMARY, data, ELM_SEL_FORMAT_MARKUP,
+ elm_cnp_selection_set(ELM_SEL_PRIMARY, data,
ELM_SEL_FORMAT_MARKUP,
wd->cut_sel);
#endif
eina_stringshare_del(wd->cut_sel);
@@ -1592,7 +1592,7 @@
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- elm_selection_clear(ELM_SEL_PRIMARY, data);
+ elm_cnp_selection_clear(ELM_SEL_PRIMARY, data);
#endif
}
}
@@ -1614,7 +1614,7 @@
if ((top) && (elm_win_xwindow_get(top)))
{
wd->selection_asked = EINA_TRUE;
- elm_selection_get(type, ELM_SEL_FORMAT_MARKUP, data,
+ elm_cnp_selection_get(type, ELM_SEL_FORMAT_MARKUP, data,
NULL, NULL);
}
#endif
Index: src/lib/elm_widget.h
===================================================================
--- src/lib/elm_widget.h (리ë¹ì 66475)
+++ src/lib/elm_widget.h (ìì
ì¬ë³¸)
@@ -711,51 +711,6 @@
* And yes, elm_widget, should probably be elm_experimental...
* Complaints about this code should go to /dev/null, or failing that nash.
*/
-typedef struct _Elm_Selection_Data Elm_Selection_Data;
-
-typedef Eina_Bool (*Elm_Drop_Cb) (void *d, Evas_Object *o, Elm_Selection_Data
*data);
-
-typedef enum _Elm_Sel_Type
-{
- ELM_SEL_PRIMARY,
- ELM_SEL_SECONDARY,
- ELM_SEL_CLIPBOARD,
- ELM_SEL_XDND,
-
- ELM_SEL_MAX,
-} Elm_Sel_Type;
-
-typedef enum _Elm_Sel_Format
-{
- /** Targets: for matching every atom requesting */
- ELM_SEL_TARGETS = -1,
- /** they come from outside of elm */
- ELM_SEL_FORMAT_NONE = 0x0,
- /** Plain unformated text: Used for things that don't want rich markup */
- ELM_SEL_FORMAT_TEXT = 0x01,
- /** Edje textblock markup, including inline images */
- ELM_SEL_FORMAT_MARKUP = 0x02,
- /** Images */
- ELM_SEL_FORMAT_IMAGE = 0x04,
- /** Vcards */
- ELM_SEL_FORMAT_VCARD = 0x08,
- /** Raw HTMLish 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
-{
- int x, y;
- Elm_Sel_Format format;
- void *data;
- int len;
-};
-
-Eina_Bool elm_selection_set(Elm_Sel_Type selection, Evas_Object
*widget, Elm_Sel_Format format, const char *buf);
-Eina_Bool elm_selection_clear(Elm_Sel_Type selection, Evas_Object
*widget);
-Eina_Bool elm_selection_get(Elm_Sel_Type selection, Elm_Sel_Format
format, Evas_Object *widget, Elm_Drop_Cb datacb, void *udata);
Eina_Bool elm_selection_selection_has_owner(void);
Eina_Bool elm_drop_target_add(Evas_Object *widget, Elm_Sel_Type,
Elm_Drop_Cb, void *);
Eina_Bool elm_drop_target_del(Evas_Object *widget);
Index: src/lib/elm_cnp_helper.c
===================================================================
--- src/lib/elm_cnp_helper.c (리ë¹ì 66475)
+++ src/lib/elm_cnp_helper.c (ìì
ì¬ë³¸)
@@ -408,7 +408,7 @@
}
Eina_Bool
-elm_selection_set(Elm_Sel_Type selection, Evas_Object *widget, Elm_Sel_Format
format, const char *selbuf)
+elm_cnp_selection_set(Elm_Sel_Type selection, Evas_Object *widget,
Elm_Sel_Format format, const char *selbuf)
{
#ifdef HAVE_ELEMENTARY_X
Evas_Object *top = elm_widget_top_get(widget);
@@ -421,7 +421,7 @@
if ((unsigned int)selection >= (unsigned int)ELM_SEL_MAX) return EINA_FALSE;
if (!_elm_cnp_init_count) _elm_cnp_init();
if ((!selbuf) && (format != ELM_SEL_FORMAT_IMAGE))
- return elm_selection_clear(selection, widget);
+ return elm_cnp_selection_clear(selection, widget);
sel = selections + selection;
@@ -439,7 +439,7 @@
}
Eina_Bool
-elm_selection_clear(Elm_Sel_Type selection, Evas_Object *widget)
+elm_cnp_selection_clear(Elm_Sel_Type selection, Evas_Object *widget)
{
#ifdef HAVE_ELEMENTARY_X
Cnp_Selection *sel;
@@ -463,7 +463,7 @@
}
Eina_Bool
-elm_selection_get(Elm_Sel_Type selection, Elm_Sel_Format format,
+elm_cnp_selection_get(Elm_Sel_Type selection, Elm_Sel_Format format,
Evas_Object *widget, Elm_Drop_Cb datacb, void *udata)
{
#ifdef HAVE_ELEMENTARY_X
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in (리ë¹ì 66475)
+++ src/lib/Elementary.h.in (ìì
ì¬ë³¸)
@@ -30394,6 +30394,112 @@
* @}
*/
+ /**
+ * @addtogroup CopyPaste
+ * @{
+ */
+
+ typedef struct _Elm_Selection_Data Elm_Selection_Data;
+ typedef Eina_Bool (*Elm_Drop_Cb) (void *d, Evas_Object *o,
Elm_Selection_Data *data);
+
+ typedef enum _Elm_Sel_Type
+ {
+ ELM_SEL_PRIMARY,
+ ELM_SEL_SECONDARY,
+ ELM_SEL_CLIPBOARD,
+ ELM_SEL_XDND,
+
+ ELM_SEL_MAX,
+ } Elm_Sel_Type;
+
+ typedef enum _Elm_Sel_Format
+ {
+ /** Targets: for matching every atom requesting */
+ ELM_SEL_TARGETS = -1,
+ /** they come from outside of elm */
+ ELM_SEL_FORMAT_NONE = 0x0,
+ /** Plain unformated text: Used for things that don't want rich markup */
+ ELM_SEL_FORMAT_TEXT = 0x01,
+ /** Edje textblock markup, including inline images */
+ ELM_SEL_FORMAT_MARKUP = 0x02,
+ /** Images */
+ ELM_SEL_FORMAT_IMAGE = 0x04,
+ /** Vcards */
+ ELM_SEL_FORMAT_VCARD = 0x08,
+ /** Raw HTMLish 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
+ {
+ int x, y;
+ Elm_Sel_Format format;
+ void *data;
+ int len;
+ };
+
+ /**
+ * @brief Set a data of a widget to copy and paste.
+ *
+ * Append the given callback to the list. This functions will be called
+ * called.
+ *
+ * @param selection selection type for copying and pasting
+ * @param widget The source widget pointer
+ * @param format Type of selection format
+ * @param buf The pointer of data source
+ * @return If EINA_TRUE, setting data is success.
+ *
+ * @ingroup CopyPaste
+ *
+ */
+
+ EAPI Eina_Bool elm_cnp_selection_set(Elm_Sel_Type selection,
Evas_Object *widget, Elm_Sel_Format format, const char *buf);
+
+ /**
+ * @brief Retrive the data from the widget which is set for copying and
pasting.
+ *
+ * Getting the data from the widget which is set for copying and pasting.
+ * Mainly the widget is elm_entry. If then @p datacb and @p udata are
+ * can be NULL. If not, @p datacb and @p udata are used for retriving data.
+ *
+ * @see also elm_cnp_selection_set()
+ *
+ * @param selection selection type for copying and pasting
+ * @param widget The source widget pointer
+ * @param datacb The user data callback if the target widget isn't elm_entry
+ * @param udata The user data pointer for @p datacb
+ * @return If EINA_TRUE, getting data is success.
+ *
+ * @ingroup CopyPaste
+ *
+ */
+
+ EAPI Eina_Bool elm_cnp_selection_get(Elm_Sel_Type selection,
Elm_Sel_Format format, Evas_Object *widget, Elm_Drop_Cb datacb, void *udata);
+
+ /**
+ * @brief Clear the data in the widget which is set for copying and pasting.
+ *
+ * Clear the data in the widget. Normally this function isn't need to call.
+ *
+ * @see also elm_cnp_selection_set()
+ *
+ * @param selection selection type for copying and pasting
+ * @param widget The source widget pointer
+ * @return If EINA_TRUE, clearing data is success.
+ *
+ * @ingroup CopyPaste
+ *
+ */
+
+ EAPI Eina_Bool elm_cnp_selection_clear(Elm_Sel_Type selection,
Evas_Object *widget);
+
+ /**
+ * @}
+ */
+
#ifdef __cplusplus
}
#endif
------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create
new or port existing apps to sell to consumers worldwide. Explore the
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel