3 static void _e_border_cb_border_menu_end(void *data, E_Menu *m);
4 static void _e_border_menu_cb_locks(void *data, E_Menu *m, E_Menu_Item *mi);
5 static void _e_border_menu_cb_remember(void *data, E_Menu *m, E_Menu_Item *mi);
6 static void _e_border_menu_cb_border(void *data, E_Menu *m, E_Menu_Item *mi);
7 static void _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi);
8 static void _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi);
9 static void _e_border_menu_cb_kill(void *data, E_Menu *m, E_Menu_Item *mi);
10 static void _e_border_menu_cb_move(void *data, E_Menu *m, E_Menu_Item *mi);
11 static void _e_border_menu_cb_resize(void *data, E_Menu *m, E_Menu_Item *mi);
12 static void _e_border_menu_cb_maximize_pre(void *data, E_Menu *m, E_Menu_Item *mi);
13 static void _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi);
14 static void _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m, E_Menu_Item *mi);
15 static void _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m, E_Menu_Item *mi);
16 static void _e_border_menu_cb_maximize_left(void *data, E_Menu *m, E_Menu_Item *mi);
17 static void _e_border_menu_cb_maximize_right(void *data, E_Menu *m, E_Menu_Item *mi);
18 static void _e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi);
19 static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi);
20 static void _e_border_menu_cb_resistance(void *data, E_Menu *m, E_Menu_Item *mi);
21 static void _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi);
22 static void _e_border_menu_cb_application_pre(void *data, E_Menu *m, E_Menu_Item *mi);
23 static void _e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi);
24 static void _e_border_menu_cb_prop(void *data, E_Menu *m, E_Menu_Item *mi);
25 static void _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi);
26 static void _e_border_menu_cb_stacking_pre(void *data, E_Menu *m, E_Menu_Item *mi);
27 static void _e_border_menu_cb_on_top(void *data, E_Menu *m, E_Menu_Item *mi);
28 static void _e_border_menu_cb_normal(void *data, E_Menu *m, E_Menu_Item *mi);
29 static void _e_border_menu_cb_below(void *data, E_Menu *m, E_Menu_Item *mi);
30 static void _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi);
31 static void _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi);
32 static void _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi);
33 static void _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi);
34 static void _e_border_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi);
35 static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi);
36 static void _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi);
37 static void _e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi);
38 static void _e_border_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi);
39 static void _e_border_menu_cb_raise(void *data, E_Menu *m, E_Menu_Item *mi);
40 static void _e_border_menu_cb_lower(void *data, E_Menu *m, E_Menu_Item *mi);
41 static void _e_border_menu_cb_skip_pre(void *data, E_Menu *m, E_Menu_Item *mi);
42 static void _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi);
43 static void _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m, E_Menu_Item *mi);
44 static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi);
45 static void _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi);
46 static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi);
47 static void _e_border_menu_cb_iconpref_e(void *data, E_Menu *m, E_Menu_Item *mi);
48 static void _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item *mi);
49 static void _e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi);
50 static void _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi);
51 static void _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi);
53 static Eina_List *menu_hooks = NULL;
55 EAPI E_Border_Menu_Hook *
56 e_int_border_menu_hook_add(E_Border_Menu_Hook_Cb cb, const void *data)
58 E_Border_Menu_Hook *h;
61 h = E_NEW(E_Border_Menu_Hook, 1);
65 h->data = (void*)data;
66 menu_hooks = eina_list_append(menu_hooks, h);
71 e_int_border_menu_hook_del(E_Border_Menu_Hook *hook)
73 E_Border_Menu_Hook *h;
78 EINA_LIST_FOREACH(menu_hooks, l, h)
81 menu_hooks = eina_list_remove_list(menu_hooks, l);
88 e_int_border_menu_hooks_clear(void)
90 E_Border_Menu_Hook *h;
91 EINA_LIST_FREE(menu_hooks, h)
96 e_int_border_menu_create(E_Border *bd)
101 E_Border_Menu_Hook *h;
104 if (bd->border_menu) return;
107 e_menu_category_set(m, "border");
108 e_menu_category_data_set("border", bd);
109 e_object_data_set(E_OBJECT(m), bd);
111 e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL);
115 if (bd->client.icccm.class)
116 snprintf(buf, sizeof(buf), "%s", bd->client.icccm.class);
118 snprintf(buf, sizeof(buf), _("Application"));
119 mi = e_menu_item_new(m);
120 e_menu_item_label_set(mi, buf);
121 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_application_pre, bd);
123 e_util_desktop_menu_item_icon_add(bd->desktop, 16, mi);
126 mi = e_menu_item_new(m);
127 e_menu_item_label_set(mi, _("Window"));
128 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_window_pre, bd);
129 e_menu_item_icon_edje_set(mi,
130 e_theme_edje_file_get("base/theme/borders",
131 "e/widgets/border/default/window"),
132 "e/widgets/border/default/window");
134 mi = e_menu_item_new(m);
135 e_menu_item_separator_set(mi, 1);
137 if ((!bd->sticky) && ((bd->zone->desk_x_count > 1) || (bd->zone->desk_y_count > 1)))
139 mi = e_menu_item_new(m);
140 e_menu_item_label_set(mi, _("Move to"));
141 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_sendto_pre, bd);
142 e_menu_item_icon_edje_set(mi,
143 e_theme_edje_file_get("base/theme/borders",
144 "e/widgets/border/default/sendto"),
145 "e/widgets/border/default/sendto");
148 mi = e_menu_item_new(m);
149 e_menu_item_label_set(mi, _("Always on Top"));
150 e_menu_item_check_set(mi, 1);
151 e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0));
152 if (bd->layer == 150)
153 e_menu_item_callback_set(mi, _e_border_menu_cb_normal, bd);
155 e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, bd);
156 e_menu_item_icon_edje_set(mi,
157 e_theme_edje_file_get("base/theme/borders",
158 "e/widgets/border/default/stack_on_top"),
159 "e/widgets/border/default/stack_on_top");
161 if (!bd->lock_user_sticky)
163 mi = e_menu_item_new(m);
164 e_menu_item_label_set(mi, _("Sticky"));
165 e_menu_item_check_set(mi, 1);
166 e_menu_item_toggle_set(mi, (bd->sticky ? 1 : 0));
167 e_menu_item_callback_set(mi, _e_border_menu_cb_stick, bd);
168 e_menu_item_icon_edje_set(mi,
169 e_theme_edje_file_get("base/theme/borders",
170 "e/widgets/border/default/stick"),
171 "e/widgets/border/default/stick");
174 if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) &&
175 ((!bd->client.border.name) || (strcmp("borderless", bd->client.border.name))))
177 mi = e_menu_item_new(m);
178 e_menu_item_label_set(mi, _("Shade"));
179 e_menu_item_check_set(mi, 1);
180 e_menu_item_toggle_set(mi, (bd->shaded ? 1 : 0));
181 e_menu_item_callback_set(mi, _e_border_menu_cb_shade, bd);
182 e_menu_item_icon_edje_set(mi,
183 e_theme_edje_file_get("base/theme/borders",
184 "e/widgets/border/default/shade"),
185 "e/widgets/border/default/shade");
190 mi = e_menu_item_new(m);
191 e_menu_item_separator_set(mi, 1);
193 mi = e_menu_item_new(m);
194 e_menu_item_label_set(mi, _("Close"));
195 e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd);
196 e_menu_item_icon_edje_set(mi,
197 e_theme_edje_file_get("base/theme/borders",
198 "e/widgets/border/default/close"),
199 "e/widgets/border/default/close");
201 EINA_LIST_FOREACH(menu_hooks, l, h)
206 e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp)
208 e_int_border_menu_create(bd);
210 e_menu_activate_key(bd->border_menu, bd->zone, x, y, 1, 1,
211 E_MENU_POP_DIRECTION_DOWN);
213 e_menu_activate_mouse(bd->border_menu, bd->zone, x, y, 1, 1,
214 E_MENU_POP_DIRECTION_DOWN, timestamp);
218 e_int_border_menu_del(E_Border *bd)
222 e_object_del(E_OBJECT(bd->border_menu));
223 bd->border_menu = NULL;
228 _e_border_cb_border_menu_end(void *data __UNUSED__, E_Menu *m)
232 bd = e_object_data_get(E_OBJECT(m));
235 /* If the border exists, delete all associated menus */
236 e_int_border_menu_del(bd);
240 /* Just delete this menu */
241 e_object_del(E_OBJECT(m));
246 _e_border_menu_cb_locks(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
251 if (bd->border_locks_dialog)
253 e_border_desk_set(bd->border_locks_dialog->dia->win->border, bd->desk);
254 e_win_raise(bd->border_locks_dialog->dia->win);
255 e_border_focus_set(bd->border_locks_dialog->dia->win->border, 1, 1);
258 e_int_border_locks(bd);
262 _e_border_menu_cb_remember(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
267 if (bd->border_remember_dialog)
269 e_border_desk_set(bd->border_remember_dialog->dia->win->border, bd->desk);
270 e_win_raise(bd->border_remember_dialog->dia->win);
271 e_border_focus_set(bd->border_remember_dialog->dia->win->border, 1, 1);
274 e_int_border_remember(bd);
278 _e_border_menu_cb_border(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
284 if (bd->border_border_dialog)
286 e_border_desk_set(bd->border_border_dialog->dia->win->border, bd->desk);
287 e_win_raise(bd->border_border_dialog->dia->win);
288 e_border_focus_set(bd->border_border_dialog->dia->win->border, 1, 1);
291 snprintf(buf, sizeof(buf), "%p", bd);
292 e_configure_registry_call("internal/borders_border", bd->zone->container, buf);
296 _e_border_menu_cb_close(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
301 if (!bd->lock_close) e_border_act_close_begin(bd);
305 _e_border_menu_cb_iconify(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
310 if (!bd->lock_user_iconify)
313 e_border_uniconify(bd);
315 e_border_iconify(bd);
320 _e_border_menu_cb_kill(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
326 if ((bd->lock_close) || (bd->internal)) return;
328 a = e_action_find("window_kill");
329 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
333 _e_border_menu_cb_move(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
339 if (!bd->lock_user_location)
340 e_border_act_move_keyboard(bd);
344 _e_border_menu_cb_resize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
350 if (!bd->lock_user_size)
351 e_border_act_resize_keyboard(bd);
355 _e_border_menu_cb_maximize_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
361 if (!(bd = data)) return;
364 e_object_data_set(E_OBJECT(subm), bd);
365 e_menu_item_submenu_set(mi, subm);
366 e_object_unref(E_OBJECT(subm));
368 if ((!bd->lock_user_fullscreen) && (!bd->shaded))
370 submi = e_menu_item_new(subm);
371 e_menu_item_label_set(submi, _("Fullscreen"));
372 e_menu_item_check_set(submi, 1);
373 e_menu_item_toggle_set(submi, bd->fullscreen);
374 e_menu_item_callback_set(submi, _e_border_menu_cb_fullscreen, bd);
375 e_menu_item_icon_edje_set(submi,
376 e_theme_edje_file_get("base/theme/borders",
377 "e/widgets/border/default/fullscreen"),
378 "e/widgets/border/default/fullscreen");
383 submi = e_menu_item_new(subm);
384 e_menu_item_label_set(submi, _("Maximize"));
385 e_menu_item_radio_set(submi, 1);
386 e_menu_item_radio_group_set(submi, 3);
387 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH);
388 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize, bd);
389 e_menu_item_icon_edje_set(submi,
390 e_theme_edje_file_get("base/theme/borders",
391 "e/widgets/border/default/maximize"),
392 "e/widgets/border/default/maximize");
394 submi = e_menu_item_new(subm);
395 e_menu_item_label_set(submi, _("Maximize vertically"));
396 e_menu_item_radio_set(submi, 1);
397 e_menu_item_radio_group_set(submi, 3);
398 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL);
399 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_vertically, bd);
400 e_menu_item_icon_edje_set(submi,
401 e_theme_edje_file_get("base/theme/borders",
402 "e/widgets/border/default/maximize"),
403 "e/widgets/border/default/maximize");
405 submi = e_menu_item_new(subm);
406 e_menu_item_label_set(submi, _("Maximize horizontally"));
407 e_menu_item_radio_set(submi, 1);
408 e_menu_item_radio_group_set(submi, 3);
409 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL);
410 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_horizontally, bd);
411 e_menu_item_icon_edje_set(submi,
412 e_theme_edje_file_get("base/theme/borders",
413 "e/widgets/border/default/maximize"),
414 "e/widgets/border/default/maximize");
416 submi = e_menu_item_new(subm);
417 e_menu_item_label_set(submi, _("Maximize left"));
418 e_menu_item_radio_set(submi, 1);
419 e_menu_item_radio_group_set(submi, 3);
420 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_LEFT);
421 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_left, bd);
422 e_menu_item_icon_edje_set(submi,
423 e_theme_edje_file_get("base/theme/borders",
424 "e/widgets/border/default/maximize"),
425 "e/widgets/border/default/maximize");
427 submi = e_menu_item_new(subm);
428 e_menu_item_label_set(submi, _("Maximize right"));
429 e_menu_item_radio_set(submi, 1);
430 e_menu_item_radio_group_set(submi, 3);
431 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_RIGHT);
432 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_right, bd);
433 e_menu_item_icon_edje_set(submi,
434 e_theme_edje_file_get("base/theme/borders",
435 "e/widgets/border/default/maximize"),
436 "e/widgets/border/default/maximize");
438 submi = e_menu_item_new(subm);
439 e_menu_item_label_set(submi, _("Unmaximize"));
440 e_menu_item_radio_set(submi, 1);
441 e_menu_item_radio_group_set(submi, 3);
442 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE);
443 e_menu_item_callback_set(submi, _e_border_menu_cb_unmaximize, bd);
444 e_menu_item_icon_edje_set(submi,
445 e_theme_edje_file_get("base/theme/borders",
446 "e/widgets/border/default/maximize"),
447 "e/widgets/border/default/maximize");
452 _e_border_menu_cb_maximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
457 if (!bd->lock_user_maximize)
458 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
463 _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
468 if (!bd->lock_user_maximize)
470 if ((bd->maximized & E_MAXIMIZE_HORIZONTAL))
471 e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
472 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
473 E_MAXIMIZE_VERTICAL);
478 _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
483 if (!bd->lock_user_maximize)
485 if ((bd->maximized & E_MAXIMIZE_VERTICAL))
486 e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
487 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
488 E_MAXIMIZE_HORIZONTAL);
493 _e_border_menu_cb_maximize_left(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
498 if (!bd->lock_user_maximize)
500 if ((bd->maximized & E_MAXIMIZE_DIRECTION))
501 e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
502 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
508 _e_border_menu_cb_maximize_right(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
513 if (!bd->lock_user_maximize)
515 if ((bd->maximized & E_MAXIMIZE_DIRECTION))
516 e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
517 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
523 _e_border_menu_cb_unmaximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
528 e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
532 _e_border_menu_cb_shade(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
537 if (!bd->lock_user_shade)
540 e_border_unshade(bd, E_DIRECTION_UP);
542 e_border_shade(bd, E_DIRECTION_UP);
547 _e_border_menu_cb_resistance(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
552 bd->offer_resistance = !bd->offer_resistance;
556 _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
561 e_desktop_border_edit(m->zone->container, bd);
565 _e_border_menu_cb_application_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
571 if (!(bd = data)) return;
574 e_object_data_set(E_OBJECT(subm), bd);
575 e_menu_item_submenu_set(mi, subm);
576 e_object_unref(E_OBJECT(subm));
580 submi = e_menu_item_new(subm);
581 e_menu_item_label_set(submi, _("Edit Icon"));
582 e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd);
583 e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi);
585 else if (bd->client.icccm.class)
587 /* icons with no class useless to borders */
588 submi = e_menu_item_new(subm);
589 e_menu_item_label_set(submi, _("Create Icon"));
590 e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd);
593 submi = e_menu_item_new(subm);
594 e_menu_item_separator_set(submi, 1);
596 submi = e_menu_item_new(subm);
597 e_menu_item_label_set(submi, _("Add to Favorites Menu"));
598 e_menu_item_callback_set(submi, _e_border_menu_cb_fav_add, bd);
599 e_util_menu_item_theme_icon_set(submi, "user-bookmarks");
601 submi = e_menu_item_new(subm);
602 e_menu_item_label_set(submi, _("Add to IBar"));
603 e_menu_item_submenu_pre_callback_set(submi,
604 _e_border_menu_cb_ibar_add_pre, bd);
605 e_util_menu_item_theme_icon_set(submi, "preferences-applications-ibar");
607 if (e_configure_registry_exists("keyboard_and_mouse/key_bindings"))
609 submi = e_menu_item_new(subm);
610 e_menu_item_label_set(submi, _("Create Keyboard Shortcut"));
611 e_menu_item_callback_set(submi, _e_border_menu_cb_kbdshrtct_add, bd);
612 e_util_menu_item_theme_icon_set(submi, "preferences-desktop-keyboard");
617 _e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
623 if (!(bd = data)) return;
626 e_object_data_set(E_OBJECT(subm), bd);
627 e_menu_item_submenu_set(mi, subm);
628 e_object_unref(E_OBJECT(subm));
630 if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
631 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))
633 if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) &&
634 (bd->client.icccm.min_h == bd->client.icccm.max_h)) ||
635 (bd->lock_user_maximize)))
637 if ((!bd->lock_user_maximize) && (!bd->shaded))
639 submi = e_menu_item_new(subm);
640 e_menu_item_label_set(submi, _("Maximize"));
641 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_maximize_pre, bd);
642 e_menu_item_icon_edje_set(submi,
643 e_theme_edje_file_get("base/theme/borders",
644 "e/widgets/border/default/maximize"),
645 "e/widgets/border/default/maximize");
649 if ((!bd->lock_user_iconify) && (!bd->fullscreen))
651 submi = e_menu_item_new(subm);
652 e_menu_item_label_set(submi, _("Iconify"));
653 e_menu_item_callback_set(submi, _e_border_menu_cb_iconify, bd);
654 e_menu_item_icon_edje_set(submi,
655 e_theme_edje_file_get("base/theme/borders",
656 "e/widgets/border/default/minimize"),
657 "e/widgets/border/default/minimize");
661 if ((!bd->lock_user_location) && (!bd->fullscreen) &&
662 (((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || e_config->allow_manip))
664 submi = e_menu_item_new(subm);
665 e_menu_item_label_set(submi, _("Move"));
666 e_menu_item_callback_set(submi, _e_border_menu_cb_move, bd);
667 e_menu_item_icon_edje_set(submi,
668 e_theme_edje_file_get("base/theme/borders",
669 "e/widgets/border/default/move_icon"),
670 "e/widgets/border/default/move_icon");
673 if (((!bd->lock_user_size) && (!bd->fullscreen) &&
674 (((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || e_config->allow_manip)) &&
675 ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
676 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN)))
678 submi = e_menu_item_new(subm);
679 e_menu_item_label_set(submi, _("Resize"));
680 e_menu_item_callback_set(submi, _e_border_menu_cb_resize, bd);
681 e_menu_item_icon_edje_set(submi,
682 e_theme_edje_file_get("base/theme/borders",
683 "e/widgets/border/default/resize_icon"),
684 "e/widgets/border/default/resize_icon");
687 submi = e_menu_item_new(subm);
688 e_menu_item_separator_set(submi, 1);
690 if ((!bd->lock_user_stacking) && (!bd->fullscreen))
692 submi = e_menu_item_new(subm);
693 e_menu_item_label_set(submi, _("Stacking"));
694 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_stacking_pre, bd);
695 e_menu_item_icon_edje_set(submi,
696 e_theme_edje_file_get("base/theme/borders",
697 "e/widgets/border/default/stacking"),
698 "e/widgets/border/default/stacking");
701 submi = e_menu_item_new(subm);
702 e_menu_item_label_set(submi, _("Skip"));
703 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_skip_pre, bd);
704 e_menu_item_icon_edje_set(submi,
705 e_theme_edje_file_get("base/theme/borders",
706 "e/widgets/border/default/skip"),
707 "e/widgets/border/default/skip");
709 if (!bd->lock_border)
711 submi = e_menu_item_new(subm);
712 e_menu_item_label_set(submi, _("Border"));
713 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_border_pre, bd);
714 e_menu_item_icon_edje_set(submi,
715 e_theme_edje_file_get("base/theme/borders",
716 "e/widgets/border/default/borderless"),
717 "e/widgets/border/default/borderless");
720 submi = e_menu_item_new(subm);
721 e_menu_item_separator_set(submi, 1);
723 submi = e_menu_item_new(subm);
724 e_menu_item_label_set(submi, _("Locks"));
725 e_menu_item_callback_set(submi, _e_border_menu_cb_locks, bd);
726 e_menu_item_icon_edje_set(submi,
727 e_theme_edje_file_get("base/theme/borders",
728 "e/widgets/border/default/locks"),
729 "e/widgets/border/default/locks");
731 submi = e_menu_item_new(subm);
732 e_menu_item_label_set(submi, _("Remember"));
733 e_menu_item_callback_set(submi, _e_border_menu_cb_remember, bd);
734 e_menu_item_icon_edje_set(submi,
735 e_theme_edje_file_get("base/theme/borders",
736 "e/widgets/border/default/remember"),
737 "e/widgets/border/default/remember");
739 submi = e_menu_item_new(subm);
740 e_menu_item_separator_set(submi, 1);
742 if ((!bd->internal) && (!bd->lock_close))
744 submi = e_menu_item_new(subm);
745 e_menu_item_label_set(submi, _("Kill"));
746 e_menu_item_callback_set(submi, _e_border_menu_cb_kill, bd);
747 e_menu_item_icon_edje_set(submi,
748 e_theme_edje_file_get("base/theme/borders",
749 "e/widgets/border/default/kill"),
750 "e/widgets/border/default/kill");
753 submi = e_menu_item_new(subm);
754 e_menu_item_label_set(submi, _("ICCCM/NetWM"));
755 e_menu_item_callback_set(submi, _e_border_menu_cb_prop, bd);
756 e_menu_item_icon_edje_set(submi,
757 e_theme_edje_file_get("base/theme/borders",
758 "e/widgets/border/default/properties"),
759 "e/widgets/border/default/properties");
763 _e_border_menu_cb_prop(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
768 e_int_border_prop(bd);
772 _e_border_menu_cb_stick(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
777 if (!bd->lock_user_sticky)
780 e_border_unstick(bd);
787 _e_border_menu_cb_on_top(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
792 if (bd->layer != 150)
794 e_border_layer_set(bd, 150);
795 e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
800 _e_border_menu_cb_below(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
807 e_border_layer_set(bd, 50);
808 e_hints_window_stacking_set(bd, E_STACKING_BELOW);
813 _e_border_menu_cb_normal(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
818 if (bd->layer != 100)
820 e_border_layer_set(bd, 100);
821 e_hints_window_stacking_set(bd, E_STACKING_NONE);
826 _e_border_menu_cb_fullscreen(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
831 if (!(bd = data)) return;
833 if (!bd->lock_user_fullscreen)
835 toggle = e_menu_item_toggle_get(mi);
837 e_border_fullscreen(bd, e_config->fullscreen_policy);
839 e_border_unfullscreen(bd);
844 _e_border_menu_cb_skip_winlist(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
848 if (!(bd = data)) return;
850 if (((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) &&
851 (!bd->client.netwm.state.skip_taskbar))
852 bd->user_skip_winlist = e_menu_item_toggle_get(mi);
854 bd->user_skip_winlist = 0;
856 e_remember_update(bd);
860 _e_border_menu_cb_skip_pager(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
864 if (!(bd = data)) return;
866 if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
867 bd->client.netwm.state.skip_pager = e_menu_item_toggle_get(mi);
869 bd->client.netwm.state.skip_pager = 0;
871 e_remember_update(bd);
875 _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
879 if (!(bd = data)) return;
881 if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
882 bd->client.netwm.state.skip_taskbar = e_menu_item_toggle_get(mi);
884 bd->client.netwm.state.skip_taskbar = 0;
886 e_remember_update(bd);
890 _e_border_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi)
893 Evas_Object *o = NULL;
894 const char *bgfile = NULL;
898 E_OBJECT_CHECK(desk);
901 th = (tw * desk->zone->h) / desk->zone->w;
902 bgfile = e_bg_file_get(desk->zone->container->num, desk->zone->num,
904 o = e_thumb_icon_add(m->evas);
905 e_thumb_icon_file_set(o, bgfile, "e/desktop/background");
906 e_thumb_icon_size_set(o, tw, th);
907 e_thumb_icon_begin(o);
912 _e_border_menu_cb_sendto_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
924 desk_cur = e_desk_current_get(bd->zone);
925 zones = eina_list_count(bd->zone->container->zones);
928 e_object_data_set(E_OBJECT(subm), bd);
929 e_menu_item_submenu_set(mi, subm);
930 e_object_unref(E_OBJECT(subm));
932 EINA_LIST_FOREACH(bd->zone->container->zones, l, zone)
936 snprintf(buf, sizeof(buf), _("Screen %d"), zone->num);
937 submi = e_menu_item_new(subm);
938 e_menu_item_label_set(submi, buf);
939 e_menu_item_disabled_set(submi, EINA_TRUE);
942 // FIXME: Remove labels and add deskpreview to menu.
943 // Evas_Object *o = e_widget_deskpreview_add(m->evas, 4, 2);
945 for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
949 desk = zone->desks[i];
950 submi = e_menu_item_new(subm);
951 e_menu_item_label_set(submi, desk->name);
952 e_menu_item_radio_set(submi, 1);
953 e_menu_item_radio_group_set(submi, 2);
954 if ((bd->zone == zone) && (desk_cur == desk))
955 e_menu_item_toggle_set(submi, 1);
957 e_menu_item_callback_set(submi, _e_border_menu_cb_sendto, desk);
958 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_sendto_icon_pre,
965 _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
971 bd = e_object_data_get(E_OBJECT(m));
974 e_border_zone_set(bd, desk->zone);
975 e_border_desk_set(bd, desk);
980 _e_border_menu_cb_pin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
984 bd = e_object_data_get(E_OBJECT(m));
985 if (bd) e_border_pinned_set(bd, 1);
989 _e_border_menu_cb_unpin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
993 bd = e_object_data_get(E_OBJECT(m));
994 if (bd) e_border_pinned_set(bd, 0);
998 _e_border_menu_cb_stacking_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1004 if (!(bd = data)) return;
1006 subm = e_menu_new();
1007 e_object_data_set(E_OBJECT(subm), bd);
1008 e_menu_item_submenu_set(mi, subm);
1009 e_object_unref(E_OBJECT(subm));
1011 /* Only allow to change layer for windows in "normal" layers */
1012 e_menu_category_set(subm, "border/stacking");
1013 e_menu_category_data_set("border/stacking", bd);
1015 submi = e_menu_item_new(subm);
1016 e_menu_item_label_set(submi, _("Always on Top"));
1017 e_menu_item_radio_set(submi, 1);
1018 e_menu_item_radio_group_set(submi, 2);
1019 e_menu_item_toggle_set(submi, (bd->layer == 150 ? 1 : 0));
1020 e_menu_item_callback_set(submi, _e_border_menu_cb_on_top, bd);
1021 e_menu_item_icon_edje_set(submi,
1022 e_theme_edje_file_get("base/theme/borders",
1023 "e/widgets/border/default/stack_on_top"),
1024 "e/widgets/border/default/stack_on_top");
1026 submi = e_menu_item_new(subm);
1027 e_menu_item_label_set(submi, _("Normal"));
1028 e_menu_item_radio_set(submi, 1);
1029 e_menu_item_radio_group_set(submi, 2);
1030 e_menu_item_toggle_set(submi, (bd->layer == 100 ? 1 : 0));
1031 e_menu_item_callback_set(submi, _e_border_menu_cb_normal, bd);
1032 e_menu_item_icon_edje_set(submi,
1033 e_theme_edje_file_get("base/theme/borders",
1034 "e/widgets/border/default/stack_normal"),
1035 "e/widgets/border/default/stack_normal");
1037 submi = e_menu_item_new(subm);
1038 e_menu_item_label_set(submi, _("Always Below"));
1039 e_menu_item_radio_set(submi, 1);
1040 e_menu_item_radio_group_set(submi, 2);
1041 e_menu_item_toggle_set(submi, (bd->layer == 50 ? 1 : 0));
1042 e_menu_item_callback_set(submi, _e_border_menu_cb_below, bd);
1043 e_menu_item_icon_edje_set(submi,
1044 e_theme_edje_file_get("base/theme/borders",
1045 "e/widgets/border/default/stack_below"),
1046 "e/widgets/border/default/stack_below");
1048 submi = e_menu_item_new(subm);
1049 e_menu_item_separator_set(submi, 1);
1051 // Only allow to change layer for windows in "normal" layers
1052 if ((!bd->lock_user_stacking) &&
1053 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
1055 submi = e_menu_item_new(subm);
1056 e_menu_item_label_set(submi, _("Raise"));
1057 e_menu_item_callback_set(submi, _e_border_menu_cb_raise, bd);
1058 e_menu_item_icon_edje_set(submi,
1059 e_theme_edje_file_get("base/theme/borders",
1060 "e/widgets/border/default/stack_on_top"),
1061 "e/widgets/border/default/stack_on_top");
1063 submi = e_menu_item_new(subm);
1064 e_menu_item_label_set(submi, _("Lower"));
1065 e_menu_item_callback_set(submi, _e_border_menu_cb_lower, bd);
1066 e_menu_item_icon_edje_set(submi,
1067 e_theme_edje_file_get("base/theme/borders",
1068 "e/widgets/border/default/stack_below"),
1069 "e/widgets/border/default/stack_below");
1072 submi = e_menu_item_new(subm);
1073 e_menu_item_separator_set(submi, 1);
1075 if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
1076 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))
1078 if ((bd->client.netwm.state.stacking != E_STACKING_BELOW) ||
1079 (!bd->user_skip_winlist) || (!bd->borderless))
1081 submi = e_menu_item_new(subm);
1082 e_menu_item_label_set(submi, _("Pin to Desktop"));
1083 e_menu_item_callback_set(submi, _e_border_menu_cb_pin, bd);
1084 e_menu_item_icon_edje_set(submi,
1085 e_theme_edje_file_get("base/theme/borders",
1086 "e/widgets/border/default/stick"),
1087 "e/widgets/border/default/stick");
1089 if ((bd->client.netwm.state.stacking == E_STACKING_BELOW) &&
1090 (bd->user_skip_winlist) && (bd->borderless))
1092 submi = e_menu_item_new(subm);
1093 e_menu_item_label_set(submi, _("Unpin from Desktop"));
1094 e_menu_item_callback_set(submi, _e_border_menu_cb_unpin, bd);
1095 e_menu_item_icon_edje_set(submi,
1096 e_theme_edje_file_get("base/theme/borders",
1097 "e/widgets/border/default/stick"),
1098 "e/widgets/border/default/stick");
1104 _e_border_menu_cb_raise(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1109 if ((!bd->lock_user_stacking) && (!bd->internal) &&
1110 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
1117 _e_border_menu_cb_lower(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1122 if ((!bd->lock_user_stacking) && (!bd->internal) &&
1123 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
1130 _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi)
1134 unsigned char prev_icon_pref;
1139 prev_icon_pref = bd->icon_preference;
1140 bd->icon_preference = E_ICON_PREF_E_DEFAULT;
1141 o = e_border_icon_add(bd, m->evas);
1142 bd->icon_preference = prev_icon_pref;
1143 mi->icon_object = o;
1147 _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi)
1155 if (bd->client.netwm.icons)
1157 o = e_icon_add(m->evas);
1158 e_icon_data_set(o, bd->client.netwm.icons[0].data,
1159 bd->client.netwm.icons[0].width,
1160 bd->client.netwm.icons[0].height);
1161 e_icon_alpha_set(o, 1);
1162 mi->icon_object = o;
1167 _e_border_menu_cb_border_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1173 if (!(bd = data)) return;
1175 subm = e_menu_new();
1176 e_object_data_set(E_OBJECT(subm), bd);
1177 e_menu_item_submenu_set(mi, subm);
1178 e_object_unref(E_OBJECT(subm));
1180 if (e_configure_registry_exists("internal/borders_border"))
1182 submi = e_menu_item_new(subm);
1183 e_menu_item_label_set(submi, _("Select Border Style"));
1184 e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd);
1185 e_menu_item_icon_edje_set(submi,
1186 e_theme_edje_file_get("base/theme/borders",
1187 "e/widgets/border/default/borderless"),
1188 "e/widgets/border/default/borderless");
1190 submi = e_menu_item_new(subm);
1191 e_menu_item_separator_set(submi, 1);
1194 submi = e_menu_item_new(subm);
1195 e_menu_item_label_set(submi, _("Use Enlightenment Default Icon Preference"));
1196 e_menu_item_radio_set(submi, 1);
1197 e_menu_item_radio_group_set(submi, 2);
1198 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_E_DEFAULT ? 1 : 0));
1199 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_default_icon, bd);
1200 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_e, bd);
1202 submi = e_menu_item_new(subm);
1203 e_menu_item_label_set(submi, _("Use Application Provided Icon"));
1204 e_menu_item_radio_set(submi, 1);
1205 e_menu_item_radio_group_set(submi, 2);
1206 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_NETWM ? 1 : 0));
1207 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_netwm_icon, bd);
1208 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_netwm, bd);
1210 submi = e_menu_item_new(subm);
1211 e_menu_item_label_set(submi, _("Use User Defined Icon"));
1212 e_menu_item_radio_set(submi, 1);
1213 e_menu_item_radio_group_set(submi, 2);
1214 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_USER ? 1 : 0));
1215 e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi);
1216 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_user, bd);
1217 e_menu_item_separator_set(submi, 1);
1219 submi = e_menu_item_new(subm);
1220 e_menu_item_label_set(submi, _("Offer Resistance"));
1221 e_menu_item_check_set(submi, 1);
1222 e_menu_item_toggle_set(submi, (bd->offer_resistance ? 1 : 0));
1223 e_menu_item_callback_set(submi, _e_border_menu_cb_resistance, bd);
1224 e_menu_item_icon_edje_set(submi,
1225 e_theme_edje_file_get("base/theme/borders",
1226 "e/widgets/border/default/borderless"),
1227 "e/widgets/border/default/borderless");
1231 _e_border_menu_cb_iconpref_e(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1235 if (!(bd = data)) return;
1237 bd->icon_preference = E_ICON_PREF_E_DEFAULT;
1238 bd->changes.icon = 1;
1243 _e_border_menu_cb_iconpref_user(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1247 if (!(bd = data)) return;
1249 bd->icon_preference = E_ICON_PREF_USER;
1250 bd->changes.icon = 1;
1255 _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1259 if (!(bd = data)) return;
1261 bd->icon_preference = E_ICON_PREF_NETWM;
1262 bd->changes.icon = 1;
1267 _e_border_menu_cb_skip_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1273 if (!(bd = data)) return;
1275 subm = e_menu_new();
1276 e_object_data_set(E_OBJECT(subm), bd);
1277 e_menu_item_submenu_set(mi, subm);
1278 e_object_unref(E_OBJECT(subm));
1280 submi = e_menu_item_new(subm);
1281 e_menu_item_label_set(submi, _("Window List"));
1282 e_menu_item_check_set(submi, 1);
1283 e_menu_item_toggle_set(submi, bd->user_skip_winlist);
1284 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_winlist, bd);
1285 e_menu_item_icon_edje_set(submi,
1286 e_theme_edje_file_get("base/theme/borders",
1287 "e/widgets/border/default/skip_winlist"),
1288 "e/widgets/border/default/skip_winlist");
1290 submi = e_menu_item_new(subm);
1291 e_menu_item_label_set(submi, _("Pager"));
1292 e_menu_item_check_set(submi, 1);
1293 e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_pager);
1294 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_pager, bd);
1295 e_menu_item_icon_edje_set(submi,
1296 e_theme_edje_file_get("base/theme/borders",
1297 "e/widgets/border/default/skip_pager"),
1298 "e/widgets/border/default/skip_pager");
1300 submi = e_menu_item_new(subm);
1301 e_menu_item_label_set(submi, _("Taskbar"));
1302 e_menu_item_check_set(submi, 1);
1303 e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_taskbar);
1304 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_taskbar, bd);
1305 e_menu_item_icon_edje_set(submi,
1306 e_theme_edje_file_get("base/theme/borders",
1307 "e/widgets/border/default/skip_taskbar"),
1308 "e/widgets/border/default/skip_taskbar");
1312 _e_border_menu_cb_fav_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1318 if (!(bd = data)) return;
1319 e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
1320 menu = efreet_menu_parse(buf);
1322 menu = efreet_menu_new("Favorites");
1324 efreet_menu_desktop_insert(menu, bd->desktop, -1);
1325 efreet_menu_save(menu, buf);
1326 efreet_menu_free(menu);
1330 _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1335 if (!(bd = data)) return;
1336 zone = e_util_zone_current_get(e_manager_current_get());
1338 e_configure_registry_call("keyboard_and_mouse/key_bindings",
1339 zone->container, bd->desktop->exec);
1343 _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1349 char buf[PATH_MAX], *file;
1352 if (!(bd = data)) return;
1353 len = e_user_dir_concat_static(buf, "applications/bar");
1354 if (len + 1 >= sizeof(buf)) return;
1355 dirs = ecore_file_ls(buf);
1362 EINA_LIST_FOREACH(dirs, l, file)
1366 if (file[0] == '.') continue;
1368 eina_strlcpy(buf + len, file, sizeof(buf) - len);
1369 if (ecore_file_is_dir(buf))
1371 smi = e_menu_item_new(sm);
1372 e_menu_item_label_set(smi, file);
1373 e_menu_item_callback_set(smi, _e_border_menu_cb_ibar_add, file);
1376 e_object_data_set(E_OBJECT(sm), bd);
1377 e_menu_item_submenu_set(mi, sm);
1378 e_object_unref(E_OBJECT(sm));
1382 _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
1388 bd = e_object_data_get(E_OBJECT(m));
1389 if ((!bd) || (!bd->desktop)) return;
1391 e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order",
1392 (const char *)data);
1393 od = e_order_new(buf);
1395 e_order_append(od, bd->desktop);
1396 e_object_del(E_OBJECT(od));
1399 /*vim:ts=8 sw=3 sts=3 expandtab cino=>5n-3f0^-2{2(0W1st0*/