Compare commits
4 Commits
master
...
devs/bu5hm
Author | SHA1 | Date |
---|---|---|
Marcel Hollerbach | 139115fd90 | |
Marcel Hollerbach | b142fb0b32 | |
Marcel Hollerbach | d1dc5badef | |
Marcel Hollerbach | ff6b0eec83 |
|
@ -317,11 +317,11 @@ subprojects = [
|
|||
['ecore_drm2' ,['drm'] , false, true, false, false, false, false, ['ecore'], ['libdrm']],
|
||||
['ecore_cocoa' ,['cocoa'] , false, true, false, false, false, false, ['eina'], []],
|
||||
['evas' ,[] , true, true, false, false, true, true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
|
||||
['efreet' ,[] , false, true, false, false, true, false, ['eina', 'efl', 'eo'], []],
|
||||
['ecore_input_evas' ,[] , false, true, false, false, false, false, ['eina', 'evas'], []],
|
||||
['ecore_evas' ,[] , true, true, true, false, false, false, ['evas', 'ector'], []],
|
||||
['ecore_imf' ,[] , true, true, false, false, false, false, ['eina'], []],
|
||||
['embryo' ,[] , false, true, true, false, false, false, ['eina', 'efl', 'eo'], []],
|
||||
['efreet' ,[] , false, true, false, false, true, false, ['eina', 'efl', 'eo'], []],
|
||||
['eio' ,[] , false, true, false, false, true, true, ['eina', 'eet'], []],
|
||||
['efreet' ,[] , false, false, true, false, false, false, ['eina', 'efl', 'eo'], []],
|
||||
['ecore_imf_evas' ,[] , false, true, false, false, false, false, ['eina', 'efl', 'eo'], []],
|
||||
|
|
|
@ -9398,12 +9398,29 @@ _remove(void *data, void *gdata)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Efl_Ui_Win_Data*
|
||||
_fetch_win_data_from_arbitary_obj(Efl_Canvas_Object *obj)
|
||||
{
|
||||
Efl_Ui_Win *win = efl_provider_find(obj, MY_CLASS);
|
||||
if (!win)
|
||||
{
|
||||
Evas *e = evas_object_evas_get(obj);
|
||||
Ecore_Evas *ee = ecore_evas_ecore_evas_get(e);
|
||||
|
||||
win = ecore_evas_data_get(ee, "elm_win");
|
||||
}
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
|
||||
Efl_Ui_Win_Data *pd = efl_data_scope_safe_get(win, MY_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
|
||||
return pd;
|
||||
}
|
||||
|
||||
void
|
||||
_drop_event_register(Eo *obj)
|
||||
{
|
||||
Ui_Dnd_Target target = {obj, EINA_FALSE};
|
||||
Efl_Ui_Win_Data *pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
||||
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||
if (!pd) return;
|
||||
|
||||
eina_inarray_push(pd->drop_target, &target);
|
||||
}
|
||||
|
@ -9412,9 +9429,8 @@ void
|
|||
_drop_event_unregister(Eo *obj)
|
||||
{
|
||||
int idx = -1;
|
||||
Efl_Ui_Win_Data *pd;
|
||||
|
||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
||||
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||
if (!pd) return;
|
||||
|
||||
for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
|
||||
|
@ -9434,9 +9450,7 @@ _drop_event_unregister(Eo *obj)
|
|||
void
|
||||
_selection_changed_event_register(Eo *obj)
|
||||
{
|
||||
Efl_Ui_Win_Data *pd;
|
||||
|
||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
||||
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||
if (!pd) return;
|
||||
|
||||
eina_array_push(pd->selection_changed, obj);
|
||||
|
@ -9444,9 +9458,7 @@ _selection_changed_event_register(Eo *obj)
|
|||
void
|
||||
_selection_changed_event_unregister(Eo *obj)
|
||||
{
|
||||
Efl_Ui_Win_Data *pd;
|
||||
|
||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
||||
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||
if (!pd) return;
|
||||
|
||||
eina_array_remove(pd->selection_changed, _remove, obj);
|
||||
|
|
|
@ -97,13 +97,30 @@ _deliver_content(Eo *obj, void *data, const Eina_Value value)
|
|||
return EINA_VALUE_EMPTY;
|
||||
}
|
||||
|
||||
|
||||
static Efl_Ui_Win*
|
||||
_fetch_win(Efl_Canvas_Object *obj)
|
||||
{
|
||||
Efl_Ui_Win *win = efl_provider_find(obj, EFL_UI_WIN_CLASS);
|
||||
if (!win)
|
||||
{
|
||||
Evas *e = evas_object_evas_get(obj);
|
||||
Ecore_Evas *ee = ecore_evas_ecore_evas_get(e);
|
||||
|
||||
win = ecore_evas_data_get(ee, "elm_win");
|
||||
}
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
|
||||
return win;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_drop_cb(void *data, const Efl_Event *ev)
|
||||
{
|
||||
Efl_Ui_Drop_Dropped_Event *event = ev->info;
|
||||
Elm_Drop_Target *target = data;
|
||||
target->action = _string_to_action(event->action);
|
||||
efl_future_then(ev->object, efl_ui_dnd_drop_data_get(ev->object, _default_seat(ev->object), eina_array_iterator_new(target->mime_types)),
|
||||
efl_future_then(ev->object, efl_ui_dnd_drop_data_get(elm_widget_is(ev->object) ? ev->object : _fetch_win(ev->object), _default_seat(ev->object), eina_array_iterator_new(target->mime_types)),
|
||||
.success = _deliver_content,
|
||||
.data = target
|
||||
);
|
||||
|
@ -133,7 +150,11 @@ _format_to_mime_array(Elm_Sel_Format format)
|
|||
Eina_Array *ret = eina_array_new(10);
|
||||
|
||||
if (format & ELM_SEL_FORMAT_TEXT)
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
{
|
||||
eina_array_push(ret, "text/plain");
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
}
|
||||
if (format & ELM_SEL_FORMAT_MARKUP)
|
||||
eina_array_push(ret, "application/x-elementary-markup");
|
||||
if (format & ELM_SEL_FORMAT_IMAGE)
|
||||
|
@ -178,7 +199,7 @@ elm_drop_target_add(Evas_Object *obj, Elm_Sel_Format format,
|
|||
target->format = format;
|
||||
|
||||
efl_event_callback_array_add(obj, drop_target_cb(), target);
|
||||
|
||||
_drop_event_register(obj); //this is ensuring that we are also supporting none widgets
|
||||
if (!target_register)
|
||||
target_register = eina_hash_pointer_new(NULL);
|
||||
eina_hash_list_append(target_register, &obj, target);
|
||||
|
@ -223,6 +244,7 @@ elm_drop_target_del(Evas_Object *obj, Elm_Sel_Format format,
|
|||
efl_event_callback_array_del(obj, drop_target_cb(), eina_list_data_get(found));
|
||||
eina_hash_list_remove(target_register, &obj, target);
|
||||
eina_array_free(target->mime_types);
|
||||
_drop_event_unregister(obj); //this is ensuring that we are also supporting none widgets
|
||||
free(target);
|
||||
}
|
||||
|
||||
|
|
|
@ -630,9 +630,6 @@ _elm_slider_efl_ui_widget_widget_input_event_handler(Eo *obj, Elm_Slider_Data *s
|
|||
else
|
||||
_drag_down(obj, NULL, NULL, NULL);
|
||||
efl_input_processed_set(ev, EINA_TRUE);
|
||||
ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
|
||||
sd->wheel_indicator_timer =
|
||||
ecore_timer_add(0.5, _wheel_indicator_timer_cb, obj);
|
||||
}
|
||||
else return EINA_FALSE;
|
||||
|
||||
|
@ -640,6 +637,13 @@ _elm_slider_efl_ui_widget_widget_input_event_handler(Eo *obj, Elm_Slider_Data *s
|
|||
_val_fetch(obj, EINA_TRUE);
|
||||
evas_object_smart_changed(obj);
|
||||
|
||||
if (eo_event->desc == EFL_EVENT_POINTER_WHEEL)
|
||||
{
|
||||
ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
|
||||
sd->wheel_indicator_timer =
|
||||
ecore_timer_add(0.5, _wheel_indicator_timer_cb, obj);
|
||||
}
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include <Ecore_X.h>
|
||||
#include <Ecore_X_Atoms.h>
|
||||
#include <Efreet.h>
|
||||
|
||||
#ifdef BUILD_ECORE_EVAS_SOFTWARE_X11
|
||||
# include <Evas_Engine_Software_X11.h>
|
||||
|
@ -3858,12 +3859,39 @@ _create_deliveriy_content(unsigned long int size, const void *mem, const char *m
|
|||
static void
|
||||
_deliver_content(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_Selection_Buffer selection, Ecore_X_Event_Selection_Notify *ev)
|
||||
{
|
||||
Ecore_X_Selection_Data *x11_data = ev->data;
|
||||
Eina_Content *result = NULL;
|
||||
Eina_Stringshare *mime_type = _decrypt_type(edata->selection_data[selection].requested_type);
|
||||
|
||||
if (eina_str_has_prefix(mime_type,"text"))
|
||||
if (eina_streq(mime_type, "text/uri-list"))
|
||||
{
|
||||
Ecore_X_Selection_Data_Files *files = ev->data;
|
||||
Efreet_Uri *uri;
|
||||
Eina_Strbuf *strbuf;
|
||||
int i;
|
||||
|
||||
strbuf = eina_strbuf_new();
|
||||
|
||||
for (i = 0; i < files->num_files ; i++)
|
||||
{
|
||||
uri = efreet_uri_decode(files->files[i]);
|
||||
if (uri)
|
||||
{
|
||||
eina_strbuf_append(strbuf, uri->path);
|
||||
efreet_uri_free(uri);
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_strbuf_append(strbuf, files->files[i]);
|
||||
}
|
||||
if (i < (files->num_files - 1))
|
||||
eina_strbuf_append(strbuf, "\n");
|
||||
}
|
||||
result = _create_deliveriy_content(eina_strbuf_length_get(strbuf) + 1, eina_strbuf_string_get(strbuf), mime_type);
|
||||
eina_strbuf_free(strbuf);
|
||||
}
|
||||
else if (eina_str_has_prefix(mime_type,"text"))
|
||||
{
|
||||
Ecore_X_Selection_Data *x11_data = ev->data;
|
||||
//ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
|
||||
void *null_terminated = eina_memdup(x11_data->data, x11_data->length, EINA_TRUE);
|
||||
|
||||
|
@ -3872,6 +3900,7 @@ _deliver_content(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_S
|
|||
}
|
||||
else if (eina_str_has_prefix(mime_type,"image"))
|
||||
{
|
||||
Ecore_X_Selection_Data *x11_data = ev->data;
|
||||
Eina_Content *tmp_container = eina_content_new((Eina_Slice){.len = x11_data->length, .mem = x11_data->data}, mime_type);
|
||||
const char *file = eina_content_as_file(tmp_container);
|
||||
|
||||
|
@ -3880,6 +3909,7 @@ _deliver_content(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_S
|
|||
}
|
||||
else
|
||||
{
|
||||
Ecore_X_Selection_Data *x11_data = ev->data;
|
||||
result = _create_deliveriy_content(x11_data->length, x11_data->data, mime_type);
|
||||
}
|
||||
EINA_SAFETY_ON_NULL_RETURN(result);
|
||||
|
|
|
@ -14,7 +14,7 @@ endif
|
|||
|
||||
shared_module(mod_full_name, engine_src,
|
||||
include_directories : config_dir + [engine_include_dir],
|
||||
dependencies : [eina, ecore_evas, ecore_input_evas] + engine_deps,
|
||||
dependencies : [eina, ecore_evas, ecore_input_evas, efreet] + engine_deps,
|
||||
install : true,
|
||||
install_dir : mod_install_dir,
|
||||
name_suffix : sys_mod_extension
|
||||
|
|
Loading…
Reference in New Issue