jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0de72b44c1cc2798329c59bfe3399667c53c4859

commit 0de72b44c1cc2798329c59bfe3399667c53c4859
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Tue Nov 22 17:34:17 2016 +0900

    win: Fix support for legacy themes (elm_bg)
    
    For standard windows, we want to create an elm_bg object if
    the theme is a legacy one. Otherwise the default theme
    doesn't require an extra object, just a rectangle.
---
 data/elementary/themes/default.edc    |  2 +-
 data/elementary/themes/edc/elm/bg.edc |  1 +
 src/lib/elementary/efl_ui_win.c       | 45 +++++++++++++++++++++++++++++++++--
 src/lib/elementary/elm_theme.c        |  8 +++++++
 4 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/data/elementary/themes/default.edc 
b/data/elementary/themes/default.edc
index 1d317c8..f26f8b3 100644
--- a/data/elementary/themes/default.edc
+++ b/data/elementary/themes/default.edc
@@ -4,7 +4,7 @@ externals.external: "elm";
 
 // theme api version. from 1.10 on we will check version to avoid
 // compat issues
-data.item: "version" "110";
+data.item: "version" "119";
 
 collections {
 #include "fonts.edc"
diff --git a/data/elementary/themes/edc/elm/bg.edc 
b/data/elementary/themes/edc/elm/bg.edc
index 2a0edc3..0254099 100644
--- a/data/elementary/themes/edc/elm/bg.edc
+++ b/data/elementary/themes/edc/elm/bg.edc
@@ -7,6 +7,7 @@
 */
 
 group { name: "elm/bg/base/default";
+   data.item: "elm_bg_version" "119";
    images.image: "bevel_dark_out.png" COMP;
    parts {
       part { name: "base"; type: RECT;
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 56e392a..537e1ae 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -260,6 +260,8 @@ struct _Efl_Ui_Win_Data
    struct {
       Evas_Object *box, *edje;
       Eina_Bool    forbidden : 1; /**< Marks some legacy APIs as not allowed. 
*/
+      Eina_Bool    bg_must_swallow : 1; /**< Legacy theme compatibility 
(elm_bg for standard window) */
+      Eina_Bool    bg_must_swallow_init : 1;
    } legacy;
 
    Eina_Bool    urgent : 1;
@@ -6223,6 +6225,35 @@ _elm_win_bg_set(Efl_Ui_Win_Data *sd, Eo *bg)
    return EINA_TRUE;
 }
 
+/* Legacy theme compatibility */
+static Eina_Bool
+_elm_win_bg_must_swallow(Efl_Ui_Win_Data *sd)
+{
+   if (EINA_UNLIKELY(!sd->legacy.bg_must_swallow_init))
+     {
+        /* Overkill: check which theme version the standard elm_bg uses */
+        Elm_Widget_Smart_Data *wd;
+        const char *version;
+        Eo *bg;
+        int v;
+
+        sd->legacy.bg_must_swallow = 1;
+        sd->legacy.bg_must_swallow_init = 1;
+
+        bg = elm_bg_add(sd->obj);
+        wd = efl_data_scope_get(bg, ELM_WIDGET_CLASS);
+        if (wd)
+          {
+             version = edje_object_data_get(wd->resize_obj, "elm_bg_version");
+             v = version ? atoi(version) : 0;
+             if (v >= 119) sd->legacy.bg_must_swallow = 0;
+          }
+        evas_object_del(bg);
+     }
+
+   return sd->legacy.bg_must_swallow;
+}
+
 void
 _elm_win_standard_init(Eo *obj)
 {
@@ -6230,9 +6261,19 @@ _elm_win_standard_init(Eo *obj)
    Efl_Ui_Win_Data *sd = efl_data_scope_get(obj, MY_CLASS);
 
    ELM_SAFE_DEL(sd->bg);
-   sd->csd.need_bg_solid = EINA_TRUE;
 
-   /* FIXME: We should swallow a legacy elm_bg if not using the default theme 
*/
+   if (!_elm_win_bg_must_swallow(sd))
+     {
+        sd->csd.need_bg_solid = EINA_TRUE;
+     }
+   else
+     {
+        /* Legacy theme compatibility */
+        DBG("Detected legacy theme used for elm_bg. Swallowing object.");
+        sd->csd.need_bg_solid = EINA_FALSE;
+        _elm_win_bg_set(sd, efl_add(ELM_BG_CLASS, obj));
+     }
+
    _elm_win_frame_style_update(sd, 0, 1);
 }
 
diff --git a/src/lib/elementary/elm_theme.c b/src/lib/elementary/elm_theme.c
index b57e20d..50f9868 100644
--- a/src/lib/elementary/elm_theme.c
+++ b/src/lib/elementary/elm_theme.c
@@ -33,6 +33,14 @@ _elm_theme_item_finalize(Elm_Theme_Files *files,
                          Eina_Bool prepend,
                          Eina_Bool istheme)
 {
+   /* Theme version history:
+    * <110: legacy, had no version tag
+    *  110: first supported version
+    *  119: switched windows to always use border
+    *       win group has no menu, no blocker
+    *       border group has all required swallows (conformant, bg, win)
+    *       data: "elm_bg_version" matches "version" ("119")
+    */
    if (!f) return;
    if (istheme)
      {

-- 


Reply via email to