X11/CnP: remove X11 invocations from elm_entry

Code specific to X11 should not be part of elm_entry and can be easily
replaced with elm_cnp APIs.

@fix T2183
This commit is contained in:
Daniel Zaoui 2015-06-23 18:11:05 +03:00
parent 185e88db91
commit 50fa3bfe7c
2 changed files with 29 additions and 128 deletions

View File

@ -1410,6 +1410,19 @@ _paste_cb(void *data,
(data, ELM_SEL_TYPE_CLIPBOARD, formats, _selection_data_cb, NULL); (data, ELM_SEL_TYPE_CLIPBOARD, formats, _selection_data_cb, NULL);
} }
static void
_selection_clear(void *data, Elm_Sel_Type selection)
{
ELM_ENTRY_DATA_GET(data, sd);
if (!sd->have_selection) return;
if ((selection == ELM_SEL_TYPE_CLIPBOARD) ||
(selection == ELM_SEL_TYPE_PRIMARY))
{
elm_entry_select_none(data);
}
}
static void static void
_selection_store(Elm_Sel_Type seltype, _selection_store(Elm_Sel_Type seltype,
Evas_Object *obj) Evas_Object *obj)
@ -1423,6 +1436,7 @@ _selection_store(Elm_Sel_Type seltype,
elm_cnp_selection_set elm_cnp_selection_set
(obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel)); (obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel));
elm_cnp_selection_loss_callback_set(obj, seltype, _selection_clear, obj);
if (seltype == ELM_SEL_TYPE_CLIPBOARD) if (seltype == ELM_SEL_TYPE_CLIPBOARD)
eina_stringshare_replace(&sd->cut_sel, sel); eina_stringshare_replace(&sd->cut_sel, sel);
} }
@ -2055,8 +2069,11 @@ _entry_selection_start_signal_cb(void *data,
top = elm_widget_top_get(data); top = elm_widget_top_get(data);
if (txt && top && (elm_win_window_id_get(top))) if (txt && top && (elm_win_window_id_get(top)))
elm_cnp_selection_set(data, ELM_SEL_TYPE_PRIMARY, {
ELM_SEL_FORMAT_MARKUP, txt, strlen(txt)); elm_cnp_selection_set(data, ELM_SEL_TYPE_PRIMARY,
ELM_SEL_FORMAT_MARKUP, txt, strlen(txt));
elm_cnp_selection_loss_callback_set(data, ELM_SEL_TYPE_PRIMARY, _selection_clear, data);
}
elm_object_focus_set(data, EINA_TRUE); elm_object_focus_set(data, EINA_TRUE);
} }
@ -2106,28 +2123,18 @@ _entry_selection_cleared_signal_cb(void *data,
sd->have_selection = EINA_FALSE; sd->have_selection = EINA_FALSE;
evas_object_smart_callback_call(data, SIG_SELECTION_CLEARED, NULL); evas_object_smart_callback_call(data, SIG_SELECTION_CLEARED, NULL);
if (sd->sel_notify_handler) if (sd->cut_sel)
{ {
if (sd->cut_sel) elm_cnp_selection_set
{ (data, ELM_SEL_TYPE_PRIMARY, ELM_SEL_FORMAT_MARKUP,
Evas_Object *top; sd->cut_sel, eina_stringshare_strlen(sd->cut_sel));
elm_cnp_selection_loss_callback_set(data, ELM_SEL_TYPE_PRIMARY, _selection_clear, data);
top = elm_widget_top_get(data); ELM_SAFE_FREE(sd->cut_sel, eina_stringshare_del);
if ((top) && (elm_win_window_id_get(top))) }
elm_cnp_selection_set else
(data, ELM_SEL_TYPE_PRIMARY, ELM_SEL_FORMAT_MARKUP, {
sd->cut_sel, eina_stringshare_strlen(sd->cut_sel)); elm_object_cnp_selection_clear(data, ELM_SEL_TYPE_PRIMARY);
ELM_SAFE_FREE(sd->cut_sel, eina_stringshare_del);
}
else
{
Evas_Object *top;
top = elm_widget_top_get(data);
if ((top) && (elm_win_window_id_get(top)))
elm_object_cnp_selection_clear(data, ELM_SEL_TYPE_PRIMARY);
}
} }
_hide_selection_handler(data); _hide_selection_handler(data);
} }
@ -2515,87 +2522,6 @@ _entry_mouse_triple_signal_cb(void *data,
evas_object_smart_callback_call(data, SIG_CLICKED_TRIPLE, NULL); evas_object_smart_callback_call(data, SIG_CLICKED_TRIPLE, NULL);
} }
#ifdef HAVE_ELEMENTARY_X
static Eina_Bool
_event_selection_notify(void *data,
int type EINA_UNUSED,
void *event)
{
Ecore_X_Event_Selection_Notify *ev = event;
ELM_ENTRY_DATA_GET(data, sd);
if ((!sd->selection_asked) && (!sd->drag_selection_asked))
return ECORE_CALLBACK_PASS_ON;
if ((ev->selection == ECORE_X_SELECTION_CLIPBOARD) ||
(ev->selection == ECORE_X_SELECTION_PRIMARY))
{
Ecore_X_Selection_Data_Text *text_data;
text_data = ev->data;
if (text_data->data.content == ECORE_X_SELECTION_CONTENT_TEXT)
{
if (text_data->text)
{
char *txt = _elm_util_text_to_mkup(text_data->text);
if (txt)
{
elm_entry_entry_insert(data, txt);
free(txt);
}
}
}
sd->selection_asked = EINA_FALSE;
}
else if (ev->selection == ECORE_X_SELECTION_XDND)
{
Ecore_X_Selection_Data_Text *text_data;
text_data = ev->data;
if (text_data->data.content == ECORE_X_SELECTION_CONTENT_TEXT)
{
if (text_data->text)
{
char *txt = _elm_util_text_to_mkup(text_data->text);
if (txt)
{
/* Massive FIXME: this should be at the drag point */
elm_entry_entry_insert(data, txt);
free(txt);
}
}
}
sd->drag_selection_asked = EINA_FALSE;
ecore_x_dnd_send_finished();
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_event_selection_clear(void *data EINA_UNUSED,
int type EINA_UNUSED,
void *event EINA_UNUSED)
{
Ecore_X_Event_Selection_Clear *ev = event;
ELM_ENTRY_DATA_GET(data, sd);
if (!sd->have_selection) return ECORE_CALLBACK_PASS_ON;
if ((ev->selection == ECORE_X_SELECTION_CLIPBOARD) ||
(ev->selection == ECORE_X_SELECTION_PRIMARY))
{
elm_entry_select_none(data);
}
return ECORE_CALLBACK_PASS_ON;
}
#endif
static Evas_Object * static Evas_Object *
_item_get(void *data, _item_get(void *data,
Evas_Object *edje EINA_UNUSED, Evas_Object *edje EINA_UNUSED,
@ -3404,10 +3330,6 @@ _end_handler_mouse_move_cb(void *data,
EOLIAN static void EOLIAN static void
_elm_entry_evas_object_smart_add(Eo *obj, Elm_Entry_Data *priv) _elm_entry_evas_object_smart_add(Eo *obj, Elm_Entry_Data *priv)
{ {
#ifdef HAVE_ELEMENTARY_X
Evas_Object *top;
#endif
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
@ -3540,21 +3462,6 @@ _elm_entry_evas_object_smart_add(Eo *obj, Elm_Entry_Data *priv)
priv->autocapital_type = (Elm_Autocapital_Type)edje_object_part_text_autocapital_type_get priv->autocapital_type = (Elm_Autocapital_Type)edje_object_part_text_autocapital_type_get
(priv->entry_edje, "elm.text"); (priv->entry_edje, "elm.text");
#ifdef HAVE_ELEMENTARY_X
top = elm_widget_top_get(obj);
if (!eo_isa(top, ELM_WIN_CLASS))
top = ecore_evas_data_get(ecore_evas_ecore_evas_get(evas_object_evas_get(obj)), "elm_win");
if ((top) && (elm_win_xwindow_get(top)))
{
priv->sel_notify_handler =
ecore_event_handler_add
(ECORE_X_EVENT_SELECTION_NOTIFY, _event_selection_notify, obj);
priv->sel_clear_handler =
ecore_event_handler_add
(ECORE_X_EVENT_SELECTION_CLEAR, _event_selection_clear, obj);
}
#endif
entries = eina_list_prepend(entries, obj); entries = eina_list_prepend(entries, obj);
// module - find module for entry // module - find module for entry
@ -3638,10 +3545,6 @@ _elm_entry_evas_object_smart_del(Eo *obj, Elm_Entry_Data *sd)
evas_object_del(sd->mgf_clip); evas_object_del(sd->mgf_clip);
entries = eina_list_remove(entries, obj); entries = eina_list_remove(entries, obj);
#ifdef HAVE_ELEMENTARY_X
ecore_event_handler_del(sd->sel_notify_handler);
ecore_event_handler_del(sd->sel_clear_handler);
#endif
eina_stringshare_del(sd->cut_sel); eina_stringshare_del(sd->cut_sel);
eina_stringshare_del(sd->text); eina_stringshare_del(sd->text);
ecore_job_del(sd->deferred_recalc_job); ecore_job_del(sd->deferred_recalc_job);

View File

@ -38,8 +38,6 @@ struct _Elm_Entry_Data
Evas_Object *start_handler; Evas_Object *start_handler;
Evas_Object *end_handler; Evas_Object *end_handler;
Ecore_Job *deferred_recalc_job; Ecore_Job *deferred_recalc_job;
Ecore_Event_Handler *sel_notify_handler;
Ecore_Event_Handler *sel_clear_handler;
Ecore_Timer *longpress_timer; Ecore_Timer *longpress_timer;
Ecore_Timer *delay_write; Ecore_Timer *delay_write;
/* for deferred appending */ /* for deferred appending */