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"));