enlightenment/src/bin/e_int_border_menu.c

1434 lines
49 KiB
C

#include "e.h"
static void _e_border_cb_border_menu_end(void *data, E_Menu *m);
static void _e_border_menu_cb_locks(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_remember(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_borderless(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_border(void *data, E_Menu *m, E_Menu_Item *mi);
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);
static void _e_border_menu_cb_move(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_resize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_pre(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_left(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_right(void *data, E_Menu *m, E_Menu_Item *mi);
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_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_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);
static void _e_border_menu_cb_on_top(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_normal(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_below(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi);
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_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);
static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_iconpref_e(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static Eina_List *menu_hooks = NULL;
EAPI E_Border_Menu_Hook *
e_int_border_menu_hook_add(E_Border_Menu_Hook_Cb cb, const void *data)
{
E_Border_Menu_Hook *h;
if (!cb) return NULL;
h = E_NEW(E_Border_Menu_Hook, 1);
if (!h) return NULL;
h->cb = cb;
h->data = (void *)data;
menu_hooks = eina_list_append(menu_hooks, h);
return h;
}
EAPI void
e_int_border_menu_hook_del(E_Border_Menu_Hook *hook)
{
E_Border_Menu_Hook *h;
Eina_List *l;
if (!hook) return;
EINA_LIST_FOREACH(menu_hooks, l, h)
if (h == hook)
{
menu_hooks = eina_list_remove_list(menu_hooks, l);
free(h);
return;
}
}
EAPI void
e_int_border_menu_hooks_clear(void)
{
E_Border_Menu_Hook *h;
EINA_LIST_FREE(menu_hooks, h)
free(h);
}
EAPI void
e_int_border_menu_create(E_Border *bd)
{
E_Menu *m;
E_Menu_Item *mi;
Eina_List *l;
E_Border_Menu_Hook *h;
char buf[128];
Eina_Bool borderless;
if (bd->border_menu) return;
m = e_menu_new();
e_menu_category_set(m, "border");
e_menu_category_data_set("border", bd);
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->internal)
{
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);
}
borderless = bd->borderless || (!bd->client.border.name) || (!e_util_strcmp("borderless", bd->client.border.name));
mi = e_menu_item_new(m);
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/window"),
"e/widgets/border/default/window");
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
if ((!bd->sticky) && ((bd->zone->desk_x_count > 1) || (bd->zone->desk_y_count > 1)))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Move to"));
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");
}
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Always on Top"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0));
if (bd->layer == 150)
e_menu_item_callback_set(mi, _e_border_menu_cb_normal, bd);
else
e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, 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 (!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,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/stick"),
"e/widgets/border/default/stick");
}
if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) &&
((!bd->client.border.name) || (!borderless)))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Shade"));
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,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/shade"),
"e/widgets/border/default/shade");
}
if ((!bd->fullscreen) && (!bd->lock_border) && (!bd->shading) && (!bd->shaded))
{
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, borderless);
e_menu_item_callback_set(mi, _e_border_menu_cb_borderless, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/borderless"),
"e/widgets/border/default/borderless");
}
if (!bd->lock_close)
{
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, _("Close"));
e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd);
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/close"),
"e/widgets/border/default/close");
}
EINA_LIST_FOREACH(menu_hooks, l, h)
h->cb(h->data, bd);
}
EAPI void
e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp)
{
e_int_border_menu_create(bd);
if (key)
e_menu_activate_key(bd->border_menu, bd->zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
else
e_menu_activate_mouse(bd->border_menu, bd->zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN, timestamp);
}
EAPI void
e_int_border_menu_del(E_Border *bd)
{
if (bd->border_menu)
{
e_object_del(E_OBJECT(bd->border_menu));
bd->border_menu = NULL;
}
}
static void
_e_border_cb_border_menu_end(void *data __UNUSED__, E_Menu *m)
{
E_Border *bd;
bd = e_object_data_get(E_OBJECT(m));
if (bd)
{
/* If the border exists, delete all associated menus */
e_int_border_menu_del(bd);
}
else
{
/* Just delete this menu */
e_object_del(E_OBJECT(m));
}
}
static void
_e_border_menu_cb_locks(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (bd->border_locks_dialog)
{
e_border_desk_set(bd->border_locks_dialog->dia->win->border, bd->desk);
e_win_raise(bd->border_locks_dialog->dia->win);
e_border_focus_set(bd->border_locks_dialog->dia->win->border, 1, 1);
return;
}
e_int_border_locks(bd);
}
static void
_e_border_menu_cb_remember(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (bd->border_remember_dialog)
{
e_border_desk_set(bd->border_remember_dialog->dia->win->border, bd->desk);
e_win_raise(bd->border_remember_dialog->dia->win);
e_border_focus_set(bd->border_remember_dialog->dia->win->border, 1, 1);
return;
}
e_int_border_remember(bd);
}
static void
_e_border_menu_cb_border(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
char buf[256];
bd = data;
if (bd->border_border_dialog)
{
e_border_desk_set(bd->border_border_dialog->dia->win->border, bd->desk);
e_win_raise(bd->border_border_dialog->dia->win);
e_border_focus_set(bd->border_border_dialog->dia->win->border, 1, 1);
return;
}
snprintf(buf, sizeof(buf), "%p", bd);
e_configure_registry_call("internal/borders_border", bd->zone->container, buf);
}
static void
_e_border_menu_cb_borderless(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Border *bd = data;
BD_CHANGED(bd);
bd->client.border.changed = 1;
bd->borderless = mi->toggle;
}
static void
_e_border_menu_cb_close(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_close) e_border_act_close_begin(bd);
}
static void
_e_border_menu_cb_iconify(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_iconify)
{
if (bd->iconic)
e_border_uniconify(bd);
else
e_border_iconify(bd);
}
}
static void
_e_border_menu_cb_kill(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Action *a;
E_Border *bd;
bd = data;
if ((bd->lock_close) || (bd->internal)) return;
a = e_action_find("window_kill");
if ((a) && (a->func.go)) a->func.go(E_OBJECT(bd), NULL);
}
static void
_e_border_menu_cb_move(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_location)
e_border_act_move_keyboard(bd);
}
static void
_e_border_menu_cb_resize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_size)
e_border_act_resize_keyboard(bd);
}
static void
_e_border_menu_cb_maximize_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);
e_object_unref(E_OBJECT(subm));
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");
}
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 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, _("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 Left"));
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_LEFT);
e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_left, 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 Right"));
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_RIGHT);
e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_right, 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
_e_border_menu_cb_maximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_BOTH);
}
static void
_e_border_menu_cb_maximize_vertically(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_HORIZONTAL))
e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_VERTICAL);
}
}
static void
_e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_VERTICAL))
e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_HORIZONTAL);
}
}
static void
_e_border_menu_cb_maximize_left(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION))
e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_LEFT);
}
}
static void
_e_border_menu_cb_maximize_right(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION))
e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_RIGHT);
}
}
static void
_e_border_menu_cb_unmaximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
}
static void
_e_border_menu_cb_shade(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_shade)
{
if (bd->shaded)
e_border_unshade(bd, bd->shade.dir);
else
e_border_shade(bd, E_DIRECTION_UP);
}
}
static void
_e_border_menu_cb_resistance(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
bd->offer_resistance = !bd->offer_resistance;
}
static void
_e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
e_desktop_border_edit(m->zone->container, bd);
}
static void
_e_border_menu_cb_application_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);
e_object_unref(E_OBJECT(subm));
if (bd->desktop)
{
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_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, _("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_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Menu *subm;
E_Menu_Item *submi;
E_Border *bd;
Eina_Bool resize = EINA_FALSE;
if (!(bd = data)) return;
subm = e_menu_new();
e_object_data_set(E_OBJECT(subm), bd);
e_menu_item_submenu_set(mi, subm);
e_object_unref(E_OBJECT(subm));
/* internal dialog which is resizable */
if (bd->internal && (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DIALOG))
resize = (bd->client.icccm.max_w != bd->client.icccm.min_w);
if (resize || (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_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || 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_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || 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");
}
submi = e_menu_item_new(subm);
e_menu_item_separator_set(submi, 1);
if ((!bd->lock_user_stacking) && (!bd->fullscreen))
{
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_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");
if (!bd->lock_border)
{
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_separator_set(submi, 1);
submi = e_menu_item_new(subm);
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/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");
submi = e_menu_item_new(subm);
e_menu_item_separator_set(submi, 1);
if ((!bd->internal) && (!bd->lock_close))
{
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Kill"));
e_menu_item_callback_set(submi, _e_border_menu_cb_kill, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/kill"),
"e/widgets/border/default/kill");
}
submi = e_menu_item_new(subm);
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");
}
static void
_e_border_menu_cb_prop(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
e_int_border_prop(bd);
}
static void
_e_border_menu_cb_stick(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_sticky)
{
if (bd->sticky)
e_border_unstick(bd);
else
e_border_stick(bd);
}
}
static void
_e_border_menu_cb_on_top(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (bd->layer != E_LAYER_ABOVE)
e_border_layer_set(bd, E_LAYER_ABOVE);
}
static void
_e_border_menu_cb_below(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (bd->layer != E_LAYER_BELOW)
e_border_layer_set(bd, E_LAYER_BELOW);
}
static void
_e_border_menu_cb_normal(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (bd->layer != E_LAYER_NORMAL)
e_border_layer_set(bd, E_LAYER_NORMAL);
}
static void
_e_border_menu_cb_fullscreen(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Border *bd;
int toggle;
if (!(bd = data)) return;
if (!bd->lock_user_fullscreen)
{
toggle = e_menu_item_toggle_get(mi);
if (toggle)
e_border_fullscreen(bd, e_config->fullscreen_policy);
else
e_border_unfullscreen(bd);
}
}
static void
_e_border_menu_cb_skip_winlist(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Border *bd;
if (!(bd = data)) return;
if (((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) &&
(!bd->client.netwm.state.skip_taskbar))
bd->user_skip_winlist = e_menu_item_toggle_get(mi);
else
bd->user_skip_winlist = 0;
bd->changed = 1;
e_remember_update(bd);
}
static void
_e_border_menu_cb_skip_pager(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Border *bd;
if (!(bd = data)) return;
if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
bd->client.netwm.state.skip_pager = e_menu_item_toggle_get(mi);
else
bd->client.netwm.state.skip_pager = 0;
bd->changed = 1;
e_remember_update(bd);
}
static void
_e_border_menu_cb_skip_taskbar(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Border *bd;
if (!(bd = data)) return;
if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
bd->client.netwm.state.skip_taskbar = e_menu_item_toggle_get(mi);
else
bd->client.netwm.state.skip_taskbar = 0;
bd->changed = 1;
e_remember_update(bd);
}
#ifndef DESKMIRROR_TEST
static void
_e_border_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Desk *desk = NULL;
Evas_Object *o = NULL;
const char *bgfile = NULL;
int tw = 0, th = 0;
desk = data;
E_OBJECT_CHECK(desk);
tw = 50;
th = (tw * desk->zone->h) / desk->zone->w;
bgfile = e_bg_file_get(desk->zone->container->num, desk->zone->num,
desk->x, desk->y);
o = e_thumb_icon_add(m->evas);
e_thumb_icon_file_set(o, bgfile, "e/desktop/background");
eina_stringshare_del(bgfile);
e_thumb_icon_size_set(o, tw, th);
e_thumb_icon_begin(o);
mi->icon_object = o;
}
#endif
static void
_e_border_menu_cb_sendto_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Menu *subm;
E_Menu_Item *submi;
E_Border *bd;
E_Desk *desk_cur;
E_Zone *zone;
Eina_List *l = NULL;
char buf[128];
int zones, i;
bd = data;
desk_cur = e_desk_current_get(bd->zone);
zones = eina_list_count(bd->zone->container->zones);
subm = e_menu_new();
e_object_data_set(E_OBJECT(subm), bd);
e_menu_item_submenu_set(mi, subm);
e_object_unref(E_OBJECT(subm));
EINA_LIST_FOREACH(bd->zone->container->zones, l, zone)
{
if (zones > 1)
{
snprintf(buf, sizeof(buf), _("Screen %d"), zone->num);
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, buf);
e_menu_item_disabled_set(submi, EINA_TRUE);
}
for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
{
E_Desk *desk;
#ifdef DESKMIRROR_TEST
int tw = 50, th;
#endif
desk = zone->desks[i];
#ifdef DESKMIRROR_TEST
th = (tw * desk->zone->h) / desk->zone->w;
#endif
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, desk->name);
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
#ifdef DESKMIRROR_TEST
e_menu_item_icon_file_set(submi, "sup");
#endif
if ((bd->zone == zone) && (desk_cur == desk))
e_menu_item_toggle_set(submi, 1);
else
e_menu_item_callback_set(submi, _e_border_menu_cb_sendto, desk);
#ifdef DESKMIRROR_TEST
submi->icon_object = e_deskmirror_add(desk);
edje_extern_object_min_size_set(submi->icon_object, tw, th);
evas_object_show(submi->icon_object);
#else
e_menu_item_realize_callback_set(submi, _e_border_menu_cb_sendto_icon_pre,
desk);
#endif
}
}
}
static void
_e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
E_Desk *desk;
E_Border *bd;
desk = data;
bd = e_object_data_get(E_OBJECT(m));
if ((bd) && (desk))
{
e_border_zone_set(bd, desk->zone);
e_border_desk_set(bd, desk);
}
}
static void
_e_border_menu_cb_pin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = e_object_data_get(E_OBJECT(m));
if (bd) e_border_pinned_set(bd, 1);
}
static void
_e_border_menu_cb_unpin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = e_object_data_get(E_OBJECT(m));
if (bd) e_border_pinned_set(bd, 0);
}
static void
_e_border_menu_cb_stacking_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);
e_object_unref(E_OBJECT(subm));
/* Only allow to change layer for windows in "normal" layers */
e_menu_category_set(subm, "border/stacking");
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_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->layer == 150 ? 1 : 0));
e_menu_item_callback_set(submi, _e_border_menu_cb_on_top, 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, _("Normal"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->layer == 100 ? 1 : 0));
e_menu_item_callback_set(submi, _e_border_menu_cb_normal, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/stack_normal"),
"e/widgets/border/default/stack_normal");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Always Below"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->layer == 50 ? 1 : 0));
e_menu_item_callback_set(submi, _e_border_menu_cb_below, 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);
// 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
_e_border_menu_cb_raise(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if ((!bd->lock_user_stacking) && (!bd->internal) &&
((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
{
e_border_raise(bd);
}
}
static void
_e_border_menu_cb_lower(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if ((!bd->lock_user_stacking) && (!bd->internal) &&
((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
{
e_border_lower(bd);
}
}
static void
_e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd;
Evas_Object *o;
unsigned char prev_icon_pref;
bd = data;
E_OBJECT_CHECK(bd);
prev_icon_pref = bd->icon_preference;
bd->icon_preference = E_ICON_PREF_E_DEFAULT;
o = e_border_icon_add(bd, m->evas);
bd->icon_preference = prev_icon_pref;
mi->icon_object = o;
}
static void
_e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd;
Evas_Object *o;
bd = data;
E_OBJECT_CHECK(bd);
if (bd->client.netwm.icons)
{
o = e_icon_add(m->evas);
e_icon_data_set(o, bd->client.netwm.icons[0].data,
bd->client.netwm.icons[0].width,
bd->client.netwm.icons[0].height);
e_icon_alpha_set(o, 1);
mi->icon_object = o;
}
}
static void
_e_border_menu_cb_border_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);
e_object_unref(E_OBJECT(subm));
if (e_configure_registry_exists("internal/borders_border"))
{
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Select Border Style"));
e_menu_item_callback_set(submi, _e_border_menu_cb_border, 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_separator_set(submi, 1);
}
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Use Enlightenment Default Icon Preference"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_E_DEFAULT ? 1 : 0));
e_menu_item_realize_callback_set(submi, _e_border_menu_cb_default_icon, bd);
e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_e, bd);
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Use Application Provided Icon"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_NETWM ? 1 : 0));
e_menu_item_realize_callback_set(submi, _e_border_menu_cb_netwm_icon, bd);
e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_netwm, bd);
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Use User Defined Icon"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 2);
e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_USER ? 1 : 0));
e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi);
e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_user, bd);
e_menu_item_separator_set(submi, 1);
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Offer Resistance"));
e_menu_item_check_set(submi, 1);
e_menu_item_toggle_set(submi, (bd->offer_resistance ? 1 : 0));
e_menu_item_callback_set(submi, _e_border_menu_cb_resistance, 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");
}
static void
_e_border_menu_cb_iconpref_e(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
if (!(bd = data)) return;
bd->icon_preference = E_ICON_PREF_E_DEFAULT;
bd->changes.icon = 1;
bd->changed = 1;
}
static void
_e_border_menu_cb_iconpref_user(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
if (!(bd = data)) return;
bd->icon_preference = E_ICON_PREF_USER;
bd->changes.icon = 1;
bd->changed = 1;
}
static void
_e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
if (!(bd = data)) return;
bd->icon_preference = E_ICON_PREF_NETWM;
bd->changes.icon = 1;
bd->changed = 1;
}
static void
_e_border_menu_cb_skip_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);
e_object_unref(E_OBJECT(subm));
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Window List"));
e_menu_item_check_set(submi, 1);
e_menu_item_toggle_set(submi, bd->user_skip_winlist);
e_menu_item_callback_set(submi, _e_border_menu_cb_skip_winlist, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/skip_winlist"),
"e/widgets/border/default/skip_winlist");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Pager"));
e_menu_item_check_set(submi, 1);
e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_pager);
e_menu_item_callback_set(submi, _e_border_menu_cb_skip_pager, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/skip_pager"),
"e/widgets/border/default/skip_pager");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Taskbar"));
e_menu_item_check_set(submi, 1);
e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_taskbar);
e_menu_item_callback_set(submi, _e_border_menu_cb_skip_taskbar, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/skip_taskbar"),
"e/widgets/border/default/skip_taskbar");
}
static void
_e_border_menu_cb_fav_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
Efreet_Menu *menu;
char buf[PATH_MAX];
if (!(bd = data)) return;
e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
menu = efreet_menu_parse(buf);
if (!menu)
menu = efreet_menu_new("Favorites");
if (!menu) return;
efreet_menu_desktop_insert(menu, bd->desktop, -1);
efreet_menu_save(menu, buf);
efreet_menu_free(menu);
}
static void
_e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
E_Zone *zone;
if (!(bd = data)) return;
zone = e_util_zone_current_get(e_manager_current_get());
if (!zone) return;
e_configure_registry_call("keyboard_and_mouse/key_bindings",
zone->container, bd->desktop->exec);
}
static void
_e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Menu *sm;
E_Border *bd;
Eina_List *dirs;
Eina_List *l;
char buf[PATH_MAX], *file;
size_t len;
if (!(bd = data)) return;
len = e_user_dir_concat_static(buf, "applications/bar");
if (len + 1 >= sizeof(buf)) return;
dirs = ecore_file_ls(buf);
if (!dirs) return;
buf[len] = '/';
len++;
sm = e_menu_new();
EINA_LIST_FOREACH(dirs, l, file)
{
E_Menu_Item *smi;
if (file[0] == '.') continue;
eina_strlcpy(buf + len, file, sizeof(buf) - len);
if (ecore_file_is_dir(buf))
{
smi = e_menu_item_new(sm);
e_menu_item_label_set(smi, file);
e_menu_item_callback_set(smi, _e_border_menu_cb_ibar_add, file);
}
}
e_object_data_set(E_OBJECT(sm), bd);
e_menu_item_submenu_set(mi, sm);
e_object_unref(E_OBJECT(sm));
}
static void
_e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
E_Order *od;
E_Border *bd;
char buf[PATH_MAX];
bd = e_object_data_get(E_OBJECT(m));
if ((!bd) || (!bd->desktop)) return;
e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order",
(const char *)data);
od = e_order_new(buf);
if (!od) return;
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*/