Always the same thing....

patch is up to date, cleaner and override previous ones.

--
Sébastien HOUZE
[EMAIL PROTECTED]
--- e/data/themes/default_border.edc	2005-07-13 11:25:22.000000000 +0200
+++ e.fun/data/themes/default_border.edc	2005-07-18 16:09:44.000000000 +0200
@@ -213,33 +213,39 @@
    image: "e17_border5.png" COMP;
    image: "e17_border6.png" COMP;
    image: "e17_border7.png" COMP;
-   image: "e17_titlebar_outline.png" COMP;
-   image: "e17_titlebar.png" COMP;
-   image: "e17_titlebar_hung.png" COMP;
-   image: "e17_titlebar_shadow1.png" COMP;
-   image: "e17_titlebar_shadow2.png" COMP;
-   image: "e17_titlebar_glint1.png" COMP;
-   image: "e17_titlebar_glint2.png" COMP;
-   image: "e17_titlebar_glint3.png" COMP;
+   image: "e17_button_detail_application.png" COMP;
+   image: "e17_button_detail_borderless.png" COMP;
    image: "e17_button_detail_close.png" COMP;
+   image: "e17_button_detail_desktop.png" COMP;
+   image: "e17_button_detail_fullscreen.png" COMP;
+   image: "e17_button_detail_kill.png" COMP;
+   image: "e17_button_detail_life.png" COMP;
+   image: "e17_button_detail_locks.png" COMP;
    image: "e17_button_detail_maximize.png" COMP;
    image: "e17_button_detail_minimize.png" COMP;
-   image: "e17_button_detail_shade.png" COMP;
-   image: "e17_button_detail_stick.png" COMP;
-   image: "e17_button_detail_locks.png" COMP;
-   image: "e17_button_detail_borderless.png" COMP;
+   image: "e17_button_detail_position.png" COMP;
    image: "e17_button_detail_remember.png" COMP;
-   image: "e17_button_detail_skip_winlist.png" COMP;
-   image: "e17_button_detail_fullscreen.png" COMP;
    image: "e17_button_detail_sendto.png" COMP;
-   image: "e17_button_detail_kill.png" COMP;
-   image: "e17_button_detail_stacking.png" COMP;
+   image: "e17_button_detail_shade.png" COMP;
+   image: "e17_button_detail_size.png" COMP;
+   image: "e17_button_detail_skip_winlist.png" COMP;
    image: "e17_button_detail_stack_below.png" COMP;
+   image: "e17_button_detail_stacking.png" COMP;
    image: "e17_button_detail_stack_normal.png" COMP;
    image: "e17_button_detail_stack_on_top.png" COMP;
+   image: "e17_button_detail_stick.png" COMP;
+   image: "e17_button_detail_user.png" COMP;
    image: "e17_mini_button.png" COMP;
    image: "e17_mini_button_shadow1.png" COMP;
    image: "e17_mini_button_shadow2.png" COMP;
+   image: "e17_titlebar_glint1.png" COMP;
+   image: "e17_titlebar_glint2.png" COMP;
+   image: "e17_titlebar_glint3.png" COMP;
+   image: "e17_titlebar_hung.png" COMP;
+   image: "e17_titlebar_outline.png" COMP;
+   image: "e17_titlebar.png" COMP;
+   image: "e17_titlebar_shadow1.png" COMP;
+   image: "e17_titlebar_shadow2.png" COMP;
 }
 group {
    name: "widgets/border/default/border";
@@ -1296,6 +1302,18 @@
 	 action:  SIGNAL_EMIT "action" "maximize";
       }
       program {
+	 name:    "maximize_horizontal_action";
+	 signal:  "mouse,clicked,2";
+	 source:  "button_1";
+	 action:  SIGNAL_EMIT "action" "maximize,horizontal";
+      }
+      program {
+	 name:    "maximize_vertical_action";
+	 signal:  "mouse,clicked,3";
+	 source:  "button_1";
+	 action:  SIGNAL_EMIT "action" "maximize,vertical";
+      }
+      program {
 	 name:    "iconify_action";
 	 signal:  "mouse,clicked,1";
 	 source:  "button_2";
@@ -1670,20 +1688,25 @@
    }
 }
 
+FULL_SIZE_BORDER_BUTTON("application")
+FULL_SIZE_BORDER_BUTTON("borderless")
 FULL_SIZE_BORDER_BUTTON("close")
-FULL_SIZE_BORDER_BUTTON("minimize")
-FULL_SIZE_BORDER_BUTTON("maximize")
-FULL_SIZE_BORDER_BUTTON("shade")
-FULL_SIZE_BORDER_BUTTON("stick")
+FULL_SIZE_BORDER_BUTTON("desktop")
+FULL_SIZE_BORDER_BUTTON("fullscreen")
 FULL_SIZE_BORDER_BUTTON("kill")
+FULL_SIZE_BORDER_BUTTON("life")
 FULL_SIZE_BORDER_BUTTON("locks")
-FULL_SIZE_BORDER_BUTTON("borderless")
-FULL_SIZE_BORDER_BUTTON("fullscreen")
+FULL_SIZE_BORDER_BUTTON("maximize")
+FULL_SIZE_BORDER_BUTTON("minimize")
+FULL_SIZE_BORDER_BUTTON("position")
 FULL_SIZE_BORDER_BUTTON("remember")
-FULL_SIZE_BORDER_BUTTON("skip_winlist")
 FULL_SIZE_BORDER_BUTTON("sendto")
+FULL_SIZE_BORDER_BUTTON("shade")
+FULL_SIZE_BORDER_BUTTON("size")
+FULL_SIZE_BORDER_BUTTON("skip_winlist")
+FULL_SIZE_BORDER_BUTTON("stack_below")
 FULL_SIZE_BORDER_BUTTON("stacking")
-FULL_SIZE_BORDER_BUTTON("stack_on_top")
 FULL_SIZE_BORDER_BUTTON("stack_normal")
-FULL_SIZE_BORDER_BUTTON("stack_below")
-
+FULL_SIZE_BORDER_BUTTON("stack_on_top")
+FULL_SIZE_BORDER_BUTTON("stick")
+FULL_SIZE_BORDER_BUTTON("user")
--- e/src/bin/e_actions.c	2005-07-07 14:02:36.000000000 +0200
+++ e.fun/src/bin/e_actions.c	2005-07-15 01:10:53.000000000 +0200
@@ -248,6 +248,8 @@
 }
 
 /***************************************************************************/
+//#define ACT_FN_GO(act) \
+//   static void _e_actions_act_##act##_go(E_Object *obj, char *params)
 ACT_FN_GO(window_maximized_toggle)
 {
    if (!obj) obj = E_OBJECT(e_border_focused_get());
@@ -263,7 +265,7 @@
 	
 	bd = (E_Border *)obj;
 	if (bd->maximized) e_border_unmaximize(bd);
-        else e_border_maximize(bd, e_config->maximize_policy);
+        else e_border_maximize(bd, 0, e_config->maximize_policy);
      }
 }
 
--- e/src/bin/e_border.c	2005-07-13 17:02:08.000000000 +0200
+++ e.fun/src/bin/e_border.c	2005-07-18 19:22:12.000000000 +0200
@@ -18,9 +18,20 @@
 #define MOVE        8
 #define RESIZE_NONE 11
 
+/* FIXME: must find if compatible with netwm */
+#define MAXIMIZE    12
+#define MAXIMIZE_H  13
+#define MAXIMIZE_V  14
+
+#define MI_ACTION_CLASS		1
+#define MI_CHECK_CLASS		2
+#define MI_RADIO_CLASS		3
+#define MI_SEPARATOR_CLASS	4
+
 /* local subsystem functions */
 static void _e_border_free(E_Border *bd);
 static void _e_border_del(E_Border *bd);
+static void _e_border_menu_free(E_Border *bd);
 
 /* FIXME: these likely belong in a separate icccm/client handler */
 /* and the border needs to become a dumb object that just does what its */
@@ -77,6 +88,9 @@
 
 static void _e_border_cb_border_menu_end(void *data, E_Menu *m);
 static void _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key);
+static void _e_border_menu_item_new(E_Border *bd, E_Menu *m, const char *label, const unsigned int class, 
+      unsigned int statement, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), const char *edj);
+static void _e_border_submenu_item_new(E_Menu *m, E_Menu *sm, const char *label, const char *edj);
 static void _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi);
 static void _e_border_menu_cb_kill(void *data, E_Menu *m, E_Menu_Item *mi);
@@ -1119,7 +1133,7 @@
 }
 
 void
-e_border_maximize(E_Border *bd, E_Maximize max)
+e_border_maximize(E_Border *bd, unsigned int mode, E_Maximize max)
 {
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@@ -1168,20 +1182,53 @@
 					    bd->client_inset.l, bd->client_inset.r,
 					    bd->client_inset.t, bd->client_inset.b);
 		}
-	      w = bd->zone->w;
-	      h = bd->zone->h;
-	      /* center x-direction */
+	      switch (mode)
+		{
+		 case MAXIMIZE_H:
+		   h = bd->h;
+		   w = bd->zone->w;
+		   y1 = bd->y;
+		   x1 = bd->zone->x + (bd->zone->w - w) / 2;
+		    break;
+		 case MAXIMIZE_V:
+		   h = bd->zone->h;
+		   w = bd->w;
+		   x1 = bd->x;
+		   y1 = bd->zone->y + (bd->zone->h - h) / 2;
+		    break;
+		 case MAXIMIZE:
+		 default:
+		   h = bd->zone->h;
+		   w = bd->zone->w;
+		   /* center x-direction */
+		   x1 = bd->zone->x + (bd->zone->w - w) / 2;
+		   /* center y-direction */
+		   y1 = bd->zone->y + (bd->zone->h - h) / 2;
+		    break;
+		}
+	      
 	      _e_border_resize_limit(bd, &w, &h);
-	      x1 = bd->zone->x + (bd->zone->w - w) / 2;
-	      /* center y-direction */
-	      y1 = bd->zone->y + (bd->zone->h - h) / 2;
 	      e_border_move_resize(bd, x1, y1, w, h);
 	      bd->maximized = E_MAXIMIZE_FULLSCREEN;
 	      break;
 	   case E_MAXIMIZE_SMART:
 	   case E_MAXIMIZE_EXPAND:
-	      x1 = bd->zone->x;
-	      y1 = bd->zone->y;
+	      if (mode==MAXIMIZE_V)
+		{
+		   x1 = bd->x;
+		}
+	      else
+		{
+		   x1 = bd->zone->x;
+		}
+	      if (mode==MAXIMIZE_H)
+		{
+		   y1 = bd->y;
+		}
+	      else
+		{
+		   y1 = bd->zone->y;
+		}
 	      x2 = bd->zone->x + bd->zone->w;
 	      y2 = bd->zone->y + bd->zone->h;
 
@@ -1191,8 +1238,23 @@
 	      /* walk through docks and toolbars */
 	      e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
 
-	      w = x2 - x1;
-	      h = y2 - y1;
+	      switch (mode)
+		{
+		 case MAXIMIZE_H:
+		   h = bd->h;
+		   w = x2 - x1;
+		    break;
+		 case MAXIMIZE_V:
+		   h = y2 - y1;
+		   w = bd->w;
+		    break;
+		 case MAXIMIZE:
+		 default:
+		   h = y2 - y1;
+		   w = x2 - x1;
+		    break;
+		}
+
 	      _e_border_resize_limit(bd, &w, &h);
 	      e_border_move_resize(bd, x1, y1, w, h);
 	      /* Don't set bd->maximized if E_MAXIMIZE_EXPAND, no need to return from this state */
@@ -1200,8 +1262,22 @@
 		bd->maximized = e_config->maximize_policy;
 	      break;
 	   case E_MAXIMIZE_FILL:
-	      x1 = bd->zone->x;
-	      y1 = bd->zone->y;
+	      if (mode==MAXIMIZE_V)
+		{
+		   x1 = bd->x;
+		}
+	      else
+		{
+		   x1 = bd->zone->x;
+		}
+	      if (mode==MAXIMIZE_H)
+		{
+		   y1 = bd->y;
+		}
+	      else
+		{
+		   y1 = bd->zone->y;
+		}
 	      x2 = bd->zone->x + bd->zone->w;
 	      y2 = bd->zone->y + bd->zone->h;
 
@@ -1211,8 +1287,22 @@
 	      /* walk through all windows */
 	      e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2);
 
-	      w = x2 - x1;
-	      h = y2 - y1;
+	      switch (mode)
+		{
+		 case MAXIMIZE_H:
+		   h = bd->h;
+		   w = x2 - x1;
+		    break;
+		 case MAXIMIZE_V:
+		   h = y2 - y1;
+		   w = bd->w;
+		    break;
+		 case MAXIMIZE:
+		 default:
+		    h = y2 - y1;
+		    w = x2 - x1;
+		    break;
+		}
 	      _e_border_resize_limit(bd, &w, &h);
 	      e_border_move_resize(bd, x1, y1, w, h);
 	      /* Don't set bd->maximized, no need to return from this state */
@@ -1965,26 +2055,9 @@
 	free(bd->pending_move_resize->data);
 	bd->pending_move_resize = evas_list_remove_list(bd->pending_move_resize, bd->pending_move_resize);
      }
-   if (bd->border_menu)
-     {
-	e_object_del(E_OBJECT(bd->border_menu));
-	bd->border_menu = NULL;
-     }
-   if (bd->border_locks_menu)
-     {
-	e_object_del(E_OBJECT(bd->border_locks_menu));
-	bd->border_locks_menu = NULL;
-     }
-   if (bd->border_remember_menu)
-     {
-	e_object_del(E_OBJECT(bd->border_remember_menu));
-	bd->border_remember_menu = NULL;
-     }
-   if (bd->border_stacking_menu)
-     {
-	e_object_del(E_OBJECT(bd->border_stacking_menu));
-	bd->border_stacking_menu = NULL;
-     }
+
+   _e_border_menu_free(bd);
+
    if (focused == bd)
      {
 //	ecore_x_window_focus(bd->zone->container->manager->root);
@@ -2041,6 +2114,61 @@
    free(bd);
 }
 
+static void
+_e_border_menu_free(E_Border *bd)
+{
+   if (bd->border_remember_what_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_remember_what_menu));
+	bd->border_remember_what_menu = NULL;
+     }
+   if (bd->border_remember_for_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_remember_for_menu));
+	bd->border_remember_for_menu = NULL;
+     }
+   if (bd->border_remember_match_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_remember_match_menu));
+	bd->border_remember_match_menu = NULL;
+     }
+   if (bd->border_remember_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_remember_menu));
+	bd->border_remember_menu = NULL;
+     }
+   if (bd->border_application_locks_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_application_locks_menu));
+	bd->border_application_locks_menu = NULL;
+     }
+   if (bd->border_common_locks_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_common_locks_menu));
+	bd->border_common_locks_menu = NULL;
+     }
+   if (bd->border_user_locks_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_user_locks_menu));
+	bd->border_user_locks_menu = NULL;
+     }
+   if (bd->border_locks_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_locks_menu));
+	bd->border_locks_menu = NULL;
+     }
+   if (bd->border_stacking_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_stacking_menu));
+	bd->border_stacking_menu = NULL;
+     }
+   if (bd->border_menu)
+     {
+	e_object_del(E_OBJECT(bd->border_menu));
+	bd->border_menu = NULL;
+     }
+}
+
 static int
 _e_border_del_dangling_ref_check(void *data)
 {
@@ -3144,7 +3272,23 @@
 	if (!bd->lock_user_maximize)
 	  {
 	     if (bd->maximized) e_border_unmaximize(bd);
-	     else e_border_maximize(bd, e_config->maximize_policy);
+	     else e_border_maximize(bd, MAXIMIZE, e_config->maximize_policy);
+	  }
+     }
+   else if (!strcmp(source, "maximize,horizontal"))
+     {
+	if (!bd->lock_user_maximize)
+	  {
+	     if (bd->maximized) e_border_unmaximize(bd);
+	     else e_border_maximize(bd, MAXIMIZE_H, e_config->maximize_policy);
+	  }
+     }
+   else if (!strcmp(source, "maximize,vertical"))
+     {
+	if (!bd->lock_user_maximize)
+	  {
+	     if (bd->maximized) e_border_unmaximize(bd);
+	     else e_border_maximize(bd, MAXIMIZE_V, e_config->maximize_policy);
 	  }
      }
    else if (!strcmp(source, "iconify"))
@@ -4125,7 +4269,7 @@
 		  bd->lock_user_shade = rem->prop.lock_user_shade;
 		  bd->lock_client_shade = rem->prop.lock_client_shade;
 		  bd->lock_user_maximize = rem->prop.lock_user_maximize;
-		  bd->lock_client_mazimize = rem->prop.lock_client_mazimize;
+		  bd->lock_client_maximize = rem->prop.lock_client_maximize;
 		  bd->lock_user_fullscreen = rem->prop.lock_user_fullscreen;
 		  bd->lock_client_fullscreen = rem->prop.lock_client_fullscreen;
 		  bd->lock_border = rem->prop.lock_border;
@@ -5077,22 +5221,7 @@
    bd = e_object_data_get(E_OBJECT(m));
    if (bd)
      {
-	if (bd->border_locks_menu)
-	  {
-	     e_object_del(E_OBJECT(bd->border_locks_menu));
-	     bd->border_locks_menu = NULL;
-	  }
-	if (bd->border_remember_menu)
-	  {
-	     e_object_del(E_OBJECT(bd->border_remember_menu));
-	     bd->border_remember_menu = NULL;
-	  }
-	if (bd->border_stacking_menu)
-	  {
-	     e_object_del(E_OBJECT(bd->border_stacking_menu));
-	     bd->border_stacking_menu = NULL;
-	  }
-	bd->border_menu = NULL;
+	_e_border_menu_free(bd);
      }
    e_object_del(E_OBJECT(m));
 }
@@ -5122,7 +5251,7 @@
 NEW_LOCK_FN(lock_user_shade)
 NEW_LOCK_FN(lock_client_shade)
 NEW_LOCK_FN(lock_user_maximize)
-NEW_LOCK_FN(lock_client_mazimize)
+NEW_LOCK_FN(lock_client_maximize)
 NEW_LOCK_FN(lock_user_fullscreen)
 NEW_LOCK_FN(lock_client_fullscreen)
 NEW_LOCK_FN(lock_border)
@@ -5573,6 +5702,71 @@
      bd->remember->apply &= ~E_REMEMBER_APPLY_RUN;
    e_config_save_queue();
 }
+
+/*
+	_e_border_menu_item_new(bd, m, _("Kill"), MI_ACTION_CLASS, 0, 
+	      _e_border_menu_cb_kill, "kill");
+	      */
+static void
+_e_border_menu_item_new(E_Border *bd, E_Menu *m, const char *label, const unsigned int class, unsigned int statement, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), const char *edj)
+{
+   E_Menu_Item *mi;
+   char icon[128];
+   char key[128];
+   
+   mi = e_menu_item_new(m);
+   if (class != MI_SEPARATOR_CLASS)
+     {
+	e_menu_item_label_set(mi, label);
+     }
+
+   switch(class)
+     {
+      case MI_CHECK_CLASS:
+	 e_menu_item_check_set(mi, 1);
+	 e_menu_item_toggle_set(mi, statement);
+	 break;
+      case MI_RADIO_CLASS:
+	 e_menu_item_radio_set(mi, 1);
+	 e_menu_item_radio_group_set(mi, 2);
+	 e_menu_item_toggle_set(mi, statement);
+	 break;
+      case MI_SEPARATOR_CLASS:
+	 e_menu_item_separator_set(mi, 1);
+	 break;
+      case MI_ACTION_CLASS:
+      default:
+	 break;
+     }
+   if (class != MI_SEPARATOR_CLASS)
+     {
+	e_menu_item_callback_set(mi, func, bd);
+     }
+   if (class != MI_SEPARATOR_CLASS  && strcmp(edj, ""))
+     {
+	sprintf(icon, "widgets/border/default/%s", edj);
+	sprintf(key, "widgets/border/default/%s", edj);
+	e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/borders", icon), key);
+     }
+}
+
+static void
+_e_border_submenu_item_new(E_Menu *m, E_Menu *sm, const char *label, const char *edj)
+{
+     E_Menu_Item *mi;
+     char icon[128];
+     char key[128];
+     
+     mi = e_menu_item_new(m);
+     e_menu_item_label_set(mi, label);
+     e_menu_item_submenu_set(mi, sm);	
+     if (strcmp(edj, ""))
+       {
+	  sprintf(icon, "widgets/border/default/%s", edj);
+	  sprintf(key, "widgets/border/default/%s", edj);
+	  e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/borders", icon), key);
+       }
+}
 					  
 static void
 _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
@@ -5582,160 +5776,173 @@
    E_App *a;
 
    if (bd->border_menu) return;
+   m = e_menu_new();
+   bd->border_user_locks_menu = m;
+   _e_border_menu_item_new(bd, m, _("Position"), MI_CHECK_CLASS, (bd->lock_user_location ? 1 : 0), 
+	 _e_border_menu_cb_lock_user_location, "position");
+   _e_border_menu_item_new(bd, m, _("Size"), MI_CHECK_CLASS, (bd->lock_user_size ? 1: 0), 
+	 _e_border_menu_cb_lock_user_size, "size");
+   _e_border_menu_item_new(bd, m, _("Iconify"), MI_CHECK_CLASS, (bd->lock_user_iconify ? 1: 0), 
+	 _e_border_menu_cb_lock_user_iconify, "minimize");
+   _e_border_menu_item_new(bd, m, _("Shade"), MI_CHECK_CLASS, (bd->lock_user_shade ? 1: 0), 
+	 _e_border_menu_cb_lock_user_shade, "shade");
+   _e_border_menu_item_new(bd, m, _("Maximize"), MI_CHECK_CLASS, (bd->lock_user_maximize ? 1: 0), 
+	 _e_border_menu_cb_lock_user_maximize, "maximize");
+   _e_border_menu_item_new(bd, m, _("Sticky"), MI_CHECK_CLASS, (bd->lock_user_sticky ? 1: 0), 
+	 _e_border_menu_cb_lock_user_sticky, "stick");
+   _e_border_menu_item_new(bd, m, _("Virtual Desktop"), MI_CHECK_CLASS, (bd->lock_user_desk ? 1: 0), 
+	 _e_border_menu_cb_lock_user_desk, "desktop");
+   _e_border_menu_item_new(bd, m, _("Fullscreen"), MI_CHECK_CLASS, (bd->lock_user_fullscreen ? 1: 0), 
+	 _e_border_menu_cb_lock_user_fullscreen, "fullscreen");
+   _e_border_menu_item_new(bd, m, _("Stacking"), MI_CHECK_CLASS, (bd->lock_user_stacking ? 1: 0), 
+	 _e_border_menu_cb_lock_user_stacking, "stacking");
+   
+   m = e_menu_new();
+   bd->border_application_locks_menu = m;
+   _e_border_menu_item_new(bd, m, _("Position"), MI_CHECK_CLASS, (bd->lock_client_location ? 1 : 0), 
+	 _e_border_menu_cb_lock_client_location, "position");
+   _e_border_menu_item_new(bd, m, _("Size"), MI_CHECK_CLASS, (bd->lock_client_size ? 1: 0), 
+	 _e_border_menu_cb_lock_client_size, "size");
+   _e_border_menu_item_new(bd, m, _("Iconify"), MI_CHECK_CLASS, (bd->lock_client_iconify ? 1: 0), 
+	 _e_border_menu_cb_lock_client_iconify, "minimize");
+   _e_border_menu_item_new(bd, m, _("Shade"), MI_CHECK_CLASS, (bd->lock_client_shade ? 1: 0), 
+	 _e_border_menu_cb_lock_client_shade, "shade");
+   _e_border_menu_item_new(bd, m, _("Maximize"), MI_CHECK_CLASS, (bd->lock_client_maximize ? 1: 0), 
+	 _e_border_menu_cb_lock_client_maximize, "maximize");
+   _e_border_menu_item_new(bd, m, _("Sticky"), MI_CHECK_CLASS, (bd->lock_client_sticky ? 1: 0), 
+	 _e_border_menu_cb_lock_client_sticky, "stick");
+   _e_border_menu_item_new(bd, m, _("Virtual Desktop"), MI_CHECK_CLASS, (bd->lock_client_desk ? 1: 0), 
+	 _e_border_menu_cb_lock_client_desk, "desktop");
+   _e_border_menu_item_new(bd, m, _("Fullscreen"), MI_CHECK_CLASS, (bd->lock_client_fullscreen ? 1: 0), 
+	 _e_border_menu_cb_lock_client_fullscreen, "fullscreen");
+   _e_border_menu_item_new(bd, m, _("Stacking"), MI_CHECK_CLASS, (bd->lock_client_stacking ? 1: 0), 
+	 _e_border_menu_cb_lock_client_stacking, "stacking");
 
    m = e_menu_new();
-   bd->border_locks_menu = m;
+   bd->border_common_locks_menu = m;
+   _e_border_menu_item_new(bd, m, _("Border"), MI_CHECK_CLASS, (bd->lock_border ? 1: 0), 
+	 _e_border_menu_cb_lock_border, "borderless");
+   _e_border_menu_item_new(bd, m, _("Close"), MI_CHECK_CLASS, (bd->lock_close ? 1: 0), 
+	 _e_border_menu_cb_lock_close, "close");
+   /*
+   e_border_in_menu_item_new(bd, m, _("Focus In"), MI_CHECK_CLASS, (bd->lock_focus_in ? 1: 0), 
+	 _e_border_menu_cb_lock_focus_in, "focus_in");
+   e_border_menu_item_new(bd, m, _("Focus Out"), MI_CHECK_CLASS, (bd->lock_focus_out ? 1: 0), 
+	 _e_focus_out_menu_cb_lock_focus_out, "focus_out");
+	 */
+   _e_border_menu_item_new(bd, m, _("Lifespan"), MI_CHECK_CLASS, (bd->lock_life ? 1: 0), 
+	 _e_border_menu_cb_lock_life, "life");
 
-#define NEW_LOCK_MI(txt, var) \
-   mi = e_menu_item_new(m); \
-   e_menu_item_label_set(mi, txt); \
-   e_menu_item_check_set(mi, 1); \
-   e_menu_item_toggle_set(mi, bd->var); \
-   e_menu_item_callback_set(mi, _e_border_menu_cb_##var, bd);
-
-   /* FIXME: 1 big menu right now - mayeb layer make it 3 submenus? */
-   NEW_LOCK_MI(_("Position (User)"), lock_user_location);
-   NEW_LOCK_MI(_("Size (User)"), lock_user_size);
-   NEW_LOCK_MI(_("Stacking (User)"), lock_user_stacking);
-   NEW_LOCK_MI(_("Iconify (User)"), lock_user_iconify);
-/*   NEW_LOCK_MI(_("Virtual Desktop (User)"), lock_user_desk);*/
-   NEW_LOCK_MI(_("Sticky (User)"), lock_user_sticky);
-   NEW_LOCK_MI(_("Shade (User)"), lock_user_shade);
-   NEW_LOCK_MI(_("Maximize (User)"), lock_user_maximize);
-   NEW_LOCK_MI(_("Fullscreen (User)"), lock_user_fullscreen);
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_LOCK_MI(_("Position (Application)"), lock_client_location);
-   NEW_LOCK_MI(_("Size (Application)"), lock_client_size);
-   NEW_LOCK_MI(_("Stacking (Application)"), lock_client_stacking);
-   NEW_LOCK_MI(_("Iconify (Application)"), lock_client_iconify);
-/*   NEW_LOCK_MI(_("Virtual Desktop (Application)"), lock_client_desk);*/
-   NEW_LOCK_MI(_("Sticky (Application)"), lock_client_sticky);
-   NEW_LOCK_MI(_("Shade (Application)"), lock_client_shade);
-   NEW_LOCK_MI(_("Maximize (Application)"), lock_client_mazimize);
-   NEW_LOCK_MI(_("Fullscreen (Application)"), lock_client_fullscreen);
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_LOCK_MI(_("Border"), lock_border);
-   NEW_LOCK_MI(_("Close"), lock_close);
-/*   NEW_LOCK_MI(_("Focus In"), lock_focus_in);*/
-/*   NEW_LOCK_MI(_("Focus Out"), lock_focus_out);*/
-   NEW_LOCK_MI(_("Lifespan"), lock_life);
+   m = e_menu_new();
+   bd->border_locks_menu = m;
+   _e_border_submenu_item_new(m, bd->border_user_locks_menu, _("User"),  "user");
+   _e_border_submenu_item_new(m, bd->border_application_locks_menu, _("Application"),  "application");
+   _e_border_submenu_item_new(m, bd->border_common_locks_menu, _("Common"),  "common");
 
    m = e_menu_new();
-   bd->border_remember_menu = m;
+   bd->border_remember_what_menu = m;
+
+   _e_border_menu_item_new(bd, m, _("Position"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_POS)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_pos, "position");
+   _e_border_menu_item_new(bd, m, _("Size"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_SIZE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_size, "size");
+   _e_border_menu_item_new(bd, m, _("Stickiness"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_STICKY)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_sticky, "stick");
+   _e_border_menu_item_new(bd, m, _("Shaded State"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_SHADE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_shade, "shade");
+   _e_border_menu_item_new(bd, m, _("Border"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_BORDER)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_border, "borderless");
+   _e_border_menu_item_new(bd, m, _("Skip Window List"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_SKIP_WINLIST)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_skip_winlist, "skip_winlist");
+   _e_border_menu_item_new(bd, m, _("Stacking"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_LAYER)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_layer, "stacking");
+   _e_border_menu_item_new(bd, m, "", MI_SEPARATOR_CLASS, 0, NULL, "");
+   _e_border_menu_item_new(bd, m, _("Locks"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_LOCKS)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_locks, "locks");
+   _e_border_menu_item_new(bd, m, _("Desktop"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_DESKTOP)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_desktop, "position");
+   _e_border_menu_item_new(bd, m, _("Zone"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_ZONE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_zone, "zone");
+   /*
+   _e_border_menu_item_new(bd, m, "", MI_SEPARATOR_CLASS, 0, NULL, "");
+   _e_border_menu_item_new(bd, m, _("Run this porgram on login"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply & E_REMEMBER_APPLY_RUN)) ? 1: 0), 
+	 _e_border_menu_cb_remember_apply_run, "run");
+   */
    
-#define NEW_REMEMBER_MI(txt, flag, var, cb) \
-   mi = e_menu_item_new(m); \
-   e_menu_item_label_set(mi, txt); \
-   e_menu_item_check_set(mi, 1); \
-   if ((bd->remember) && (bd->remember->flag & var)) \
-     e_menu_item_toggle_set(mi, 1); \
-   e_menu_item_callback_set(mi, cb, bd);
+   m = e_menu_new();
+   bd->border_remember_for_menu = m;
+   _e_border_menu_item_new(bd, m, _("This Window"), MI_CHECK_CLASS, (bd->remember ? 1: 0), 
+	 _e_border_menu_cb_remember, "");
+   _e_border_menu_item_new(bd, m, _("This Instance Only"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->apply_first_only & 1)) ? 1: 0), _e_border_menu_cb_remember_first, "");
 
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Remember This Window")); \
-   e_menu_item_check_set(mi, 1);
-   if (bd->remember)
-     e_menu_item_toggle_set(mi, 1);
-   e_menu_item_callback_set(mi, _e_border_menu_cb_remember, bd);
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_REMEMBER_MI(_("Remember This Instance Only"), apply_first_only, 1, _e_border_menu_cb_remember_first);
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_REMEMBER_MI(_("Match by Name"), match, E_REMEMBER_MATCH_NAME, _e_border_menu_cb_remember_match_name);
-   NEW_REMEMBER_MI(_("Match by Class"), match, E_REMEMBER_MATCH_CLASS, _e_border_menu_cb_remember_match_class);
-   NEW_REMEMBER_MI(_("Match by Title"), match, E_REMEMBER_MATCH_TITLE, _e_border_menu_cb_remember_match_title);
-   NEW_REMEMBER_MI(_("Match by Role"), match, E_REMEMBER_MATCH_ROLE, _e_border_menu_cb_remember_match_role);
-   NEW_REMEMBER_MI(_("Match by Window Type"), match, E_REMEMBER_MATCH_TYPE, _e_border_menu_cb_remember_match_type);
-   NEW_REMEMBER_MI(_("Match by Transient Status"), match, E_REMEMBER_MATCH_TRANSIENT, _e_border_menu_cb_remember_match_transient);
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_REMEMBER_MI(_("Remember Position"), apply, E_REMEMBER_APPLY_POS, _e_border_menu_cb_remember_apply_pos);
-   NEW_REMEMBER_MI(_("Remember Size"), apply, E_REMEMBER_APPLY_SIZE, _e_border_menu_cb_remember_apply_size);
-   NEW_REMEMBER_MI(_("Remember Stacking"), apply, E_REMEMBER_APPLY_LAYER, _e_border_menu_cb_remember_apply_layer);
-   NEW_REMEMBER_MI(_("Remember Locks"), apply, E_REMEMBER_APPLY_LOCKS, _e_border_menu_cb_remember_apply_locks);
-   NEW_REMEMBER_MI(_("Remember Border"), apply, E_REMEMBER_APPLY_BORDER, _e_border_menu_cb_remember_apply_border);
-   NEW_REMEMBER_MI(_("Remember Stickiness"), apply, E_REMEMBER_APPLY_STICKY, _e_border_menu_cb_remember_apply_sticky);
-   NEW_REMEMBER_MI(_("Remember Desktop"), apply, E_REMEMBER_APPLY_DESKTOP, _e_border_menu_cb_remember_apply_desktop);
-   NEW_REMEMBER_MI(_("Remember Shaded State"), apply, E_REMEMBER_APPLY_SHADE, _e_border_menu_cb_remember_apply_shade);
-   NEW_REMEMBER_MI(_("Remember Zone"), apply, E_REMEMBER_APPLY_ZONE, _e_border_menu_cb_remember_apply_zone);
-   NEW_REMEMBER_MI(_("Remember Skip Window List"), apply, E_REMEMBER_APPLY_SKIP_WINLIST, _e_border_menu_cb_remember_apply_skip_winlist);
-/*   
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-   NEW_REMEMBER_MI(_("Run this porgram on login"), apply, E_REMEMBER_APPLY_RUN, _e_border_menu_cb_remember_apply_run);
- */ 
+   
+   m = e_menu_new();
+   bd->border_remember_match_menu = m;
+   _e_border_menu_item_new(bd, m, _("Name"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_NAME)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_name, "");
+   _e_border_menu_item_new(bd, m, _("Class"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_CLASS)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_class, "");
+   _e_border_menu_item_new(bd, m, _("Title"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_TITLE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_title, "");
+   _e_border_menu_item_new(bd, m, _("Role"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_ROLE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_role, "");
+   _e_border_menu_item_new(bd, m, _("Window Type"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_TYPE)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_type, "");
+   _e_border_menu_item_new(bd, m, _("Transient Status"), MI_CHECK_CLASS, 
+	 (((bd->remember) && (bd->remember->match & E_REMEMBER_MATCH_TRANSIENT)) ? 1: 0), 
+	 _e_border_menu_cb_remember_match_transient, "");
+   
 
    m = e_menu_new();
-   bd->border_stacking_menu = m;
+   bd->border_remember_menu = m;
+   _e_border_submenu_item_new(m, bd->border_remember_what_menu, _("What"),  "");
+   _e_border_submenu_item_new(m, bd->border_remember_for_menu, _("For"),  "");
+   _e_border_submenu_item_new(m, bd->border_remember_match_menu, _("Match By"),  "");
+
    if (!bd->lock_user_stacking)
      {
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Always On Top"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 2);
-   e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0));
-   e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, bd);
-   e_menu_item_icon_edje_set(mi,
-			    (char *)e_theme_edje_file_get("base/theme/borders",
-							  "widgets/border/default/stack_on_top"),
-			    "widgets/border/default/stack_on_top");
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Normal"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 2);
-   e_menu_item_toggle_set(mi, (bd->layer == 100 ? 1 : 0));
-   e_menu_item_callback_set(mi, _e_border_menu_cb_normal, bd);
-   e_menu_item_icon_edje_set(mi,
-			    (char *)e_theme_edje_file_get("base/theme/borders",
-							  "widgets/border/default/stack_normal"),
-			    "widgets/border/default/stack_normal");
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Always Below"));
-   e_menu_item_radio_set(mi, 1);
-   e_menu_item_radio_group_set(mi, 2);
-   e_menu_item_toggle_set(mi, (bd->layer == 50 ? 1 : 0));
-   e_menu_item_callback_set(mi, _e_border_menu_cb_below, bd);
-   e_menu_item_icon_edje_set(mi,
-			    (char *)e_theme_edje_file_get("base/theme/borders",
-							  "widgets/border/default/stack_below"),
-			    "widgets/border/default/stack_below");
+	m = e_menu_new();
+	bd->border_stacking_menu = m;
+	_e_border_menu_item_new(bd, m, _("Always On Top"), MI_RADIO_CLASS, (bd->layer == 150 ? 1: 0), 
+			_e_border_menu_cb_on_top, "stack_on_top");
+	_e_border_menu_item_new(bd, m, _("Normal"), MI_RADIO_CLASS, (bd->layer == 100 ? 1: 0), 
+			_e_border_menu_cb_normal, "stack_normal");
+	_e_border_menu_item_new(bd, m, _("Always Below"), MI_RADIO_CLASS, (bd->layer == 50 ? 1: 0), 
+			_e_border_menu_cb_below, "stack_below");
      }
-   
+
    m = e_menu_new();
    e_object_data_set(E_OBJECT(m), bd);
    bd->border_menu = m;
    e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL);
-
    if (!bd->lock_close)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Close"));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd);
-	e_menu_item_icon_edje_set(mi, 
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/close"), 
-				  "widgets/border/default/close");
+	_e_border_menu_item_new(bd, m, _("Close"), MI_ACTION_CLASS, 0, 
+	      _e_border_menu_cb_close, "close");
      }
-
-   if (!bd->lock_user_iconify)
-     {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Iconify"));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_iconify, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/minimize"),
-				  "widgets/border/default/minimize");
-     }
-   
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-
    if ((!bd->lock_close) && (!bd->internal))
      {
+	/*
+	_e_border_menu_item_new(bd, m, _("Kill"), MI_ACTION_CLASS, 0, 
+	      _e_border_menu_cb_kill, "kill");
+	      */
 	mi = e_menu_item_new(m);
 	e_menu_item_label_set(mi, _("Kill"));
 	e_menu_item_callback_set(mi, _e_border_menu_cb_kill, bd);
@@ -5743,124 +5950,59 @@
 				  (char *)e_theme_edje_file_get("base/theme/borders",
 								"widgets/border/default/kill"),
 				  "widgets/border/default/kill");
-	mi = e_menu_item_new(m);
-	e_menu_item_separator_set(mi, 1);
      }
-   
-   if (!bd->lock_user_shade)
+   _e_border_menu_item_new(bd, m, "", MI_SEPARATOR_CLASS, 0, NULL, "");
+   if (!bd->lock_user_iconify)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Shaded"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, (bd->shaded ? 1 : 0));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_shade, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/shade"),
-				  "widgets/border/default/shade");
+	_e_border_menu_item_new(bd, m, _("Iconify"), MI_ACTION_CLASS, 0, 
+	      _e_border_menu_cb_iconify, "minimize");
      }
-
    if (!bd->lock_user_maximize)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Maximized"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/maximize"),
-				  "widgets/border/default/maximize");
+	_e_border_menu_item_new(bd, m, _("Maximized"), MI_CHECK_CLASS, (bd->maximized ? 1 : 0), 
+	      _e_border_menu_cb_maximize, "maximize");
+     }
+   if (!bd->lock_user_shade)
+     {
+	_e_border_menu_item_new(bd, m, _("Shaded"), MI_CHECK_CLASS, (bd->shaded ? 1 : 0), 
+	      _e_border_menu_cb_shade, "shade");
      }
-   
    if (!bd->lock_user_sticky)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Sticky"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, (bd->sticky ? 1 : 0));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_stick, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/stick"),
-				  "widgets/border/default/stick");
+	_e_border_menu_item_new(bd, m, _("Sticky"), MI_CHECK_CLASS, (bd->sticky ? 1 : 0), 
+	      _e_border_menu_cb_stick, "stick");
      }
-  
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Stacking"));
-   e_menu_item_submenu_set(mi, bd->border_stacking_menu);
-   e_menu_item_icon_edje_set(mi,
-			     (char *)e_theme_edje_file_get("base/theme/borders",
-							   "widgets/border/default/stacking"),
-			     "widgets/border/default/stacking");
-   
    if (!bd->lock_border)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Borderless"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, !strcmp("borderless", bd->client.border.name));
-	e_menu_item_callback_set(mi, _e_border_menu_cb_borderless, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/borderless"),
-				  "widgets/border/default/borderless");
+	_e_border_menu_item_new(bd, m, _("Borderless"), MI_CHECK_CLASS, (!strcmp("borderless", bd->client.border.name)), 
+	      _e_border_menu_cb_borderless, "borderless");
      }
-
    if (!bd->lock_user_fullscreen)
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Fullscreen"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, bd->fullscreen);
-	e_menu_item_callback_set(mi, _e_border_menu_cb_fullscreen, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/fullscreen"),
-				  "widgets/border/default/fullscreen");
+	_e_border_menu_item_new(bd, m, _("Fullscreen"), MI_CHECK_CLASS, (bd->fullscreen ? 1: 0), 
+		 _e_border_menu_cb_fullscreen, "fullscreen");
      }
-
    if ((bd->client.icccm.accepts_focus) &&
-       (!bd->client.netwm.state.skip_taskbar))
+	                    (!bd->client.netwm.state.skip_taskbar))
      {
-	mi = e_menu_item_new(m);
-	e_menu_item_label_set(mi, _("Skip Window List"));
-	e_menu_item_check_set(mi, 1);
-	e_menu_item_toggle_set(mi, bd->user_skip_winlist);
-	e_menu_item_callback_set(mi, _e_border_menu_cb_skip_winlist, bd);
-	e_menu_item_icon_edje_set(mi,
-				  (char *)e_theme_edje_file_get("base/theme/borders",
-								"widgets/border/default/skip_winlist"),
-				  "widgets/border/default/skip_winlist");
+	_e_border_menu_item_new(bd, m, _("Skip Window List"), MI_CHECK_CLASS, (bd->user_skip_winlist ? 1: 0), 
+		 _e_border_menu_cb_skip_winlist, "skip_winlist");
      }
-   
-   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, _("Locks"));
-   e_menu_item_submenu_set(mi, bd->border_locks_menu);
-   e_menu_item_icon_edje_set(mi,
-			     (char *)e_theme_edje_file_get("base/theme/borders",
-							   "widgets/border/default/locks"),
-			     "widgets/border/default/locks");
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Remember"));
-   e_menu_item_submenu_set(mi, bd->border_remember_menu);
-   e_menu_item_icon_edje_set(mi,
-			     (char *)e_theme_edje_file_get("base/theme/borders",
-							   "widgets/border/default/remember"),
-			     "widgets/border/default/remember");
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-
+   if (!bd->lock_user_stacking)
+     {
+	   _e_border_submenu_item_new(m, bd->border_stacking_menu, _("Stacking"),  "stacking");
+     }
+   _e_border_menu_item_new(bd, m, "", MI_SEPARATOR_CLASS, 0, NULL, "");
+   _e_border_submenu_item_new(m, bd->border_locks_menu, _("Locks"),  "locks");
+   _e_border_submenu_item_new(m, bd->border_remember_menu, _("Remember"),  "remember");
+   _e_border_menu_item_new(bd, m, "", MI_SEPARATOR_CLASS, 0, NULL, "");
+   /* FIXME: ACTION_CLASS below (pre_callback is the pb) ? */
    mi = e_menu_item_new(m);
    e_menu_item_label_set(mi, _("Send To"));
    e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_sendto_pre, bd);
-   e_menu_item_icon_edje_set(mi,
-			     (char *)e_theme_edje_file_get("base/theme/borders",
-							   "widgets/border/default/sendto"),
-			     "widgets/border/default/sendto");
+   e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/borders",
+			    "widgets/border/default/sendto"),
+			    "widgets/border/default/sendto");
 
    if (ecore_file_app_installed("e_util_eapp_edit"))
      {
@@ -5915,7 +6057,6 @@
      e_menu_activate_mouse(m, bd->zone, x, y, 1, 1,
 			   E_MENU_POP_DIRECTION_DOWN);
 }
-
 static void
 _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi)
 {
@@ -5958,7 +6099,7 @@
    if (!bd->lock_user_maximize)
      {
 	if (bd->maximized) e_border_unmaximize(bd);
-	else e_border_maximize(bd, e_config->maximize_policy);
+	else e_border_maximize(bd, MAXIMIZE, e_config->maximize_policy);
      }
 }
 
--- e/src/bin/e_border.h	2005-07-13 11:25:28.000000000 +0200
+++ e.fun/src/bin/e_border.h	2005-07-15 01:08:00.000000000 +0200
@@ -304,7 +304,7 @@
    unsigned int    lock_user_shade : 1; /*DONE*/
    unsigned int    lock_client_shade : 1; /*DONE*/
    unsigned int    lock_user_maximize : 1; /*DONE*/
-   unsigned int    lock_client_mazimize : 1; /*DONE*/
+   unsigned int    lock_client_maximize : 1; /*DONE*/
    unsigned int    lock_user_fullscreen : 1; /*DONE*/
    unsigned int    lock_client_fullscreen : 1; /*DONE*/
    unsigned int    lock_border : 1; /*DONE*/
@@ -336,7 +336,13 @@
    Evas_List *stick_desks;
    E_Menu *border_menu;
    E_Menu *border_locks_menu;
+   E_Menu *border_user_locks_menu;
+   E_Menu *border_application_locks_menu;
+   E_Menu *border_common_locks_menu;
    E_Menu *border_remember_menu;
+   E_Menu *border_remember_what_menu;
+   E_Menu *border_remember_for_menu;
+   E_Menu *border_remember_match_menu;
    E_Menu *border_stacking_menu;
    Evas_List *pending_move_resize;
    
@@ -478,7 +484,7 @@
 EAPI void      e_border_focus_set(E_Border *bd, int focus, int set);
 EAPI void      e_border_shade(E_Border *bd, E_Direction dir);
 EAPI void      e_border_unshade(E_Border *bd, E_Direction dir);
-EAPI void      e_border_maximize(E_Border *bd, E_Maximize max);
+EAPI void      e_border_maximize(E_Border *bd, unsigned int mode, E_Maximize max);
 EAPI void      e_border_unmaximize(E_Border *bd);
 EAPI void      e_border_fullscreen(E_Border *bd);
 EAPI void      e_border_unfullscreen(E_Border *bd);
--- e/src/bin/e_config.c	2005-07-13 11:25:28.000000000 +0200
+++ e.fun/src/bin/e_config.c	2005-07-14 13:08:26.000000000 +0200
@@ -148,7 +148,7 @@
    E_CONFIG_VAL(D, T, prop.lock_user_shade, UCHAR);
    E_CONFIG_VAL(D, T, prop.lock_client_shade, UCHAR);
    E_CONFIG_VAL(D, T, prop.lock_user_maximize, UCHAR);
-   E_CONFIG_VAL(D, T, prop.lock_client_mazimize, UCHAR);
+   E_CONFIG_VAL(D, T, prop.lock_client_maximize, UCHAR);
    E_CONFIG_VAL(D, T, prop.lock_user_fullscreen, UCHAR);
    E_CONFIG_VAL(D, T, prop.lock_client_fullscreen, UCHAR);
    E_CONFIG_VAL(D, T, prop.lock_border, UCHAR);
--- e/src/bin/e_hints.c	2005-07-11 09:59:48.000000000 +0200
+++ e.fun/src/bin/e_hints.c	2005-07-15 01:11:15.000000000 +0200
@@ -400,7 +400,7 @@
    if ((bd->client.netwm.state.maximized_v) && (bd->client.netwm.state.maximized_h))
      {
 	e_hints_window_saved_size_get(bd, &bd->saved.x, &bd->saved.y, &bd->saved.w, &bd->saved.h);
-	e_border_maximize(bd, e_config->maximize_policy);
+	e_border_maximize(bd, 0, e_config->maximize_policy);
      }
    if (bd->client.netwm.state.fullscreen)
      e_border_fullscreen(bd);
@@ -574,7 +574,7 @@
 	     bd->changed = 1;
 	     if ((bd->client.netwm.state.maximized_v)
 		 && (bd->client.netwm.state.maximized_h))
-	       e_border_maximize(bd, e_config->maximize_policy);
+	       e_border_maximize(bd, 0, e_config->maximize_policy);
 	     else if ((!bd->client.netwm.state.maximized_v)
 		      && (!bd->client.netwm.state.maximized_h))
 	       e_border_unmaximize(bd);
@@ -609,7 +609,7 @@
 	     bd->changed = 1;
 	     if ((bd->client.netwm.state.maximized_v)
 		 && (bd->client.netwm.state.maximized_h))
-	       e_border_maximize(bd, e_config->maximize_policy);
+	       e_border_maximize(bd, 0, e_config->maximize_policy);
 	     else if ((!bd->client.netwm.state.maximized_v)
 		      && (!bd->client.netwm.state.maximized_h))
 	       e_border_unmaximize(bd);
--- e/src/bin/e_remember.c	2005-07-10 14:42:47.000000000 +0200
+++ e.fun/src/bin/e_remember.c	2005-07-14 09:18:37.000000000 +0200
@@ -189,7 +189,7 @@
    rem->prop.lock_user_shade = bd->lock_user_shade;
    rem->prop.lock_client_shade = bd->lock_client_shade;
    rem->prop.lock_user_maximize = bd->lock_user_maximize;
-   rem->prop.lock_client_mazimize = bd->lock_client_mazimize;
+   rem->prop.lock_client_maximize = bd->lock_client_maximize;
    rem->prop.lock_user_fullscreen = bd->lock_user_fullscreen;
    rem->prop.lock_client_fullscreen = bd->lock_client_fullscreen;
    rem->prop.lock_border = bd->lock_border;
--- e/src/bin/e_remember.h	2005-07-10 14:42:48.000000000 +0200
+++ e.fun/src/bin/e_remember.h	2005-07-14 09:18:37.000000000 +0200
@@ -62,7 +62,7 @@
       unsigned char lock_user_shade; 
       unsigned char lock_client_shade; 
       unsigned char lock_user_maximize; 
-      unsigned char lock_client_mazimize; 
+      unsigned char lock_client_maximize; 
       unsigned char lock_user_fullscreen; 
       unsigned char lock_client_fullscreen; 
       unsigned char lock_border; 
--- e/data/themes/images/Makefile.in	2005-07-13 11:29:46.000000000 +0200
+++ e.fun/data/themes/images/Makefile.in	2005-07-18 16:09:43.000000000 +0200
@@ -191,22 +191,28 @@
 e17_border7.png \
 e17_button.png \
 e17_button2.png \
+e17_button_detail_application.png \
 e17_button_detail_borderless.png \
 e17_button_detail_close.png \
+e17_button_detail_desktop.png \
 e17_button_detail_fullscreen.png \
 e17_button_detail_kill.png \
+e17_button_detail_life.png \
 e17_button_detail_locks.png \
 e17_button_detail_maximize.png \
 e17_button_detail_minimize.png \
+e17_button_detail_position.png \
 e17_button_detail_remember.png \
 e17_button_detail_sendto.png \
 e17_button_detail_shade.png \
+e17_button_detail_size.png \
 e17_button_detail_skip_winlist.png \
 e17_button_detail_stack_below.png \
 e17_button_detail_stacking.png \
 e17_button_detail_stack_normal.png \
 e17_button_detail_stack_on_top.png \
 e17_button_detail_stick.png \
+e17_button_detail_user.png \
 e17_menu_arrow.png \
 e17_menu_bg.png \
 e17_menu_bg_border.png \

Attachment: e17_button_details.tgz
Description: application/compressed-tar

Reply via email to