Ephoto: Fix segfault on directory single click

This commit is contained in:
Stephen okra Houston 2016-10-18 19:33:06 -05:00
parent 5304d3e477
commit 580dc2aa76
1 changed files with 16 additions and 22 deletions

View File

@ -27,7 +27,6 @@ struct _Ephoto_Directory_Browser
Eina_List *todo_items; Eina_List *todo_items;
Ecore_Job *change_dir_job; Ecore_Job *change_dir_job;
Ecore_Timer *click_timer; Ecore_Timer *click_timer;
Eina_Bool dragging;
Eina_Bool processing; Eina_Bool processing;
Eina_Bool initializing; Eina_Bool initializing;
struct struct
@ -150,11 +149,8 @@ _drop_leave(void *data, Evas_Object *obj EINA_UNUSED)
{ {
Ephoto_Directory_Browser *db = data; Ephoto_Directory_Browser *db = data;
if (db->dragging) if (db->dir_current)
{ elm_genlist_item_selected_set(db->dir_current, EINA_TRUE);
if (db->dir_current)
elm_genlist_item_selected_set(db->dir_current, EINA_TRUE);
}
} }
static void static void
@ -312,8 +308,8 @@ _on_list_contracted(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
static void static void
_dir_job(void *data) _dir_job(void *data)
{ {
Elm_Object_Item *it = data; Ephoto_Directory_Browser *db = data;
Ephoto_Directory_Browser *db = evas_object_data_get(it, "directory_browser"); Elm_Object_Item *it = evas_object_data_get(db->fsel, "current_item");
Ephoto_Entry *entry; Ephoto_Entry *entry;
const char *path; const char *path;
@ -330,12 +326,11 @@ _dir_job(void *data)
static void static void
_wait_job(void *data) _wait_job(void *data)
{ {
Elm_Object_Item *it = data; Ephoto_Directory_Browser *db = data;
Ephoto_Directory_Browser *db = evas_object_data_get(it, "directory_browser");
if (db->change_dir_job) if (db->change_dir_job)
ecore_job_del(db->change_dir_job); ecore_job_del(db->change_dir_job);
db->change_dir_job = ecore_job_add(_dir_job, it); db->change_dir_job = ecore_job_add(_dir_job, db);
} }
static void static void
@ -345,13 +340,12 @@ _on_list_selected(void *data, Evas_Object *obj EINA_UNUSED,
Ephoto_Directory_Browser *db = data; Ephoto_Directory_Browser *db = data;
Elm_Object_Item *it = event_info; Elm_Object_Item *it = event_info;
evas_object_data_set(it, "directory_browser", db); if (!it)
if (!db->dragging) return;
{
db->dir_current = it;
ecore_job_add(_wait_job, it); evas_object_data_set(db->fsel, "current_item", it);
} db->dir_current = it;
ecore_job_add(_wait_job, db);
} }
static char * static char *
@ -488,8 +482,8 @@ _dir_go_trash(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool static Eina_Bool
_click_timer_cb(void *data) _click_timer_cb(void *data)
{ {
Elm_Object_Item *item = data; Ephoto_Directory_Browser *db = data;
Ephoto_Directory_Browser *db = evas_object_data_get(item, "directory_browser"); Elm_Object_Item *item = evas_object_data_get(db->fsel, "current_item");
_on_list_selected(db, NULL, item); _on_list_selected(db, NULL, item);
db->click_timer = NULL; db->click_timer = NULL;
@ -597,9 +591,10 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED,
} }
else else
{ {
evas_object_data_set(item, "directory_browser", db); evas_object_data_del(db->fsel, "current_item");
evas_object_data_set(db->fsel, "current_item", item);
if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE) if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE)
db->click_timer = ecore_timer_add(.3, _click_timer_cb, item); db->click_timer = ecore_timer_add(.3, _click_timer_cb, db);
else else
_on_list_selected(db, NULL, item); _on_list_selected(db, NULL, item);
} }
@ -624,7 +619,6 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED,
} }
if (item) if (item)
{ {
evas_object_data_set(item, "directory_browser", db);
elm_menu_item_add(menu, NULL, "edit", _("Rename"), elm_menu_item_add(menu, NULL, "edit", _("Rename"),
_fsel_menu_rename_cb, db); _fsel_menu_rename_cb, db);
elm_menu_item_add(menu, NULL, "edit-paste", _("Paste"), elm_menu_item_add(menu, NULL, "edit-paste", _("Paste"),