Enlightenment CVS committal

Author  : urandom
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_menus.c e_menu.c e_menu.h 


Log Message:
removed e_menu_item_icon_object_set as it could have never worked properly.
now, the menu icon can be set properly upon realization with the 
e_menu_item_realize_callback_set function. rewrote the clients menu to use the 
border icon, and be sorted like the winselector.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -3 -r1.149 -r1.150
--- e_int_menus.c       21 Aug 2006 04:35:52 -0000      1.149
+++ e_int_menus.c       21 Aug 2006 20:03:09 -0000      1.150
@@ -37,8 +37,10 @@
 static void _e_int_menus_config_free_hook    (void *obj);
 static void _e_int_menus_config_item_cb      (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_clients_pre_cb      (void *data, E_Menu *m);
+static void _e_int_menus_clients_item_create (E_Border *bd, E_Menu *m);
 static void _e_int_menus_clients_free_hook   (void *obj);
 static void _e_int_menus_clients_item_cb     (void *data, E_Menu *m, 
E_Menu_Item *mi);
+static void _e_int_menus_clients_icon_cb     (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_clients_cleanup_cb  (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_desktops_pre_cb     (void *data, E_Menu *m);
 static void _e_int_menus_desktops_item_cb    (void *data, E_Menu *m, 
E_Menu_Item *mi);
@@ -685,21 +687,23 @@
 _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
 {
    E_Menu_Item *mi;
-   Evas_List *l, *borders = NULL;
-   E_Menu *root;
+   Evas_List *l, *borders = NULL, *alt = NULL;
    E_Zone *zone = NULL;
+   E_Desk *desk = NULL;
    const char *s;
 
    e_menu_pre_activate_callback_set(m, NULL, NULL);
-   root = e_menu_root_get(m);
    /* get the current clients */
-   if (root)
-     zone = root->zone;
+   zone =
+      e_zone_current_get(e_container_current_get(e_manager_current_get()));
+   desk = e_desk_current_get(zone);
    for (l = e_border_client_list(); l; l = l->next)
      {
        E_Border *border;
 
        border = l->data;
+       if (border->client.netwm.state.skip_taskbar) continue;
+       if (border->user_skip_winlist) continue;
        if ((border->zone == zone) || (border->iconic))
          borders = evas_list_append(borders, border);
      }
@@ -714,31 +718,22 @@
    for (l = borders; l; l = l->next)
      {
        E_Border *bd = l->data;
-       E_App *a;
-       const char *title;
-       
-       title = e_border_name_get(bd);
-       mi = e_menu_item_new(m);
-       e_menu_item_check_set(mi, 1);
-       if ((title) && (title[0]))
-         e_menu_item_label_set(mi, title);
-       else
-         e_menu_item_label_set(mi, _("No name!!"));
-       /* ref the border as we implicitly unref it in the callback */
-       e_object_ref(E_OBJECT(bd));
-//     e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");
-       e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd);
-       if (!bd->iconic) e_menu_item_toggle_set(mi, 1);
-       a = bd->app;
-       if (a)
+
+       if (bd->desk != desk)
          {
-            if (!((a->icon_class) && 
-                  (e_util_menu_item_edje_icon_list_set(mi, a->icon_class))))
-               {
-                  e_menu_item_icon_edje_set(mi, a->path, "icon");
-                  if (a->icon_path) e_menu_item_icon_path_set(mi, 
a->icon_path);
-               }
+            alt = evas_list_append(alt, bd);
+            continue;
          }
+       _e_int_menus_clients_item_create(bd, m);
+     }
+   mi = e_menu_item_new(m);
+   e_menu_item_separator_set(mi, 1);
+
+   for (l = alt; l; l = l->next)
+     {
+       E_Border *bd = l->data;
+
+       _e_int_menus_clients_item_create(bd, m);
      }
    mi = e_menu_item_new(m);
    e_menu_item_separator_set(mi, 1);
@@ -755,6 +750,27 @@
 }
 
 static void
+_e_int_menus_clients_item_create(E_Border *bd, E_Menu *m)
+{
+   E_Menu_Item *mi;
+   const char *title;
+       
+   title = e_border_name_get(bd);
+   mi = e_menu_item_new(m);
+   e_menu_item_check_set(mi, 1);
+   if ((title) && (title[0]))
+     e_menu_item_label_set(mi, title);
+   else
+     e_menu_item_label_set(mi, _("No name!!"));
+   /* ref the border as we implicitly unref it in the callback */
+   e_object_ref(E_OBJECT(bd));
+/*   e_object_breadcrumb_add(E_OBJECT(bd), "clients_menu");*/
+   e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd);
+   e_menu_item_realize_callback_set(mi, _e_int_menus_clients_icon_cb, bd);
+   if (!bd->iconic) e_menu_item_toggle_set(mi, 1);
+}
+
+static void
 _e_int_menus_clients_free_hook(void *obj)
 {
    E_Menu *m;
@@ -796,6 +812,21 @@
                               bd->y + (bd->h / 2));
        e_border_focus_set(bd, 1, 1);
      }
+}
+
+static void 
+_e_int_menus_clients_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Border *bd;
+   Evas_Object *o;
+   
+   bd = data;
+   E_OBJECT_CHECK(bd);
+
+   o = e_icon_add(m->evas);
+   e_icon_object_set(o, e_border_icon_add(bd, m->evas));
+
+   mi->icon_object = o;
 }
 
 static void 
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_menu.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -3 -r1.59 -r1.60
--- e_menu.c    16 Aug 2006 09:37:14 -0000      1.59
+++ e_menu.c    21 Aug 2006 20:03:09 -0000      1.60
@@ -47,6 +47,7 @@
 static void _e_menu_submenu_deactivate            (E_Menu_Item *mi);
 static void _e_menu_reposition                    (E_Menu *m);
 static int  _e_menu_active_call                   (void);
+static int _e_menu_realize_call                   (E_Menu_Item *mi);
 static void _e_menu_item_activate_next            (void);
 static void _e_menu_item_activate_previous        (void);
 static void _e_menu_item_activate_first           (void);
@@ -599,19 +600,6 @@
    mi->menu->changed = 1;
 }
 
-EAPI void      
-e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object *obj)
-{
-   E_OBJECT_CHECK(mi);
-   E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
-   if (((mi->icon_object) && (obj) && (mi->icon_object == obj)) ||
-       ((!mi->icon_object) && (!obj)))
-     return;
-   mi->icon_object = obj;
-   mi->changed = 1;
-   mi->menu->changed = 1;
-}
-
 EAPI void
 e_menu_item_label_set(E_Menu_Item *mi, const char *label)
 {
@@ -762,6 +750,15 @@
 }
 
 EAPI void
+e_menu_item_realize_callback_set(E_Menu_Item *mi,  void (*func) (void *data, 
E_Menu *m, E_Menu_Item *mi), void *data)
+{
+   E_OBJECT_CHECK(mi);
+   E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE);
+   mi->realize_cb.func = func;
+   mi->realize_cb.data = data;
+}
+
+EAPI void
 e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi,  void (*func) (void 
*data, E_Menu *m, E_Menu_Item *mi), void *data)
 {
    E_OBJECT_CHECK(mi);
@@ -1199,7 +1196,7 @@
             evas_object_pass_events_set(o, 1);
             e_box_pack_end(mi->container_object, o);
          }
-       if (mi->icon || mi->icon_object)
+       if (mi->icon || mi->realize_cb.func)
          {
             int icon_w, icon_h;
             
@@ -1213,17 +1210,7 @@
             else
               evas_object_del(o);
             
-             /* FIXME: This should be cleaned up a bit. */
-            if (mi->icon_object)
-              {
-                 o = e_icon_add(mi->menu->evas);
-                 e_icon_object_set(o, mi->icon_object);
-                 e_icon_fill_inside_set(o, 1);
-                 e_icon_size_get(o, &icon_w, &icon_h);
-
-                 mi->icon_object = o;
-              }
-            else if (mi->icon)
+            if (mi->icon)
               {
                  /* Try a the usual suspects first. */
                  if (!mi->icon_key)
@@ -1259,6 +1246,12 @@
                       e_icon_size_get(mi->icon_object, &icon_w, &icon_h);
                    }
               }
+            if (_e_menu_realize_call(mi))
+              {
+                 o = mi->icon_object;
+                 e_icon_fill_inside_set(o, 1);
+                 e_icon_size_get(o, &icon_w, &icon_h);
+              }
 
             evas_object_pass_events_set(o, 1);
             evas_object_show(o);
@@ -1894,6 +1887,20 @@
        return 1;
      }
    return -1;
+}
+
+static int
+_e_menu_realize_call(E_Menu_Item *mi)
+{
+   if (mi)
+     {
+       if (mi->realize_cb.func)
+         {
+            mi->realize_cb.func(mi->realize_cb.data, mi->menu, mi);
+            return 1;
+         }
+     }
+   return 0;
 }
 
 static void
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_menu.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- e_menu.h    16 Aug 2006 09:37:14 -0000      1.20
+++ e_menu.h    21 Aug 2006 20:03:09 -0000      1.21
@@ -113,7 +113,12 @@
    struct {
       void *data;
       void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
-   } cb;
+   } cb; /* Callback for menu item activation */
+
+   struct {
+      void *data;
+      void (*func) (void *data, E_Menu *m, E_Menu_Item *mi);
+   } realize_cb; /* Callback for menu item icon realization */
 
     struct {
       void *data;
@@ -173,7 +178,6 @@
 EAPI void         e_menu_item_icon_path_set(E_Menu_Item *mi, const char *icon);
 EAPI void         e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon);
 EAPI void         e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, 
const char *key);
-EAPI void         e_menu_item_icon_object_set(E_Menu_Item *mi, Evas_Object 
*obj);
 EAPI void         e_menu_item_label_set(E_Menu_Item *mi, const char *label);
 EAPI void         e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub);
 EAPI void         e_menu_item_separator_set(E_Menu_Item *mi, int sep);
@@ -183,6 +187,7 @@
 EAPI void         e_menu_item_toggle_set(E_Menu_Item *mi, int tog);
 EAPI int          e_menu_item_toggle_get(E_Menu_Item *mi);
 EAPI void         e_menu_item_callback_set(E_Menu_Item *mi,  void (*func) 
(void *data, E_Menu *m, E_Menu_Item *mi), void *data);
+EAPI void         e_menu_item_realize_callback_set(E_Menu_Item *mi,  void 
(*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
 EAPI void         e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi,  void 
(*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
 EAPI void         e_menu_item_submenu_post_callback_set(E_Menu_Item *mi,  void 
(*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data);
 EAPI void         e_menu_item_active_set(E_Menu_Item *mi, int active);



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to