Enlightenment CVS committal

Author  : dj2
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src


Modified Files:
        ewl_theme.c ewl_widget.c 


Log Message:
- build the widget appearance on the fly.
- if you want the full appearance string you *must* call
  ewl_widget_appearance_get now.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_theme.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -3 -r1.71 -r1.72
--- ewl_theme.c 13 Sep 2004 13:56:17 -0000      1.71
+++ ewl_theme.c 9 Dec 2004 03:04:21 -0000       1.72
@@ -339,9 +339,17 @@
        /*
         * Use the widget's appearance string to build a relative theme key.
         */
-       if (w)
-               snprintf(key, PATH_MAX, "%s/%s", w->appearance, k);
-       else
+       if (w) {
+               char *tmp;
+
+               tmp = ewl_widget_appearance_get(w);
+               if (tmp) {
+                       snprintf(key, PATH_MAX, "%s/%s", tmp, k);
+                       FREE(tmp);
+               } else
+                       snprintf(key, PATH_MAX, "%s", k);
+
+       } else
                snprintf(key, PATH_MAX, "%s", k);
 
        if (ewl_config.theme.print_keys) 
@@ -399,9 +407,16 @@
        /*
         * Use the widget's appearance string to build a relative theme key.
         */
-       if (w)
-               snprintf(key, PATH_MAX, "%s/%s", w->appearance, k);
-       else
+       if (w) {
+               char *tmp;
+
+               tmp = ewl_widget_appearance_get(w);
+               if (tmp) {
+                       snprintf(key, PATH_MAX, "%s/%s", tmp, k);
+                       FREE(tmp);
+               } else 
+                       snprintf(key, PATH_MAX, "%s", k);
+       } else
                snprintf(key, PATH_MAX, "%s", k);
 
        for (temp = key; temp && !ret; temp = strchr(temp, '/')) {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_widget.c,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -3 -r1.125 -r1.126
--- ewl_widget.c        21 Sep 2004 22:37:45 -0000      1.125
+++ ewl_widget.c        9 Dec 2004 03:04:21 -0000       1.126
@@ -6,7 +6,6 @@
 Ewl_Widget *last_focused = NULL;
 Ewl_Widget *dnd_widget = NULL;
 
-static void ewl_widget_appearance_rebuild(Ewl_Widget *w);
 static void ewl_widget_theme_padding_get(Ewl_Widget *w, int *l, int *r,
                                         int *t, int *b);
 static void ewl_widget_theme_insets_get(Ewl_Widget *w, int *l, int *r,
@@ -396,20 +395,11 @@
        DCHECK_PARAM_PTR("w", w);
        DCHECK_PARAM_PTR("appearance", appearance);
 
-       /*
-        * Only continue if the appearance has changed.
-        */
-       if (w->appearance) {
-               current = strrchr(w->appearance, '/');
-               if (current) {
-                       current++;
-                       if (!strcmp(current, appearance))
-                               DRETURN(DLEVEL_STABLE);
-               }
-
-               FREE(w->appearance);
-       }
+       /* make sure we have something to do */
+       if (!strcmp(appearance, w->appearance))
+               DLEAVE_FUNCTION(DLEVEL_STABLE);
 
+       IF_FREE(w->appearance);
        al = strlen(appearance) + 1;
 
        /*
@@ -438,10 +428,8 @@
        }
 
        /*
-        * Regenerate the entire path of widgets in the heirarchy, and
-        * recreate the visible components of the widget if necessary.
+        * Recreate the visible components of the widget if necessary.
         */
-       ewl_widget_appearance_rebuild(w);
        if (REALIZED(w)) {
                ewl_widget_unrealize(w);
                ewl_widget_realize(w);
@@ -456,14 +444,28 @@
  * failure.
  * @brief Retrieve the appearance key of the widget
  */
-char           *ewl_widget_appearance_get(Ewl_Widget * w)
+char *ewl_widget_appearance_get(Ewl_Widget * w)
 {
-       DENTER_FUNCTION(DLEVEL_STABLE);
+       char *ret = NULL, *tmp;
+       int len;
 
+       DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR_RET("w", w, NULL);
 
-       DRETURN_PTR(w->appearance ? strdup(w->appearance) : NULL,
-                   DLEVEL_STABLE);
+       if (w->parent)
+               tmp = ewl_widget_appearance_get(w->parent);
+       else
+               tmp = strdup("");
+
+       len = strlen(tmp) + 2; /* one for the / one for the \0 */
+       len += (w->appearance ? strlen(w->appearance) : 0);
+
+       ret = malloc(sizeof(char) * len);
+       snprintf(ret, len, "%s/%s", tmp, 
+                       (w->appearance ? w->appearance : ""));
+       FREE(tmp);
+
+       DRETURN_PTR(ret, DLEVEL_STABLE);
 }
 
 /**
@@ -887,32 +889,6 @@
        DRETURN_PTR(last_key, DLEVEL_STABLE);
 }
 
-static void ewl_widget_appearance_rebuild(Ewl_Widget *w)
-{
-       char *base;
-       char path[PATH_MAX];
-
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("w", w);
-       DCHECK_PARAM_PTR("w->appearance", w->appearance);
-
-       base = strrchr(w->appearance, '/');
-       if (base) {
-               *base = '\0';
-               base++;
-       }
-       else
-               base = w->appearance;
-
-       snprintf(path, PATH_MAX, "%s/%s",
-                       (w->parent ? w->parent->appearance : ""), base);
-
-       FREE(w->appearance);
-       w->appearance = strdup(path);
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
 /*
  * Perform the series of operations common to every widget when
  * they are destroyed. This should ALWAYS be the the last callback
@@ -1235,8 +1211,6 @@
 
        pc = EWL_CONTAINER(w->parent);
 
-       ewl_widget_appearance_rebuild(w);
-
        /*
         * If the new parent is on a different evas, we must re-realize it.
         */




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to