As per discussions with raster, refactor the Desktop menu and include a
authorChristopher Michael <cpmichael1@comcast.net>
Mon, 16 Oct 2006 01:58:06 +0000 (01:58 +0000)
committerChristopher Michael <cpmichael1@comcast.net>
Mon, 16 Oct 2006 01:58:06 +0000 (01:58 +0000)
Shelves sub-menu.

SVN revision: 26639

src/bin/e_int_menus.c

index df96ea7..4a9f6bd 100644 (file)
@@ -37,7 +37,7 @@ static void _e_int_menus_apps_del_hook       (void *obj);
 static void _e_int_menus_apps_free_hook      (void *obj);
 static void _e_int_menus_apps_run            (void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_apps_drag           (void *data, E_Menu *m, E_Menu_Item *mi);
-static void _e_int_menus_apps_drag_finished(E_Drag *drag, int dropped);
+static void _e_int_menus_apps_drag_finished  (E_Drag *drag, int dropped);
 static void _e_int_menus_config_pre_cb       (void *data, E_Menu *m);
 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);
@@ -47,16 +47,22 @@ 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);
+static void _e_int_menus_virtuals_pre_cb     (void *data, E_Menu *m);
+static void _e_int_menus_virtuals_item_cb    (void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_themes_about        (void *data, E_Menu *m, E_Menu_Item *mi);
-static void _e_int_menus_lost_clients_pre_cb   (void *data, E_Menu *m);
-static void _e_int_menus_lost_clients_free_hook(void *obj);
-static void _e_int_menus_lost_clients_item_cb  (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_lost_clients_pre_cb    (void *data, E_Menu *m);
+static void _e_int_menus_lost_clients_free_hook (void *obj);
+static void _e_int_menus_lost_clients_item_cb   (void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_int_menus_sys_pre_cb          (void *data, E_Menu *m);
 static void _e_int_menus_sys_free_hook       (void *obj);
 static void _e_int_menus_augmentation_add    (E_Menu *m, Evas_List *augmentation);
 static void _e_int_menus_augmentation_del    (E_Menu *m, Evas_List *augmentation);
+static void _e_int_menus_shelves_pre_cb      (void *data, E_Menu *m);
+static void _e_int_menus_shelves_item_cb     (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_shelves_add_cb      (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_shelves_del_cb      (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_main_showhide       (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_int_menus_desk_item_cb        (void *data, E_Menu *m, E_Menu_Item *mi);
 
 /* local subsystem globals */
 static Evas_Hash *_e_int_menus_augmentation = NULL;
@@ -102,7 +108,7 @@ e_int_menus_main_new(void)
    subm = e_int_menus_desktops_new();
    dat->desktops = subm;
    mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Desktops"));
+   e_menu_item_label_set(mi, _("Desktop"));
    e_util_menu_item_edje_icon_set(mi, "enlightenment/desktops");
    e_menu_item_submenu_set(mi, subm);
   
@@ -119,7 +125,7 @@ e_int_menus_main_new(void)
    e_menu_item_label_set(mi, _("Lost Windows"));
    e_util_menu_item_edje_icon_set(mi, "enlightenment/lost_windows");
    e_menu_item_submenu_set(mi, subm);
-
+   
    mi = e_menu_item_new(m);
    e_menu_item_separator_set(mi, 1);
 
@@ -171,10 +177,33 @@ e_int_menus_apps_new(const char *dir)
 EAPI E_Menu *
 e_int_menus_desktops_new(void)
 {
-   E_Menu *m;
-
+   E_Menu *m, *subm;
+   E_Menu_Item *mi;
+   
    m = e_menu_new();
-   e_menu_pre_activate_callback_set(m, _e_int_menus_desktops_pre_cb, NULL);
+   
+   subm = e_menu_new();
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Virtual"));
+   e_util_menu_item_edje_icon_set(mi, "enlightenment/desktops");
+   e_menu_pre_activate_callback_set(subm, _e_int_menus_virtuals_pre_cb, NULL);
+   e_menu_item_submenu_set(mi, subm);
+
+   subm = e_int_menus_shelves_new();
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Shelves"));
+   e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf");
+   e_menu_pre_activate_callback_set(subm, _e_int_menus_shelves_pre_cb, NULL);
+   e_menu_item_submenu_set(mi, subm);
+
+   mi = e_menu_item_new(m);
+   e_menu_item_separator_set(mi, 1);
+   
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Show/Hide All Windows"));
+   e_util_menu_item_edje_icon_set(mi, "enlightenment/showhide");
+   e_menu_item_callback_set(mi, _e_int_menus_main_showhide, NULL);
+   
    return m;
 }
 
@@ -236,6 +265,16 @@ e_int_menus_lost_clients_new(void)
 }
 
 EAPI E_Menu *
+e_int_menus_shelves_new(void)
+{
+   E_Menu *m;
+
+   m = e_menu_new();
+   e_menu_pre_activate_callback_set(m, _e_int_menus_shelves_pre_cb, NULL);
+   return m;
+}
+
+EAPI E_Menu *
 e_int_menus_sys_new(void)
 {
    E_Menu *m;
@@ -575,20 +614,12 @@ _e_int_menus_apps_drag_finished(E_Drag *drag, int dropped)
 }
 
 static void
-_e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
+_e_int_menus_virtuals_pre_cb(void *data, E_Menu *m)
 {
    E_Menu_Item *mi;
    E_Menu *root;
-
-   e_menu_pre_activate_callback_set(m, NULL, NULL);
-
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Show/Hide All Windows"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/showhide");
-   e_menu_item_callback_set(mi, _e_int_menus_main_showhide, NULL);
    
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
+   e_menu_pre_activate_callback_set(m, NULL, NULL);
    
    root = e_menu_root_get(m);
    if ((root) && (root->zone))
@@ -605,15 +636,30 @@ _e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
             e_menu_item_radio_group_set(mi, 1);
             e_menu_item_radio_set(mi, 1);
             e_menu_item_label_set(mi, desk->name);
-            if (desk == e_desk_current_get(zone))
-              e_menu_item_toggle_set(mi, 1);
-            e_menu_item_callback_set(mi, _e_int_menus_desktops_item_cb, desk);
+            if (desk == e_desk_current_get(zone)) 
+              e_menu_item_toggle_set(mi, 1); 
+            e_menu_item_callback_set(mi, _e_int_menus_virtuals_item_cb, desk);
          }
      }
+   mi = e_menu_item_new(m);
+   e_menu_item_separator_set(mi, 1);
+
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Configure Virtual Desktops"));
+   e_menu_item_callback_set(mi, _e_int_menus_desk_item_cb, NULL);
 }
 
 static void
-_e_int_menus_desktops_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+_e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Container *con;
+   
+   con = e_container_current_get(e_manager_current_get());
+   e_int_config_desks(con);
+}
+
+static void
+_e_int_menus_virtuals_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    E_Desk *desk = data;
 
@@ -639,6 +685,12 @@ _e_int_menus_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 }
 
 static void
+_e_int_menus_shelf_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   e_int_config_shelf(m->zone->container);
+}
+
+static void
 _e_int_menus_applications_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    e_int_config_apps(m->zone->container);
@@ -688,6 +740,11 @@ _e_int_menus_config_pre_cb(void *data, E_Menu *m)
    e_menu_item_callback_set(mi, _e_int_menus_module_item_cb, NULL);
 
    mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Shelves"));
+   e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf");
+   e_menu_item_callback_set(mi, _e_int_menus_shelf_item_cb, NULL);
+   
+   mi = e_menu_item_new(m);
    e_menu_item_label_set(mi, _("Applications"));
    e_util_menu_item_edje_icon_set(mi, "enlightenment/applications");
    e_menu_item_callback_set(mi, _e_int_menus_applications_item_cb, NULL);
@@ -1101,3 +1158,143 @@ _e_int_menus_augmentation_del(E_Menu *m, Evas_List *augmentation)
          aug->del.func(aug->del.data, m);
      }
 }
+
+static void 
+_e_int_menus_shelves_pre_cb(void *data, E_Menu *m) 
+{
+   E_Menu_Item *mi;
+   Evas_List *l, *shelves = NULL;
+   E_Container *con;
+   E_Zone *zone;
+   
+   e_menu_pre_activate_callback_set(m, NULL, NULL);
+   con = e_container_current_get(e_manager_current_get());
+   zone = e_zone_current_get(con);
+   
+   /* get the current clients */
+   shelves = e_shelf_list();
+
+   if (!shelves)
+     { 
+       /* FIXME here we want nothing, but that crashes!!! */
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, _("(No Shelves)"));
+       return;
+     }
+   for (l = shelves; l; l = l->next)
+     {
+       E_Shelf *s;
+       const char *name;
+       char buf[4096];
+       
+       s = l->data;
+       if (!s) continue;
+       if (s->zone->num != zone->num) continue;
+       if (s->cfg->container != con->num) continue;
+       
+       name = s->name;
+       if (!name) name = "shelf";      
+       snprintf(buf, sizeof(buf), "%s #%i", name, s->id);
+
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, buf);
+       e_menu_item_callback_set(mi, _e_int_menus_shelves_item_cb, s);
+       switch (s->cfg->orient) 
+         {
+          case E_GADCON_ORIENT_LEFT:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_left");
+            break;
+          case E_GADCON_ORIENT_RIGHT:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_right");
+            break;
+          case E_GADCON_ORIENT_TOP:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_top");
+            break;
+          case E_GADCON_ORIENT_BOTTOM:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_bottom");
+            break;
+          case E_GADCON_ORIENT_CORNER_TL:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_top_left");
+            break;
+          case E_GADCON_ORIENT_CORNER_TR:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_top_right");
+            break;
+          case E_GADCON_ORIENT_CORNER_BL:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_bottom_left");
+            break;
+          case E_GADCON_ORIENT_CORNER_BR:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_bottom_right");
+            break;
+          case E_GADCON_ORIENT_CORNER_LT:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_left_top");
+            break;
+          case E_GADCON_ORIENT_CORNER_RT:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_right_top");
+            break;
+          case E_GADCON_ORIENT_CORNER_LB:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_left_bottom");
+            break;
+          case E_GADCON_ORIENT_CORNER_RB:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf_position_right_bottom");
+            break;
+          default:
+            e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf");      
+            break;
+         }
+     }
+   mi = e_menu_item_new(m);
+   e_menu_item_separator_set(mi, 1);
+   
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Add A Shelf"));
+   e_menu_item_callback_set(mi, _e_int_menus_shelves_add_cb, NULL);
+
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Delete A Shelf"));
+   e_menu_item_callback_set(mi, _e_int_menus_shelves_del_cb, NULL);
+}
+
+static void 
+_e_int_menus_shelves_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) 
+{
+   E_Shelf *s = data;
+
+   E_OBJECT_CHECK(s);
+   e_int_shelf_config(s);
+}
+
+static void 
+_e_int_menus_shelves_add_cb(void *data, E_Menu *m, E_Menu_Item *mi) 
+{
+   E_Container *con;
+   E_Zone *zone;
+   E_Config_Shelf *cs;
+   
+   con = e_container_current_get(e_manager_current_get());
+   zone = e_zone_current_get(con);
+   cs = E_NEW(E_Config_Shelf, 1);
+   cs->name = evas_stringshare_add("shelf");
+   cs->container = con->num;
+   cs->zone = zone->num;
+   cs->popup = 1;
+   cs->layer = 200;
+   cs->orient = E_GADCON_ORIENT_CORNER_BR;
+   cs->fit_along = 1;
+   cs->fit_size = 0;
+   cs->style = evas_stringshare_add("default");
+   cs->size = 40;
+   cs->overlap = 0;
+   e_config->shelves = evas_list_append(e_config->shelves, cs);
+   e_config_save_queue();
+   
+   e_shelf_config_init();
+}
+
+static void 
+_e_int_menus_shelves_del_cb(void *data, E_Menu *m, E_Menu_Item *mi) 
+{
+   E_Container *con;
+   
+   con = e_container_current_get(e_manager_current_get());
+   e_int_config_shelf(con);
+}