summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiep Ha <thiepha@gmail.com>2017-12-27 16:49:54 +0900
committerThiep Ha <thiepha@gmail.com>2017-12-27 16:49:54 +0900
commit0b7212836b2bf62ad722eb24cfecf9a8f1591c0e (patch)
treed125063fc7516cebee42b81bf98fd100782d96c5
parent8deda7dd91c9d4a7338bb596b70dc447a053b343 (diff)
downloadefl-0b7212836b2bf62ad722eb24cfecf9a8f1591c0e.tar.gz
dnd: make drag_delay to property + anim time to config
-rw-r--r--src/lib/elementary/efl_ui_dnd.c31
-rw-r--r--src/lib/elementary/efl_ui_dnd.eo2
-rw-r--r--src/lib/elementary/efl_ui_dnd_container.eo17
-rw-r--r--src/lib/elementary/elm_config.c21
-rw-r--r--src/lib/elementary/elm_priv.h2
5 files changed, 62 insertions, 11 deletions
diff --git a/src/lib/elementary/efl_ui_dnd.c b/src/lib/elementary/efl_ui_dnd.c
index 6cd3502191..15d80c8f3e 100644
--- a/src/lib/elementary/efl_ui_dnd.c
+++ b/src/lib/elementary/efl_ui_dnd.c
@@ -16,7 +16,11 @@
//#define MY_CLASS_DRAG EFL_UI_DND_DRAG_MIXIN
//#define MY_CLASS_DROP EFL_UI_DND_DROP_MIXIN
-//FIXME: Efl_Selection_Format should be changed to Efl_Data_Format
+typedef struct _Efl_Ui_Dnd_Container_Data Efl_Ui_Dnd_Container_Data;
+struct _Efl_Ui_Dnd_Container_Data
+{
+ unsigned int drag_delay_time;
+};
static inline Eo*
_selection_manager_get(Eo *obj)
@@ -85,8 +89,21 @@ _efl_ui_dnd_drop_target_del(Eo *obj, void *pd, Efl_Selection_Format format, unsi
efl_selection_manager_drop_target_del(sel_man, obj, format, seat);
}
+EOLIAN static double
+_efl_ui_dnd_container_drag_delay_time_get(Eo *obj, Efl_Ui_Dnd_Container_Data *pd)
+{
+ return pd->drag_delay_time;
+}
+
+EOLIAN static void
+_efl_ui_dnd_container_drag_delay_time_set(Eo *obj, Efl_Ui_Dnd_Container_Data *pd, double drag_delay_time)
+{
+ pd->drag_delay_time = drag_delay_time;
+}
+
EOLIAN static void
-_efl_ui_dnd_container_drag_item_add(Eo *obj, void *pd, double time_to_drag, double anim_time,
+//_efl_ui_dnd_container_drag_item_add(Eo *obj, Efl_Ui_Dnd_Cointaner_Data *pd, double time_to_drag, double anim_time,
+_efl_ui_dnd_container_drag_item_add(Eo *obj, Efl_Ui_Dnd_Container_Data *pd,
void *data_func_data, Efl_Dnd_Drag_Data_Get data_func, Eina_Free_Cb data_func_free_cb,
void *item_func_data, Efl_Dnd_Item_Get item_func, Eina_Free_Cb item_func_free_cb,
void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb,
@@ -94,8 +111,10 @@ _efl_ui_dnd_container_drag_item_add(Eo *obj, void *pd, double time_to_drag, doub
unsigned int seat)
{
ERR("In");
+ double drag_delay_time = pd->drag_delay_time;
+ double anim_time = elm_config_drag_anim_duration_get();
Eo *sel_man = _selection_manager_get(obj);
- efl_selection_manager_container_drag_item_add(sel_man, obj, time_to_drag, anim_time,
+ efl_selection_manager_container_drag_item_add(sel_man, obj, drag_delay_time, anim_time,
data_func_data, data_func, data_func_free_cb,
item_func_data, item_func, item_func_free_cb,
icon_func_data, icon_func, icon_func_free_cb,
@@ -104,14 +123,14 @@ _efl_ui_dnd_container_drag_item_add(Eo *obj, void *pd, double time_to_drag, doub
}
static void
-_efl_ui_dnd_container_drag_item_del(Eo *obj, void *pd, unsigned int seat)
+_efl_ui_dnd_container_drag_item_del(Eo *obj, Efl_Ui_Dnd_Container_Data *pd, unsigned int seat)
{
ERR("In");
Eo *sel_man = _selection_manager_get(obj);
efl_selection_manager_container_drag_item_del(sel_man, obj, seat);
}
EOLIAN static void
-_efl_ui_dnd_container_drop_item_add(Eo *obj, void *pd, Efl_Selection_Format format, void *item_func_data, Efl_Dnd_Item_Get item_func, Eina_Free_Cb item_func_free_cb, unsigned int seat)
+_efl_ui_dnd_container_drop_item_add(Eo *obj, Efl_Ui_Dnd_Container_Data *pd, Efl_Selection_Format format, void *item_func_data, Efl_Dnd_Item_Get item_func, Eina_Free_Cb item_func_free_cb, unsigned int seat)
{
ERR("In");
Eo *sel_man = _selection_manager_get(obj);
@@ -119,7 +138,7 @@ _efl_ui_dnd_container_drop_item_add(Eo *obj, void *pd, Efl_Selection_Format form
}
EOLIAN static void
-_efl_ui_dnd_container_drop_item_del(Eo *obj, void *pd, unsigned int seat)
+_efl_ui_dnd_container_drop_item_del(Eo *obj, Efl_Ui_Dnd_Container_Data *pd, unsigned int seat)
{
ERR("In");
Eo *sel_man = _selection_manager_get(obj);
diff --git a/src/lib/elementary/efl_ui_dnd.eo b/src/lib/elementary/efl_ui_dnd.eo
index 6508aa45ef..7d4b2a0175 100644
--- a/src/lib/elementary/efl_ui_dnd.eo
+++ b/src/lib/elementary/efl_ui_dnd.eo
@@ -47,8 +47,6 @@ mixin Efl.Ui.Dnd {
}
}
}
- implements {
- }
events {
drag,accept; [[accept drag data]]
drag,done; [[drag is done (mouse up)]]
diff --git a/src/lib/elementary/efl_ui_dnd_container.eo b/src/lib/elementary/efl_ui_dnd_container.eo
index cd18f9e018..f80f1152a5 100644
--- a/src/lib/elementary/efl_ui_dnd_container.eo
+++ b/src/lib/elementary/efl_ui_dnd_container.eo
@@ -1,15 +1,26 @@
import efl_ui_dnd_types;
mixin Efl.Ui.Dnd.Container {
- data: null;
+ //data: null;
methods {
+ @property drag_delay_time {
+ [[The time since mouse down happens to drag starts.]]
+ set {
+ legacy: null;
+ }
+ get {
+ legacy: null;
+ }
+ values {
+ time: double; [[The drag delay time]]
+ }
+ }
drag_item_add { //drag_item_callback //property
[[This registers a drag for items in a container. Many items can be
dragged at a time. During dragging, there are three events emitted:
EFL_DND_EVENT_DRAG_POS, EFL_DND_EVENT_DRAG_ACCEPT, EFL_DND_EVENT_DRAG_DONE.]]
params {
- @in time_to_drag: double; [[Time since mouse down happens to drag starts]] //drag_delay: property
- @in anim_durataion: double; [[animation duration]]
+ //@in time_to_drag: double; [[Time since mouse down happens to drag starts]] //drag_delay: property
//@in anim_durataion: double; [[animation duration]] //just config
@in data_func: Efl.Dnd.Drag_Data_Get; [[Data and its format]]
@in item_func: Efl.Dnd.Item_Get; [[Item to determine drag start]]
diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c
index 12837ee407..2d94294f04 100644
--- a/src/lib/elementary/elm_config.c
+++ b/src/lib/elementary/elm_config.c
@@ -508,6 +508,7 @@ _desc_init(void)
ELM_CONFIG_VAL(D, T, entry_select_allow, T_UCHAR);
ELM_CONFIG_VAL(D, T, offline, T_UCHAR);
ELM_CONFIG_VAL(D, T, powersave, T_INT);
+ ELM_CONFIG_VAL(D, T, drag_anim_duration, T_DOUBLE);
#undef T
#undef D
#undef T_INT
@@ -1821,6 +1822,7 @@ _config_load(void)
_elm_config->icon_theme = eina_stringshare_add(ELM_CONFIG_ICON_THEME_ELEMENTARY);
_elm_config->popup_scrollable = EINA_FALSE;
_elm_config->entry_select_allow = EINA_TRUE;
+ _elm_config->drag_anim_duration = 0.0;
_env_get();
}
@@ -2021,6 +2023,7 @@ _elm_config_reload_do(void)
KEEP_VAL(gl_msaa);
KEEP_STR(icon_theme);
KEEP_VAL(entry_select_allow);
+ KEEP_VAL(drag_anim_duration);
_elm_config->priv = prev_config->priv;
_config_free(prev_config);
@@ -2791,6 +2794,9 @@ _env_get(void)
if (s) _elm_config->popup_vertical_align = _elm_atof(s);
s = getenv("ELM_POPUP_SCROLLABLE");
if (s) _elm_config->popup_scrollable = atoi(s);
+
+ s = getenv("EFL_UI_DND_drag_anim_duration");
+ if (s) _elm_config->drag_anim_duration = _elm_atof(s);
}
static void
@@ -4638,6 +4644,20 @@ elm_config_powersave_set(int set)
_elm_config->powersave = set;
}
+EAPI double
+elm_config_drag_anim_duration_get(void)
+{
+ if (!_elm_config) return 0.0;
+ return _elm_config->drag_anim_duration;
+}
+
+EAPI void
+elm_config_drag_anim_duration_set(double set)
+{
+ if (!_elm_config) return;
+ _elm_config->drag_anim_duration = set;
+}
+
void
_elm_config_profile_set(const char *profile)
{
@@ -5075,6 +5095,7 @@ _efl_config_global_efl_config_config_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
CONFIG_GETS(web_backend);
CONFIG_GETB(offline);
CONFIG_GETI(powersave);
+ CONFIG_GETD(drag_anim_duration);
const size_t len = sizeof("audio_mute") - 1;
if (!strncmp(name, "audio_mute", len))
diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h
index 36bc4ce69f..3ebbbfe7f9 100644
--- a/src/lib/elementary/elm_priv.h
+++ b/src/lib/elementary/elm_priv.h
@@ -317,6 +317,7 @@ struct _Elm_Config_Flags
Eina_Bool gl_msaa : 1;
Eina_Bool icon_theme : 1;
Eina_Bool entry_select_allow : 1; // unused
+ Eina_Bool drag_anim_duration : 1;
};
struct _Elm_Config
@@ -453,6 +454,7 @@ struct _Elm_Config
unsigned char entry_select_allow;
Eina_Bool offline;
int powersave;
+ double drag_anim_duration;
/* Not part of the EET file */
Eina_Bool is_mirrored : 1;