e/imc: fix issue with input method import segv and small window size

Summary:
The imc import dialog at "Settings > Language > Input Method Settings >
Import .." had issue where the size was almost zero.  When trying to
close the window it would SEGV.

The SEGV seems to be do the with dialog->cdata not being set.

The resize issue I am not so sure, but I upgraded to ELM and if fixed
the issue.

Test Plan:
Open "Settings > Language > Input Method Settings > Import ..."
 - The size should not be really small
 - When closing it should not cause E to SEGV
After applying the patch the above issues are fixed.

Reviewers: zmike

Subscribers: cedric, seoz

Differential Revision: https://phab.enlightenment.org/D3353
This commit is contained in:
Stafford Horne 2015-11-19 12:46:58 -05:00 committed by Mike Blumenkrantz
parent 00252fad74
commit 9bfd684e43
2 changed files with 17 additions and 25 deletions

View File

@ -129,6 +129,7 @@ _create_data(E_Config_Dialog *cfd)
cfdata = E_NEW(E_Config_Dialog_Data, 1);
cfdata->cfd = cfd;
cfd->cfdata = cfdata;
_fill_data(cfdata);
return cfdata;
}
@ -146,8 +147,7 @@ _change_hash_free_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNU
static void
_free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
{
if (cfdata->win_import)
e_int_config_imc_import_del(cfdata->win_import);
E_FREE_FUNC(cfdata->win_import, evas_object_del);
eina_stringshare_del(cfdata->imc_current);
if (cfdata->imc_basic_map)

View File

@ -49,7 +49,7 @@ e_int_config_imc_import(E_Config_Dialog *parent)
import = E_NEW(Import, 1);
if (!import) return NULL;
win = elm_win_add(parent->parent, "E", ELM_WIN_BASIC);
win = elm_win_add(parent->parent, "E", ELM_WIN_DIALOG_BASIC);
if (!win)
{
E_FREE(import);
@ -67,16 +67,18 @@ e_int_config_imc_import(E_Config_Dialog *parent)
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _imc_import_cb_delete, NULL);
ecore_evas_name_class_set(ecore_evas_ecore_evas_get(evas_object_evas_get(win)), "E", "_imc_import_dialog");
o = edje_object_add(evas);
elm_win_resize_object_add(win, o);
o = elm_layout_add(win);
E_EXPAND(o);
E_FILL(o);
import->bg_obj = o;
e_theme_edje_object_set(o, "base/theme/dialog", "e/widgets/dialog/main");
elm_win_resize_object_add(win, o);
evas_object_show(o);
o = e_widget_list_add(evas, 1, 1);
e_widget_on_focus_hook_set(o, _imc_import_cb_wid_focus, import);
import->box_obj = o;
edje_object_part_swallow(import->bg_obj, "e.swallow.buttons", o);
elm_object_part_content_set(import->bg_obj, "e.swallow.buttons", o);
o = evas_object_rectangle_add(evas);
import->event_obj = o;
@ -111,7 +113,7 @@ e_int_config_imc_import(E_Config_Dialog *parent)
e_widget_size_min_get(o, &w, &h);
evas_object_size_hint_min_set(o, w, h);
edje_object_part_swallow(import->bg_obj, "e.swallow.content", o);
elm_object_part_content_set(import->bg_obj, "e.swallow.content", o);
evas_object_show(o);
import->ok_obj = e_widget_button_add(evas, _("OK"), NULL,
@ -129,13 +131,8 @@ e_int_config_imc_import(E_Config_Dialog *parent)
o = import->box_obj;
e_widget_size_min_get(o, &w, &h);
evas_object_size_hint_min_set(o, w, h);
edje_object_part_swallow(import->bg_obj, "e.swallow.buttons", o);
elm_object_part_content_set(import->bg_obj, "e.swallow.buttons", o);
edje_object_size_min_calc(import->bg_obj, &w, &h);
evas_object_resize(import->bg_obj, w, h);
evas_object_resize(win, w, h);
evas_object_size_hint_min_set(win, w, h);
evas_object_size_hint_max_set(win, 99999, 99999);
evas_object_show(win);
e_win_client_icon_set(win, "preferences-imc");
@ -144,14 +141,15 @@ e_int_config_imc_import(E_Config_Dialog *parent)
return win;
}
void
e_int_config_imc_import_del(Evas_Object *win)
static void
_imc_import_cb_delete(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Import *import;
import = evas_object_data_get(win, "imc_win");
import = evas_object_data_get(obj, "imc_win");
if (!import) return;
evas_object_del(win);
evas_object_del(import->win);
e_int_config_imc_import_done(import->parent);
E_FREE(import->cfdata->file);
@ -161,12 +159,6 @@ e_int_config_imc_import_del(Evas_Object *win)
return;
}
static void
_imc_import_cb_delete(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
e_int_config_imc_import_del(obj);
}
static void
_imc_import_cb_wid_focus(void *data, Evas_Object *obj)
{
@ -294,13 +286,13 @@ _imc_import_cb_ok(void *data, void *data2 EINA_UNUSED)
}
}
e_int_config_imc_import_del(import->win);
evas_object_del(import->win);
}
static void
_imc_import_cb_close(void *data, void *data2 EINA_UNUSED)
{
e_int_config_imc_import_del(data);
evas_object_del(data);
}
static void