discomfitor pushed a commit to branch efl-1.12. http://git.enlightenment.org/core/efl.git/commit/?id=572ad97e3cbca3465b5aedbf14e7c78c66defaca
commit 572ad97e3cbca3465b5aedbf14e7c78c66defaca Author: Mike Blumenkrantz <[email protected]> Date: Thu Jan 22 14:37:56 2015 -0500 ee engines should not crash when re-setting the same title/name_class @fix --- .../ecore_evas/engines/cocoa/ecore_evas_cocoa.c | 1 + src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 19 +++++++++++++------ .../engines/wayland/ecore_evas_wayland_common.c | 20 +++++++++++++------- .../ecore_evas/engines/win32/ecore_evas_win32.c | 2 +- src/modules/ecore_evas/engines/x/ecore_evas_x.c | 1 + 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c index 2c0d724..f66b7be 100644 --- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c +++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c @@ -325,6 +325,7 @@ _ecore_evas_title_set(Ecore_Evas *ee, const char *title) { INF("ecore evas title set"); + if (eina_streq(ee->prop.title, title)) return; if (ee->prop.title) free(ee->prop.title); ee->prop.title = NULL; if (title) ee->prop.title = strdup(title); diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index e47283e..c028a94 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -688,6 +688,7 @@ _ecore_evas_drm_hide(Ecore_Evas *ee) static void _ecore_evas_drm_title_set(Ecore_Evas *ee, const char *title) { + if (eina_streq(ee->prop.title, title)) return; if (ee->prop.title) free(ee->prop.title); ee->prop.title = NULL; if (title) ee->prop.title = strdup(title); @@ -696,12 +697,18 @@ _ecore_evas_drm_title_set(Ecore_Evas *ee, const char *title) static void _ecore_evas_drm_name_class_set(Ecore_Evas *ee, const char *n, const char *c) { - if (ee->prop.name) free(ee->prop.name); - if (ee->prop.clas) free(ee->prop.clas); - ee->prop.name = NULL; - ee->prop.clas = NULL; - if (n) ee->prop.name = strdup(n); - if (c) ee->prop.clas = strdup(c); + if (!eina_streq(ee->prop.name, n)) + { + if (ee->prop.name) free(ee->prop.name); + ee->prop.name = NULL; + if (n) ee->prop.name = strdup(n); + } + if (!eina_streq(ee->prop.clas, c)) + { + if (ee->prop.clas) free(ee->prop.clas); + ee->prop.clas = NULL; + if (c) ee->prop.clas = strdup(c); + } } static void diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index 568a02c..81278f3 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -1069,6 +1069,7 @@ _ecore_evas_wl_common_title_set(Ecore_Evas *ee, const char *title) LOGFN(__FILE__, __LINE__, __FUNCTION__); if (!ee) return; + if (eina_streq(ee->prop.title, title)) return; if (ee->prop.title) free(ee->prop.title); ee->prop.title = NULL; if (title) ee->prop.title = strdup(title); @@ -1094,13 +1095,18 @@ _ecore_evas_wl_common_name_class_set(Ecore_Evas *ee, const char *n, const char * if (!ee) return; wdata = ee->engine.data; - if (ee->prop.name) free(ee->prop.name); - if (ee->prop.clas) free(ee->prop.clas); - ee->prop.name = NULL; - ee->prop.clas = NULL; - if (n) ee->prop.name = strdup(n); - if (c) ee->prop.clas = strdup(c); - + if (!eina_streq(ee->prop.name, n)) + { + if (ee->prop.name) free(ee->prop.name); + ee->prop.name = NULL; + if (n) ee->prop.name = strdup(n); + } + if (!eina_streq(ee->prop.clas, c)) + { + if (ee->prop.clas) free(ee->prop.clas); + ee->prop.clas = NULL; + if (c) ee->prop.clas = strdup(c); + } if (ee->prop.clas) ecore_wl_window_class_name_set(wdata->win, ee->prop.clas); } diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c index 88397c7..9333455 100644 --- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c +++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c @@ -757,7 +757,7 @@ static void _ecore_evas_win32_title_set(Ecore_Evas *ee, const char *title) { INF("ecore evas title set"); - + if (eina_streq(ee->prop.title, title)) return; if (ee->prop.title) free(ee->prop.title); ee->prop.title = NULL; if (title) ee->prop.title = strdup(title); diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c index 81e6208..c5ad4f1 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -2898,6 +2898,7 @@ _ecore_evas_x_activate(Ecore_Evas *ee) static void _ecore_evas_x_title_set(Ecore_Evas *ee, const char *t) { + if (eina_streq(ee->prop.title, t)) return; if (ee->prop.title) free(ee->prop.title); ee->prop.title = NULL; if (!t) return; --
