New simple and more logical window menu.

SVN revision: 57985
This commit is contained in:
Miculcy Brian 2011-03-22 12:24:32 +00:00
parent 37db64a949
commit dcdd6acb24
1 changed files with 322 additions and 313 deletions

View File

@ -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*/