From ee2cbf1c9178430b1019bc2595d7cbcab341b5b2 Mon Sep 17 00:00:00 2001 From: Stafford Horne Date: Thu, 19 Nov 2015 12:46:58 -0500 Subject: [PATCH] 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 --- src/modules/conf_intl/e_int_config_imc.c | 4 +- .../conf_intl/e_int_config_imc_import.c | 38 ++++++++----------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/modules/conf_intl/e_int_config_imc.c b/src/modules/conf_intl/e_int_config_imc.c index 966ccfbda..d1b8f4a79 100644 --- a/src/modules/conf_intl/e_int_config_imc.c +++ b/src/modules/conf_intl/e_int_config_imc.c @@ -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) diff --git a/src/modules/conf_intl/e_int_config_imc_import.c b/src/modules/conf_intl/e_int_config_imc_import.c index aff37ad01..e9fdfd8ef 100644 --- a/src/modules/conf_intl/e_int_config_imc_import.c +++ b/src/modules/conf_intl/e_int_config_imc_import.c @@ -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