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;

-- 


Reply via email to