Hi,

little macros to make life simplier with border menu. Tell me if it's
bad until I continue.

--
Sébastien HOUZE
[EMAIL PROTECTED]
--- e17/apps/e/src/bin/e_border.c	2005-07-13 17:02:08.687967617 +0200
+++ e17/apps/e.fun/src/bin/e_border.c	2005-07-13 17:00:22.285166118 +0200
@@ -5668,134 +5668,83 @@
    NEW_REMEMBER_MI(_("Run this porgram on login"), apply, E_REMEMBER_APPLY_RUN, _e_border_menu_cb_remember_apply_run);
  */ 
 
+#define NEW_STACKING_MI(txt, var, val, cb, edj) \
+   mi = e_menu_item_new(m); \
+   e_menu_item_label_set(mi, txt); \
+   e_menu_item_radio_set(mi, 1); \
+   e_menu_item_radio_group_set(mi, 2); \
+   e_menu_item_toggle_set(mi, (bd->var == val ? 1 : 0)); \
+   e_menu_item_callback_set(mi, cb, bd); \
+   e_menu_item_icon_edje_set(mi, \
+			    (char *)e_theme_edje_file_get("base/theme/borders", \
+			    "widgets/border/default/"edj), \
+			    "widgets/border/default/"edj);
    m = e_menu_new();
    bd->border_stacking_menu = m;
    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");
-     }
+   NEW_STACKING_MI(_("Always On Top"), layer, 150, _e_border_menu_cb_on_top, "stack_on_top");
+   NEW_STACKING_MI(_("Normal"), layer, 100, _e_border_menu_cb_normal, "stack_normal");
+   NEW_STACKING_MI(_("Always Below"), layer, 50, _e_border_menu_cb_below, "stack_below");
+     }
+
+#define NEW_MI_ACTION(txt, var, edj) \
+  mi = e_menu_item_new(m); \
+  e_menu_item_label_set(mi, txt); \
+  e_menu_item_callback_set(mi, _e_border_menu_cb_##var, bd); \
+  e_menu_item_icon_edje_set(mi, \
+			    (char *)e_theme_edje_file_get("base/theme/borders", \
+			    "widgets/border/default/"edj), \
+			    "widgets/border/default/"edj);
+#define NEW_MI_SUBMENU(txt, var, edj) \
+   mi = e_menu_item_new(m); \
+   e_menu_item_label_set(mi, txt); \
+   e_menu_item_submenu_set(mi, bd->border_##var##_menu); \
+   e_menu_item_icon_edje_set(mi, \
+				(char *)e_theme_edje_file_get("base/theme/borders", \
+				"widgets/border/default/"edj), \
+				"widgets/border/default/"edj);
+#define NEW_MI_SEPARATOR() \
+  mi = e_menu_item_new(m); \
+  e_menu_item_separator_set(mi, 1);
+   
+#define NEW_MI_CHECK(txt, var, cbvar, edj) \
+  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 ? 1 : 0)); \
+  e_menu_item_callback_set(mi, _e_border_menu_cb_##cbvar, bd); \
+  e_menu_item_icon_edje_set(mi, \
+			    (char *)e_theme_edje_file_get("base/theme/borders", \
+			    "widgets/border/default/"edj), \
+			    "widgets/border/default/"edj);
+
+#define MI_COND(cond, action) \
+   if(cond) \
+     { \
+	action; \
+     } \
    
    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");
-     }
-
-   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))
-     {
-	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);
-	e_menu_item_icon_edje_set(mi, 
-				  (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)
-     {
-	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");
-     }
+   MI_COND(!bd->lock_close, NEW_MI_ACTION(_("Close"), close, "close"));
+   MI_COND((!bd->lock_close) && (!bd->internal), NEW_MI_ACTION(_("Kill"), kill, "kill"));
+   NEW_MI_SEPARATOR();
+   MI_COND(!bd->lock_user_iconify, NEW_MI_ACTION(_("Iconify"), iconify, "minimize"));
+   MI_COND((!bd->lock_close) && (!bd->internal), NEW_MI_SEPARATOR());
+   MI_COND(!bd->lock_user_shade, NEW_MI_CHECK(_("Shaded"), shaded, shade, "shade"));
+   MI_COND(!bd->lock_user_maximize, NEW_MI_CHECK(_("Maximized"), maximized, maximize, "maximize"));
+   MI_COND(!bd->lock_user_sticky, NEW_MI_CHECK(_("Sticky"), sticky, stick, "stick"));
 
-   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");
-     }
-   
-   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");
-     }
-  
-   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");
+   NEW_MI_SUBMENU(_("Stacking"), stacking, "stacking");
    
    if (!bd->lock_border)
      {
+	/* NOTE: must bd be changed to be compliant to this macro regarding borderless ? */
+	//NEW_MI_CHECK(_("Borderless"), borderless, _e_border_menu_cb_borderless, "borderless");
 	mi = e_menu_item_new(m);
 	e_menu_item_label_set(mi, _("Borderless"));
 	e_menu_item_check_set(mi, 1);
@@ -5807,52 +5756,17 @@
 				  "widgets/border/default/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");
-     }
+   MI_COND(!bd->lock_user_fullscreen, NEW_MI_CHECK(_("Fullscreen"), fullscreen, fullscreen, "fullscreen"));
+   MI_COND(((bd->client.icccm.accepts_focus) &&
+	        (!bd->client.netwm.state.skip_taskbar)), NEW_MI_CHECK(_("Skip Window List"), 
+		user_skip_winlist, skip_winlist, "skip_winlist"));
 
-   if ((bd->client.icccm.accepts_focus) &&
-       (!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");
-     }
-   
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
+   NEW_MI_SEPARATOR();
 
-   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);
+   NEW_MI_SUBMENU(_("Locks"), locks, "locks");
+   NEW_MI_SUBMENU(_("Remember"), remember, "remember");
+
+   NEW_MI_SEPARATOR();
 
    mi = e_menu_item_new(m);
    e_menu_item_label_set(mi, _("Send To"));

Reply via email to