Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h menus.c 


Log Message:
Fix menu auto-regeneration when theme transparency is off.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.257
retrieving revision 1.258
diff -u -3 -r1.257 -r1.258
--- E.h 30 Apr 2004 20:05:19 -0000      1.257
+++ E.h 1 May 2004 22:49:25 -0000       1.258
@@ -1393,6 +1393,7 @@
    char                shown;
    char                stuck;
    char                internal;       /* Don't destroy when reloading */
+   char                redraw;
    Menu               *parent;
    MenuItem           *sel_item;
    time_t              last_change;
@@ -2348,8 +2349,6 @@
 void                MenuDestroy(Menu * m);
 void                MenuHide(Menu * m);
 void                MenuShow(Menu * m, char noshow);
-void                MenuRepack(Menu * m);
-void                MenuEmpty(Menu * m);
 MenuItem           *MenuItemCreate(const char *text, ImageClass * iclass,
                                   int action_id, const char *action_params,
                                   Menu * child);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/menus.c,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -3 -r1.125 -r1.126
--- menus.c     22 Apr 2004 20:55:02 -0000      1.125
+++ menus.c     1 May 2004 22:49:25 -0000       1.126
@@ -138,18 +138,15 @@
 }
 
 static void
-MenuEwinMoveResize(EWin * ewin, int resize)
+MenuEwinMoveResize(EWin * ewin, int resize __UNUSED__)
 {
    Menu               *m = ewin->menu;
 
    if (!m)
       return;
 
-   if ((!m->style->use_item_bg && m->pmm.pmap == 0) ||
-       Conf.theme.transparency || IclassIsTransparent(m->style->bg_iclass))
+   if ((!m->style->use_item_bg && m->pmm.pmap == 0) || m->redraw)
       MenuRedraw(m);
-   return;
-   resize = 0;
 }
 
 static void
@@ -384,19 +381,10 @@
    MenuStyle          *ms;
 
    EDBUG(5, "MenuStyleCreate");
-   ms = Emalloc(sizeof(MenuStyle));
 
-   ms->name = NULL;
-   ms->tclass = NULL;
-   ms->bg_iclass = NULL;
-   ms->item_iclass = NULL;
-   ms->sub_iclass = NULL;
-   ms->use_item_bg = 0;
+   ms = Emalloc(sizeof(MenuStyle));
+   memset(ms, 0, sizeof(MenuStyle));
    ms->iconpos = ICON_LEFT;
-   ms->maxx = 0;
-   ms->maxy = 0;
-   ms->border_name = NULL;
-   ms->ref_count = 0;
 
    EDBUG_RETURN(ms);
 }
@@ -449,25 +437,11 @@
    Menu               *m;
 
    EDBUG(5, "MenuCreate");
+
    m = Emalloc(sizeof(Menu));
-   m->ref_count = 0;
-   m->name = NULL;
-   m->title = NULL;
-   m->style = NULL;
-   m->num = 0;
-   m->items = NULL;
-   m->win = 0;
-   m->pmm.pmap = 0;
-   m->pmm.mask = 0;
-   m->shown = 0;
-   m->stuck = 0;
-   m->internal = 0;
-   m->parent = NULL;
-   m->sel_item = NULL;
-   m->data = NULL;
-   m->ref_menu = NULL;
-   m->last_change = 0;
+   memset(m, 0, sizeof(Menu));
    MenuAddName(m, name);
+
    EDBUG_RETURN(m);
 }
 
@@ -535,7 +509,7 @@
  * old ones for menu icons. we need to add some ref counting in menu icon
  * imageclasses to knw to free them when not used
  */
-void
+static void
 MenuEmpty(Menu * m)
 {
    int                 i, j;
@@ -566,16 +540,20 @@
    EDBUG_RETURN_;
 }
 
-void
+static void
 MenuRepack(Menu * m)
 {
    EWin               *ewin;
    unsigned int        w, h;
 
    EDBUG(5, "MenuRepack");
-   ewin = FindEwinByMenu(m);
+
+   m->redraw = (Conf.theme.transparency ||
+               IclassIsTransparent(m->style->bg_iclass)) ? 1 : -1;
    if (m->win)
       MenuRealize(m);
+
+   ewin = FindEwinByMenu(m);
    if (ewin)
      {
        GetWinWH(m->win, &w, &h);
@@ -586,6 +564,7 @@
        ResizeEwin(ewin, w, h);
        RaiseEwin(ewin);
      }
+
    EDBUG_RETURN_;
 }
 
@@ -830,6 +809,9 @@
        mmw += m->style->bg_iclass->padding.right;
        mmh += m->style->bg_iclass->padding.bottom;
      }
+
+   m->redraw = (Conf.theme.transparency ||
+               IclassIsTransparent(m->style->bg_iclass)) ? 1 : -1;
    EResizeWindow(disp, m->win, mmw, mmh);
 
    Mode.queue_up = pq;
@@ -859,6 +841,9 @@
           MenuDrawItem(m, m->items[i], 0);
        PropagateShapes(m->win);
      }
+
+   if (m->redraw < 0)
+      m->redraw = 0;
 }
 
 static void
@@ -876,7 +861,7 @@
    Mode.queue_up = 0;
 
    mi_pmm = &(mi->pmm[(int)(mi->state)]);
-   if (Conf.theme.transparency || IclassIsTransparent(m->style->bg_iclass))
+   if (m->redraw)
       FreePmapMask(mi_pmm);
    if (!mi_pmm->pmap)
      {
@@ -1386,15 +1371,13 @@
    static int          calls = 0;
 
    EDBUG(5, "MenuCreateFromFlatFile");
-   calls++;
    if (calls > 255)
-     {
-       calls--;
-       EDBUG_RETURN(NULL);
-     }
+      EDBUG_RETURN(NULL);
+
    ff = FindFile(file);
    if (!ff)
       EDBUG_RETURN(NULL);
+
    if (canread(ff))
      {
        m = MenuCreate(name);
@@ -1412,6 +1395,7 @@
        EDBUG_RETURN(m);
      }
    Efree(ff);
+
    calls--;
    EDBUG_RETURN(NULL);
 }
@@ -1457,7 +1441,7 @@
                  MenuItem           *mi;
                  ImageClass         *icc = NULL;
                  Menu               *mm;
-                 int                 count = 0;
+                 static int          count = 0;
 
                  txt = field(s, 0);
                  icon = field(s, 1);
@@ -1525,6 +1509,7 @@
    fclose(f);
 }
 
+#if 0                          /* We travelled up the tree. Why? Leaving this around 
for now. */
 static void
 FileMenuUpdate(int val, void *data)
 {
@@ -1572,6 +1557,48 @@
    DoIn(s, 2.0, FileMenuUpdate, 0, m);
    val = 0;
 }
+#else
+
+static void
+FileMenuUpdate(int val __UNUSED__, void *data)
+{
+   Menu               *m;
+   time_t              lastmod = 0;
+   char                s[4096];
+
+   m = (Menu *) data;
+   if (!m)
+      return;
+
+   if (!FindItem((char *)m, m->win, LIST_FINDBY_POINTER, LIST_TYPE_MENU))
+      return;
+
+   /* if the menu is up dont update */
+   if (((Mode.cur_menu_mode) || (clickmenu)) && (Mode.cur_menu_depth > 0))
+      goto done;
+
+   if (!exists(m->data))
+     {
+       MenuHide(m);
+       MenuEmpty(m);
+       return;
+     }
+
+   if (m->data)
+      lastmod = moddate(m->data);
+   if (lastmod > m->last_change)
+     {
+       m->last_change = lastmod;
+       MenuEmpty(m);
+       FillFlatFileMenu(m, m->style, m->name, m->data, m);
+       MenuRepack(m);
+     }
+
+ done:
+   Esnprintf(s, sizeof(s), "__.%s", m->name);
+   DoIn(s, 5.0, FileMenuUpdate, 0, m);
+}
+#endif
 
 Menu               *
 MenuCreateFromGnome(const char *name, MenuStyle * ms, const char *dir)




-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE. 
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to