From dcdd6acb24bf264fbda60b4fecdedb8022498ade Mon Sep 17 00:00:00 2001 From: Miculcy Brian Date: Tue, 22 Mar 2011 12:24:32 +0000 Subject: [PATCH] New simple and more logical window menu. SVN revision: 57985 --- src/bin/e_int_border_menu.c | 635 ++++++++++++++++++------------------ 1 file changed, 322 insertions(+), 313 deletions(-) diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index e9b568a81..db033318f 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -17,8 +17,9 @@ static void _e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi) static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_resistance(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_border_menu_cb_application_add_pre(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_border_menu_cb_more_pre(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_application_pre(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi); +static void _e_border_menu_cb_placement_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi); static void _e_border_menu_cb_prop(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_stacking_pre(void *data, E_Menu *m, E_Menu_Item *mi); @@ -36,7 +37,6 @@ static void _e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_raise(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_lower(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_border_menu_cb_state_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_skip_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m, E_Menu_Item *mi); @@ -54,7 +54,7 @@ e_int_border_menu_create(E_Border *bd) { E_Menu *m; E_Menu_Item *mi; - Eina_Bool separator; + char buf[128]; if (bd->border_menu) return; @@ -67,178 +67,41 @@ e_int_border_menu_create(E_Border *bd) if (!bd->internal) { - if (bd->desktop) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Edit Icon")); - e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, bd); - e_util_desktop_menu_item_icon_add(bd->desktop, 16, mi); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Add Application...")); - e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_application_add_pre, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/application_add"), - "e/widgets/border/default/application_add"); - } - else if (bd->client.icccm.class) - { - /* icons with no class useless to borders */ - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Create Icon")); - e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, bd); - } - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - if (!bd->sticky) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Send to Desktop")); - e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_sendto_pre, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/sendto"), - "e/widgets/border/default/sendto"); - } - - if ((bd->client.netwm.state.stacking != E_STACKING_BELOW) || - (!bd->user_skip_winlist) || (!bd->borderless)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Pin to Desktop")); - e_menu_item_callback_set(mi, _e_border_menu_cb_pin, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stick"), - "e/widgets/border/default/stick"); - } - if ((bd->client.netwm.state.stacking == E_STACKING_BELOW) && - (bd->user_skip_winlist) && (bd->borderless)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Unpin from Desktop")); - e_menu_item_callback_set(mi, _e_border_menu_cb_unpin, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stick"), - "e/widgets/border/default/stick"); + if (bd->client.icccm.class) + snprintf(buf, sizeof(buf), "%s", bd->client.icccm.class); + else + snprintf(buf, sizeof(buf), _("Application")); + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, buf); + e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_application_pre, bd); + if (bd->desktop) + e_util_desktop_menu_item_icon_add(bd->desktop, 16, mi); } mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("More...")); - e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_more_pre, bd); + e_menu_item_label_set(mi, _("Window")); + e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_window_pre, bd); e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/basic"), - "e/widgets/border/default/basic"); - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - separator = 1; - - if ((!bd->lock_user_location) && (!bd->maximized || e_config->allow_manip)) - { - separator = 0; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Move")); - e_menu_item_callback_set(mi, _e_border_menu_cb_move, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/move_icon"), - "e/widgets/border/default/move_icon"); - } - - if ((!bd->lock_user_size) && (!bd->maximized || e_config->allow_manip)) - { - separator = 0; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Resize")); - e_menu_item_callback_set(mi, _e_border_menu_cb_resize, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/resize_icon"), - "e/widgets/border/default/resize_icon"); - } - - if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) && - (bd->client.icccm.min_h == bd->client.icccm.max_h)) || - (bd->lock_user_maximize))) - { - if ((!bd->lock_user_maximize) && (!bd->shaded) && (!bd->fullscreen) && - ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || - (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))) - { - separator = 0; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Maximize")); - e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_maximize_pre, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); - } - } - - if (!bd->internal) - { - if ((!bd->lock_user_iconify) && (!bd->fullscreen) && - ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || - (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))) - { - separator = 0; - 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, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/minimize"), - "e/widgets/border/default/minimize"); - } - /* Only allow to change layer for windows in "normal" layers */ - if ((!bd->lock_user_stacking) && - ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150))) - { - separator = 0; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Lower")); - e_menu_item_callback_set(mi, _e_border_menu_cb_lower, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stack_below"), - "e/widgets/border/default/stack_below"); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Raise")); - e_menu_item_callback_set(mi, _e_border_menu_cb_raise, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stack_on_top"), - "e/widgets/border/default/stack_on_top"); - } - } - - if (!separator) - { - 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, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/kill"), - "e/widgets/border/default/kill"); - } + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/window"), + "e/widgets/border/default/window"); if (!bd->lock_close) { + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + + if (!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, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/kill"), + "e/widgets/border/default/kill"); + } + 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); @@ -393,49 +256,65 @@ _e_border_menu_cb_maximize_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi e_object_data_set(E_OBJECT(subm), bd); e_menu_item_submenu_set(mi, subm); - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Maximize")); - e_menu_item_radio_set(submi, 1); - e_menu_item_radio_group_set(submi, 3); - e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH); - e_menu_item_callback_set(submi, _e_border_menu_cb_maximize, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); + if ((!bd->lock_user_fullscreen) && (!bd->shaded)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Fullscreen")); + e_menu_item_check_set(submi, 1); + e_menu_item_toggle_set(submi, bd->fullscreen); + e_menu_item_callback_set(submi, _e_border_menu_cb_fullscreen, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/fullscreen"), + "e/widgets/border/default/fullscreen"); + } - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Maximize vertically")); - e_menu_item_radio_set(submi, 1); - e_menu_item_radio_group_set(submi, 3); - e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL); - e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_vertically, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); + if (!bd->fullscreen) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Maximize")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 3); + e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH); + e_menu_item_callback_set(submi, _e_border_menu_cb_maximize, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Maximize horizontally")); - e_menu_item_radio_set(submi, 1); - e_menu_item_radio_group_set(submi, 3); - e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL); - e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_horizontally, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Maximize vertically")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 3); + e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL); + e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_vertically, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Unmaximize")); - e_menu_item_radio_set(submi, 1); - e_menu_item_radio_group_set(submi, 3); - e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE); - e_menu_item_callback_set(submi, _e_border_menu_cb_unmaximize, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/maximize"), - "e/widgets/border/default/maximize"); + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Maximize horizontally")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 3); + e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL); + e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_horizontally, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Unmaximize")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 3); + e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE); + e_menu_item_callback_set(submi, _e_border_menu_cb_unmaximize, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + } } static void @@ -522,7 +401,7 @@ _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__) } static void -_e_border_menu_cb_application_add_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) +_e_border_menu_cb_application_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) { E_Menu *subm; E_Menu_Item *submi; @@ -534,28 +413,46 @@ _e_border_menu_cb_application_add_pre(void *data, E_Menu *m __UNUSED__, E_Menu_I e_object_data_set(E_OBJECT(subm), bd); e_menu_item_submenu_set(mi, subm); - if (e_configure_registry_exists("keyboard_and_mouse/key_bindings")) + if (bd->desktop) { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Keyboard Shortcut")); - e_menu_item_callback_set(submi, _e_border_menu_cb_kbdshrtct_add, bd); - e_util_menu_item_theme_icon_set(submi, "preferences-desktop-keyboard"); + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Edit Icon")); + e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd); + e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi); + } + else if (bd->client.icccm.class) + { + /* icons with no class useless to borders */ + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Create Icon")); + e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd); } submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("To Favorites Menu")); + e_menu_item_separator_set(submi, 1); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Add to Favorites Menu")); e_menu_item_callback_set(submi, _e_border_menu_cb_fav_add, bd); e_util_menu_item_theme_icon_set(submi, "user-bookmarks"); submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("To Launcher")); + e_menu_item_label_set(submi, _("Add to IBar")); e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_ibar_add_pre, bd); e_util_menu_item_theme_icon_set(submi, "preferences-applications-ibar"); + + if (e_configure_registry_exists("keyboard_and_mouse/key_bindings")) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Create Keyboard Shortcut")); + e_menu_item_callback_set(submi, _e_border_menu_cb_kbdshrtct_add, bd); + e_util_menu_item_theme_icon_set(submi, "preferences-desktop-keyboard"); + } } static void -_e_border_menu_cb_more_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) +_e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) { E_Menu *subm; E_Menu_Item *submi; @@ -567,70 +464,183 @@ _e_border_menu_cb_more_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) e_object_data_set(E_OBJECT(subm), bd); e_menu_item_submenu_set(mi, subm); - if (!bd->lock_border) + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Placement")); + e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_placement_pre, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/placement"), + "e/widgets/border/default/placement"); + + if ((!bd->lock_user_stacking) && (!bd->fullscreen)) { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Border")); - e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_border_pre, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/borderless"), - "e/widgets/border/default/borderless"); + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Stacking")); + e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_stacking_pre, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stacking"), + "e/widgets/border/default/stacking"); } + submi = e_menu_item_new(subm); + e_menu_item_separator_set(submi, 1); + submi = e_menu_item_new(subm); e_menu_item_label_set(submi, _("Skip")); e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_skip_pre, bd); e_menu_item_icon_edje_set(submi, e_theme_edje_file_get("base/theme/borders", "e/widgets/border/default/skip"), - "e/widgets/border/default/skip"); + "e/widgets/border/default/skip"); - if ((!bd->lock_user_stacking) && (!bd->fullscreen)) + if (!bd->lock_border) { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Stacking")); - e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_stacking_pre, bd); + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Border")); + e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_border_pre, bd); e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stacking"), - "e/widgets/border/default/stacking"); + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/borderless"), + "e/widgets/border/default/borderless"); } submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("State")); - e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_state_pre, bd); + e_menu_item_label_set(submi, _("Locks")); + e_menu_item_callback_set(submi, _e_border_menu_cb_locks, bd); e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stick"), - "e/widgets/border/default/stick"); - - submi = e_menu_item_new(subm); - e_menu_item_separator_set(submi, 1); + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/locks"), + "e/widgets/border/default/locks"); submi = e_menu_item_new(subm); e_menu_item_label_set(submi, _("Remember")); e_menu_item_callback_set(submi, _e_border_menu_cb_remember, bd); e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/remember"), - "e/widgets/border/default/remember"); + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/remember"), + "e/widgets/border/default/remember"); submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Window Locks")); - e_menu_item_callback_set(submi, _e_border_menu_cb_locks, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/locks"), - "e/widgets/border/default/locks"); + e_menu_item_separator_set(submi, 1); submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Window Properties")); + e_menu_item_label_set(submi, _("ICCCM/NetWM")); e_menu_item_callback_set(submi, _e_border_menu_cb_prop, bd); e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/properties"), - "e/widgets/border/default/properties"); + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/properties"), + "e/widgets/border/default/properties"); +} + +static void +_e_border_menu_cb_placement_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) +{ + E_Menu *subm; + E_Menu_Item *submi; + E_Border *bd; + + if (!(bd = data)) return; + + subm = e_menu_new(); + e_object_data_set(E_OBJECT(subm), bd); + e_menu_item_submenu_set(mi, subm); + + if (!bd->sticky) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Move to")); + e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_sendto_pre, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/sendto"), + "e/widgets/border/default/sendto"); + } + + if (!bd->lock_user_sticky) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Sticky")); + e_menu_item_check_set(submi, 1); + e_menu_item_toggle_set(submi, (bd->sticky ? 1 : 0)); + e_menu_item_callback_set(submi, _e_border_menu_cb_stick, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stick"), + "e/widgets/border/default/stick"); + } + + submi = e_menu_item_new(subm); + e_menu_item_separator_set(submi, 1); + + if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || + (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN)) + { + if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) && + (bd->client.icccm.min_h == bd->client.icccm.max_h)) || + (bd->lock_user_maximize))) + { + if ((!bd->lock_user_maximize) && (!bd->shaded)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Maximize")); + e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_maximize_pre, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/maximize"), + "e/widgets/border/default/maximize"); + } + } + + if ((!bd->lock_user_iconify) && (!bd->fullscreen)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Iconify")); + e_menu_item_callback_set(submi, _e_border_menu_cb_iconify, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/minimize"), + "e/widgets/border/default/minimize"); + } + } + + if ((!bd->lock_user_location) && (!bd->fullscreen) && (!bd->maximized || e_config->allow_manip)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Move")); + e_menu_item_callback_set(submi, _e_border_menu_cb_move, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/move_icon"), + "e/widgets/border/default/move_icon"); + } + + if (((!bd->lock_user_size) && (!bd->fullscreen) && (!bd->maximized || e_config->allow_manip)) && + ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || + (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Resize")); + e_menu_item_callback_set(submi, _e_border_menu_cb_resize, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/resize_icon"), + "e/widgets/border/default/resize_icon"); + } + + if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) && + ((!bd->client.border.name) || (strcmp("borderless", bd->client.border.name)))) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Shade")); + e_menu_item_check_set(submi, 1); + e_menu_item_toggle_set(submi, (bd->shaded ? 1 : 0)); + e_menu_item_callback_set(submi, _e_border_menu_cb_shade, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/shade"), + "e/widgets/border/default/shade"); + } } static void @@ -798,6 +808,7 @@ _e_border_menu_cb_sendto_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) e_object_data_set(E_OBJECT(subm), bd); e_menu_item_submenu_set(mi, subm); + // FIXME: allow to move to different zones for (i = 0; i < bd->zone->desk_x_count * bd->zone->desk_y_count; i++) { E_Desk *desk; @@ -860,7 +871,7 @@ _e_border_menu_cb_stacking_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi e_menu_category_data_set("border/stacking",bd); submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Always On Top")); + e_menu_item_label_set(submi, _("Always on Top")); e_menu_item_radio_set(submi, 1); e_menu_item_radio_group_set(submi, 2); e_menu_item_toggle_set(submi, (bd->layer == 150 ? 1 : 0)); @@ -891,6 +902,60 @@ _e_border_menu_cb_stacking_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi e_theme_edje_file_get("base/theme/borders", "e/widgets/border/default/stack_below"), "e/widgets/border/default/stack_below"); + + submi = e_menu_item_new(subm); + e_menu_item_separator_set(submi, 1); + + // Only allow to change layer for windows in "normal" layers + if ((!bd->lock_user_stacking) && + ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150))) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Raise")); + e_menu_item_callback_set(submi, _e_border_menu_cb_raise, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stack_on_top"), + "e/widgets/border/default/stack_on_top"); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Lower")); + e_menu_item_callback_set(submi, _e_border_menu_cb_lower, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stack_below"), + "e/widgets/border/default/stack_below"); + } + + submi = e_menu_item_new(subm); + e_menu_item_separator_set(submi, 1); + + if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || + (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN)) + { + if ((bd->client.netwm.state.stacking != E_STACKING_BELOW) || + (!bd->user_skip_winlist) || (!bd->borderless)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Pin to Desktop")); + e_menu_item_callback_set(submi, _e_border_menu_cb_pin, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stick"), + "e/widgets/border/default/stick"); + } + if ((bd->client.netwm.state.stacking == E_STACKING_BELOW) && + (bd->user_skip_winlist) && (bd->borderless)) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Unpin from Desktop")); + e_menu_item_callback_set(submi, _e_border_menu_cb_unpin, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stick"), + "e/widgets/border/default/stick"); + } + } } static void @@ -1056,63 +1121,6 @@ _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m __UNUSED__, E_Menu_Item * bd->changed = 1; } -static void -_e_border_menu_cb_state_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) -{ - E_Border *bd; - E_Menu *subm; - E_Menu_Item *submi; - - if (!(bd = data)) return; - - subm = e_menu_new(); - e_object_data_set(E_OBJECT(subm), bd); - e_menu_item_submenu_set(mi, subm); - - if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) && - ((!bd->client.border.name) || (strcmp("borderless", bd->client.border.name)))) - { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Shaded")); - e_menu_item_check_set(submi, 1); - e_menu_item_toggle_set(submi, (bd->shaded ? 1 : 0)); - e_menu_item_callback_set(submi, _e_border_menu_cb_shade, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/shade"), - "e/widgets/border/default/shade"); - } - - if (!bd->lock_user_sticky) - { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Sticky")); - e_menu_item_check_set(submi, 1); - e_menu_item_toggle_set(submi, (bd->sticky ? 1 : 0)); - e_menu_item_callback_set(submi, _e_border_menu_cb_stick, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/stick"), - "e/widgets/border/default/stick"); - } - - if ((!bd->lock_user_fullscreen) && (!bd->shaded) && - ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) || - (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN)) - ) - { - submi = e_menu_item_new(subm); - e_menu_item_label_set(submi, _("Fullscreen")); - e_menu_item_check_set(submi, 1); - e_menu_item_toggle_set(submi, bd->fullscreen); - e_menu_item_callback_set(submi, _e_border_menu_cb_fullscreen, bd); - e_menu_item_icon_edje_set(submi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/fullscreen"), - "e/widgets/border/default/fullscreen"); - } -} - static void _e_border_menu_cb_skip_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) { @@ -1243,3 +1251,4 @@ _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__) e_order_append(od, bd->desktop); e_object_del(E_OBJECT(od)); } +/*vim:ts=8 sw=3 sts=3 expandtab cino=>5n-3f0^-2{2(0W1st0*/