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_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi);
17 static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi);
18 static void _e_border_menu_cb_resistance(void *data, E_Menu *m, E_Menu_Item *mi);
19 static void _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi);
20 static void _e_border_menu_cb_application_pre(void *data, E_Menu *m, E_Menu_Item *mi);
21 static void _e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi);
22 static void _e_border_menu_cb_prop(void *data, E_Menu *m, E_Menu_Item *mi);
23 static void _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi);
24 static void _e_border_menu_cb_stacking_pre(void *data, E_Menu *m, E_Menu_Item *mi);
25 static void _e_border_menu_cb_on_top(void *data, E_Menu *m, E_Menu_Item *mi);
26 static void _e_border_menu_cb_normal(void *data, E_Menu *m, E_Menu_Item *mi);
27 static void _e_border_menu_cb_below(void *data, E_Menu *m, E_Menu_Item *mi);
28 static void _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi);
29 static void _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi);
30 static void _e_border_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi);
31 static void _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi);
32 static void _e_border_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi);
33 static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi);
34 static void _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi);
35 static void _e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi);
36 static void _e_border_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi);
37 static void _e_border_menu_cb_raise(void *data, E_Menu *m, E_Menu_Item *mi);
38 static void _e_border_menu_cb_lower(void *data, E_Menu *m, E_Menu_Item *mi);
39 static void _e_border_menu_cb_skip_pre(void *data, E_Menu *m, E_Menu_Item *mi);
40 static void _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi);
41 static void _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m, E_Menu_Item *mi);
42 static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi);
43 static void _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi);
44 static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi);
45 static void _e_border_menu_cb_iconpref_e(void *data, E_Menu *m, E_Menu_Item *mi);
46 static void _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item *mi);
47 static void _e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi);
48 static void _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi);
49 static void _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi);
50 static void _e_border_menu_cb_settings_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi);
53 e_int_border_menu_create(E_Border *bd)
59 if (bd->border_menu) return;
62 e_menu_category_set(m, "border");
63 e_menu_category_data_set("border", bd);
64 e_object_data_set(E_OBJECT(m), bd);
66 e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL);
70 if (bd->client.icccm.class)
71 snprintf(buf, sizeof(buf), "%s", bd->client.icccm.class);
73 snprintf(buf, sizeof(buf), _("Application"));
74 mi = e_menu_item_new(m);
75 e_menu_item_label_set(mi, buf);
76 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_application_pre, bd);
78 e_util_desktop_menu_item_icon_add(bd->desktop, 16, mi);
80 mi = e_menu_item_new(m);
81 e_menu_item_separator_set(mi, 1);
84 if ((!bd->lock_user_stacking) && (!bd->fullscreen))
86 mi = e_menu_item_new(m);
87 e_menu_item_label_set(mi, _("Stacking"));
88 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_stacking_pre, bd);
89 e_menu_item_icon_edje_set(mi,
90 e_theme_edje_file_get("base/theme/borders",
91 "e/widgets/border/default/stacking"),
92 "e/widgets/border/default/stacking");
95 if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
96 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))
98 if (!(((bd->client.icccm.min_w == bd->client.icccm.max_w) &&
99 (bd->client.icccm.min_h == bd->client.icccm.max_h)) ||
100 (bd->lock_user_maximize)))
102 if ((!bd->lock_user_maximize) && (!bd->shaded))
104 mi = e_menu_item_new(m);
105 e_menu_item_label_set(mi, _("Maximize"));
106 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_maximize_pre, bd);
107 e_menu_item_icon_edje_set(mi,
108 e_theme_edje_file_get("base/theme/borders",
109 "e/widgets/border/default/maximize"),
110 "e/widgets/border/default/maximize");
115 if ((!bd->sticky) && ((bd->zone->desk_x_count > 1) || (bd->zone->desk_y_count > 1)))
117 mi = e_menu_item_new(m);
118 e_menu_item_label_set(mi, _("Move to"));
119 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_sendto_pre, bd);
120 e_menu_item_icon_edje_set(mi,
121 e_theme_edje_file_get("base/theme/borders",
122 "e/widgets/border/default/sendto"),
123 "e/widgets/border/default/sendto");
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 mi = e_menu_item_new(m);
138 e_menu_item_label_set(mi, _("Settings"));
139 e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_settings_pre, bd);
140 e_menu_item_icon_edje_set(mi,
141 e_theme_edje_file_get("base/theme/borders",
142 "e/widgets/border/default/settings"),
143 "e/widgets/border/default/settings");
147 mi = e_menu_item_new(m);
148 e_menu_item_separator_set(mi, 1);
150 mi = e_menu_item_new(m);
151 e_menu_item_label_set(mi, _("Close"));
152 e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd);
153 e_menu_item_icon_edje_set(mi,
154 e_theme_edje_file_get("base/theme/borders",
155 "e/widgets/border/default/close"),
156 "e/widgets/border/default/close");
161 e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp)
163 e_int_border_menu_create(bd);
165 e_menu_activate_key(bd->border_menu, bd->zone, x, y, 1, 1,
166 E_MENU_POP_DIRECTION_DOWN);
168 e_menu_activate_mouse(bd->border_menu, bd->zone, x, y, 1, 1,
169 E_MENU_POP_DIRECTION_DOWN, timestamp);
173 e_int_border_menu_del(E_Border *bd)
177 e_object_del(E_OBJECT(bd->border_menu));
178 bd->border_menu = NULL;
183 _e_border_cb_border_menu_end(void *data __UNUSED__, E_Menu *m)
187 bd = e_object_data_get(E_OBJECT(m));
190 /* If the border exists, delete all associated menus */
191 e_int_border_menu_del(bd);
195 /* Just delete this menu */
196 e_object_del(E_OBJECT(m));
201 _e_border_menu_cb_locks(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
206 if (bd->border_locks_dialog) return;
207 e_int_border_locks(bd);
211 _e_border_menu_cb_remember(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
216 if (bd->border_remember_dialog) return;
217 e_int_border_remember(bd);
221 _e_border_menu_cb_border(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
227 if (bd->border_border_dialog) return;
228 snprintf(buf, sizeof(buf), "%p", bd);
229 e_configure_registry_call("internal/borders_border", bd->zone->container, buf);
233 _e_border_menu_cb_close(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
238 if (!bd->lock_close) e_border_act_close_begin(bd);
242 _e_border_menu_cb_iconify(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
247 if (!bd->lock_user_iconify)
250 e_border_uniconify(bd);
252 e_border_iconify(bd);
257 _e_border_menu_cb_kill(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
263 if ((bd->lock_close) || (bd->internal)) return;
265 a = e_action_find("window_kill");
266 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
270 _e_border_menu_cb_move(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
276 if (!bd->lock_user_location)
277 e_border_act_move_keyboard(bd);
281 _e_border_menu_cb_resize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
287 if (!bd->lock_user_size)
288 e_border_act_resize_keyboard(bd);
292 _e_border_menu_cb_maximize_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
298 if (!(bd = data)) return;
301 e_object_data_set(E_OBJECT(subm), bd);
302 e_menu_item_submenu_set(mi, subm);
304 if ((!bd->lock_user_fullscreen) && (!bd->shaded))
306 submi = e_menu_item_new(subm);
307 e_menu_item_label_set(submi, _("Fullscreen"));
308 e_menu_item_check_set(submi, 1);
309 e_menu_item_toggle_set(submi, bd->fullscreen);
310 e_menu_item_callback_set(submi, _e_border_menu_cb_fullscreen, bd);
311 e_menu_item_icon_edje_set(submi,
312 e_theme_edje_file_get("base/theme/borders",
313 "e/widgets/border/default/fullscreen"),
314 "e/widgets/border/default/fullscreen");
319 submi = e_menu_item_new(subm);
320 e_menu_item_label_set(submi, _("Maximize"));
321 e_menu_item_radio_set(submi, 1);
322 e_menu_item_radio_group_set(submi, 3);
323 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH);
324 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize, bd);
325 e_menu_item_icon_edje_set(submi,
326 e_theme_edje_file_get("base/theme/borders",
327 "e/widgets/border/default/maximize"),
328 "e/widgets/border/default/maximize");
330 submi = e_menu_item_new(subm);
331 e_menu_item_label_set(submi, _("Maximize vertically"));
332 e_menu_item_radio_set(submi, 1);
333 e_menu_item_radio_group_set(submi, 3);
334 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL);
335 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_vertically, bd);
336 e_menu_item_icon_edje_set(submi,
337 e_theme_edje_file_get("base/theme/borders",
338 "e/widgets/border/default/maximize"),
339 "e/widgets/border/default/maximize");
341 submi = e_menu_item_new(subm);
342 e_menu_item_label_set(submi, _("Maximize horizontally"));
343 e_menu_item_radio_set(submi, 1);
344 e_menu_item_radio_group_set(submi, 3);
345 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL);
346 e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_horizontally, bd);
347 e_menu_item_icon_edje_set(submi,
348 e_theme_edje_file_get("base/theme/borders",
349 "e/widgets/border/default/maximize"),
350 "e/widgets/border/default/maximize");
352 submi = e_menu_item_new(subm);
353 e_menu_item_label_set(submi, _("Unmaximize"));
354 e_menu_item_radio_set(submi, 1);
355 e_menu_item_radio_group_set(submi, 3);
356 e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_NONE);
357 e_menu_item_callback_set(submi, _e_border_menu_cb_unmaximize, bd);
358 e_menu_item_icon_edje_set(submi,
359 e_theme_edje_file_get("base/theme/borders",
360 "e/widgets/border/default/maximize"),
361 "e/widgets/border/default/maximize");
366 _e_border_menu_cb_maximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
371 if (!bd->lock_user_maximize)
372 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
377 _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
382 if (!bd->lock_user_maximize)
384 if ((bd->maximized & E_MAXIMIZE_HORIZONTAL))
385 e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
386 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
387 E_MAXIMIZE_VERTICAL);
392 _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
397 if (!bd->lock_user_maximize)
399 if ((bd->maximized & E_MAXIMIZE_VERTICAL))
400 e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
401 e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
402 E_MAXIMIZE_HORIZONTAL);
407 _e_border_menu_cb_unmaximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
412 e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
416 _e_border_menu_cb_shade(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
421 if (!bd->lock_user_shade)
424 e_border_unshade(bd, E_DIRECTION_UP);
426 e_border_shade(bd, E_DIRECTION_UP);
431 _e_border_menu_cb_resistance(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
436 bd->offer_resistance = !bd->offer_resistance;
440 _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
445 e_desktop_border_edit(m->zone->container, bd);
449 _e_border_menu_cb_application_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
455 if (!(bd = data)) return;
458 e_object_data_set(E_OBJECT(subm), bd);
459 e_menu_item_submenu_set(mi, subm);
463 submi = e_menu_item_new(subm);
464 e_menu_item_label_set(submi, _("Edit Icon"));
465 e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd);
466 e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi);
468 else if (bd->client.icccm.class)
470 /* icons with no class useless to borders */
471 submi = e_menu_item_new(subm);
472 e_menu_item_label_set(submi, _("Create Icon"));
473 e_menu_item_callback_set(submi, _e_border_menu_cb_icon_edit, bd);
476 submi = e_menu_item_new(subm);
477 e_menu_item_separator_set(submi, 1);
479 submi = e_menu_item_new(subm);
480 e_menu_item_label_set(submi, _("Add to Favorites Menu"));
481 e_menu_item_callback_set(submi, _e_border_menu_cb_fav_add, bd);
482 e_util_menu_item_theme_icon_set(submi, "user-bookmarks");
484 submi = e_menu_item_new(subm);
485 e_menu_item_label_set(submi, _("Add to IBar"));
486 e_menu_item_submenu_pre_callback_set(submi,
487 _e_border_menu_cb_ibar_add_pre, bd);
488 e_util_menu_item_theme_icon_set(submi, "preferences-applications-ibar");
490 if (e_configure_registry_exists("keyboard_and_mouse/key_bindings"))
492 submi = e_menu_item_new(subm);
493 e_menu_item_label_set(submi, _("Create Keyboard Shortcut"));
494 e_menu_item_callback_set(submi, _e_border_menu_cb_kbdshrtct_add, bd);
495 e_util_menu_item_theme_icon_set(submi, "preferences-desktop-keyboard");
500 _e_border_menu_cb_settings_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
506 if (!(bd = data)) return;
509 e_object_data_set(E_OBJECT(subm), bd);
510 e_menu_item_submenu_set(mi, subm);
512 if (!bd->lock_border)
514 submi = e_menu_item_new(subm);
515 e_menu_item_label_set(submi, _("Border"));
516 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_border_pre, bd);
517 e_menu_item_icon_edje_set(submi,
518 e_theme_edje_file_get("base/theme/borders",
519 "e/widgets/border/default/borderless"),
520 "e/widgets/border/default/borderless");
523 submi = e_menu_item_new(subm);
524 e_menu_item_label_set(submi, _("Locks"));
525 e_menu_item_callback_set(submi, _e_border_menu_cb_locks, bd);
526 e_menu_item_icon_edje_set(submi,
527 e_theme_edje_file_get("base/theme/borders",
528 "e/widgets/border/default/locks"),
529 "e/widgets/border/default/locks");
531 submi = e_menu_item_new(subm);
532 e_menu_item_label_set(submi, _("Remember"));
533 e_menu_item_callback_set(submi, _e_border_menu_cb_remember, bd);
534 e_menu_item_icon_edje_set(submi,
535 e_theme_edje_file_get("base/theme/borders",
536 "e/widgets/border/default/remember"),
537 "e/widgets/border/default/remember");
539 submi = e_menu_item_new(subm);
540 e_menu_item_separator_set(submi, 1);
542 submi = e_menu_item_new(subm);
543 e_menu_item_label_set(submi, _("ICCCM/NetWM"));
544 e_menu_item_callback_set(submi, _e_border_menu_cb_prop, bd);
545 e_menu_item_icon_edje_set(submi,
546 e_theme_edje_file_get("base/theme/borders",
547 "e/widgets/border/default/properties"),
548 "e/widgets/border/default/properties");
552 _e_border_menu_cb_window_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
558 if (!(bd = data)) return;
561 e_object_data_set(E_OBJECT(subm), bd);
562 e_menu_item_submenu_set(mi, subm);
564 if (!bd->lock_user_sticky)
566 submi = e_menu_item_new(subm);
567 e_menu_item_label_set(submi, _("Sticky"));
568 e_menu_item_check_set(submi, 1);
569 e_menu_item_toggle_set(submi, (bd->sticky ? 1 : 0));
570 e_menu_item_callback_set(submi, _e_border_menu_cb_stick, bd);
571 e_menu_item_icon_edje_set(submi,
572 e_theme_edje_file_get("base/theme/borders",
573 "e/widgets/border/default/stick"),
574 "e/widgets/border/default/stick");
577 submi = e_menu_item_new(subm);
578 e_menu_item_label_set(submi, _("Skip"));
579 e_menu_item_submenu_pre_callback_set(submi, _e_border_menu_cb_skip_pre, bd);
580 e_menu_item_icon_edje_set(submi,
581 e_theme_edje_file_get("base/theme/borders",
582 "e/widgets/border/default/skip"),
583 "e/widgets/border/default/skip");
585 submi = e_menu_item_new(subm);
586 e_menu_item_separator_set(submi, 1);
588 if ((!bd->lock_user_location) && (!bd->fullscreen) &&
589 (((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || e_config->allow_manip))
591 submi = e_menu_item_new(subm);
592 e_menu_item_label_set(submi, _("Move"));
593 e_menu_item_callback_set(submi, _e_border_menu_cb_move, bd);
594 e_menu_item_icon_edje_set(submi,
595 e_theme_edje_file_get("base/theme/borders",
596 "e/widgets/border/default/move_icon"),
597 "e/widgets/border/default/move_icon");
600 if (((!bd->lock_user_size) && (!bd->fullscreen) &&
601 (((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH) || e_config->allow_manip)) &&
602 ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
603 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN)))
605 submi = e_menu_item_new(subm);
606 e_menu_item_label_set(submi, _("Resize"));
607 e_menu_item_callback_set(submi, _e_border_menu_cb_resize, bd);
608 e_menu_item_icon_edje_set(submi,
609 e_theme_edje_file_get("base/theme/borders",
610 "e/widgets/border/default/resize_icon"),
611 "e/widgets/border/default/resize_icon");
614 submi = e_menu_item_new(subm);
615 e_menu_item_separator_set(submi, 1);
617 if ((!bd->lock_user_iconify) && (!bd->fullscreen))
619 submi = e_menu_item_new(subm);
620 e_menu_item_label_set(submi, _("Iconify"));
621 e_menu_item_callback_set(submi, _e_border_menu_cb_iconify, bd);
622 e_menu_item_icon_edje_set(submi,
623 e_theme_edje_file_get("base/theme/borders",
624 "e/widgets/border/default/minimize"),
625 "e/widgets/border/default/minimize");
628 if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) &&
629 ((!bd->client.border.name) || (strcmp("borderless", bd->client.border.name))))
631 submi = e_menu_item_new(subm);
632 e_menu_item_label_set(submi, _("Shade"));
633 e_menu_item_check_set(submi, 1);
634 e_menu_item_toggle_set(submi, (bd->shaded ? 1 : 0));
635 e_menu_item_callback_set(submi, _e_border_menu_cb_shade, bd);
636 e_menu_item_icon_edje_set(submi,
637 e_theme_edje_file_get("base/theme/borders",
638 "e/widgets/border/default/shade"),
639 "e/widgets/border/default/shade");
642 submi = e_menu_item_new(subm);
643 e_menu_item_separator_set(submi, 1);
645 if ((!bd->internal) && (!bd->lock_close))
647 submi = e_menu_item_new(subm);
648 e_menu_item_label_set(submi, _("Kill"));
649 e_menu_item_callback_set(submi, _e_border_menu_cb_kill, bd);
650 e_menu_item_icon_edje_set(submi,
651 e_theme_edje_file_get("base/theme/borders",
652 "e/widgets/border/default/kill"),
653 "e/widgets/border/default/kill");
658 _e_border_menu_cb_prop(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
663 e_int_border_prop(bd);
667 _e_border_menu_cb_stick(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
672 if (!bd->lock_user_sticky)
675 e_border_unstick(bd);
682 _e_border_menu_cb_on_top(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
687 if (bd->layer != 150)
689 e_border_layer_set(bd, 150);
690 e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
695 _e_border_menu_cb_below(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
702 e_border_layer_set(bd, 50);
703 e_hints_window_stacking_set(bd, E_STACKING_BELOW);
708 _e_border_menu_cb_normal(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
713 if (bd->layer != 100)
715 e_border_layer_set(bd, 100);
716 e_hints_window_stacking_set(bd, E_STACKING_NONE);
721 _e_border_menu_cb_fullscreen(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
726 if (!(bd = data)) return;
728 if (!bd->lock_user_fullscreen)
730 toggle = e_menu_item_toggle_get(mi);
732 e_border_fullscreen(bd, e_config->fullscreen_policy);
734 e_border_unfullscreen(bd);
739 _e_border_menu_cb_skip_winlist(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
743 if (!(bd = data)) return;
745 if (((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus)) &&
746 (!bd->client.netwm.state.skip_taskbar))
747 bd->user_skip_winlist = e_menu_item_toggle_get(mi);
749 bd->user_skip_winlist = 0;
751 e_remember_update(bd);
755 _e_border_menu_cb_skip_pager(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
759 if (!(bd = data)) return;
761 if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
762 bd->client.netwm.state.skip_pager = e_menu_item_toggle_get(mi);
764 bd->client.netwm.state.skip_pager = 0;
766 e_remember_update(bd);
770 _e_border_menu_cb_skip_taskbar(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
774 if (!(bd = data)) return;
776 if ((bd->client.icccm.accepts_focus) || (bd->client.icccm.take_focus))
777 bd->client.netwm.state.skip_taskbar = e_menu_item_toggle_get(mi);
779 bd->client.netwm.state.skip_taskbar = 0;
781 e_remember_update(bd);
785 _e_border_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi)
788 Evas_Object *o = NULL;
789 const char *bgfile = NULL;
793 E_OBJECT_CHECK(desk);
796 th = (tw * desk->zone->h) / desk->zone->w;
797 bgfile = e_bg_file_get(desk->zone->container->num, desk->zone->num,
799 o = e_thumb_icon_add(m->evas);
800 e_thumb_icon_file_set(o, bgfile, "e/desktop/background");
801 e_thumb_icon_size_set(o, tw, th);
802 e_thumb_icon_begin(o);
807 _e_border_menu_cb_sendto_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
819 desk_cur = e_desk_current_get(bd->zone);
820 zones = eina_list_count(bd->zone->container->zones);
823 e_object_data_set(E_OBJECT(subm), bd);
824 e_menu_item_submenu_set(mi, subm);
826 EINA_LIST_FOREACH(bd->zone->container->zones, l, zone)
830 snprintf (buf, sizeof(buf), _("Screen %d"), zone->num);
831 submi = e_menu_item_new(subm);
832 e_menu_item_label_set(submi, buf);
833 e_menu_item_disabled_set(submi, EINA_TRUE);
836 // FIXME: Remove labels and add deskpreview to menu.
837 // Evas_Object *o = e_widget_deskpreview_add(m->evas, 4, 2);
839 for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
843 desk = zone->desks[i];
844 submi = e_menu_item_new(subm);
845 e_menu_item_label_set(submi, desk->name);
846 e_menu_item_radio_set(submi, 1);
847 e_menu_item_radio_group_set(submi, 2);
848 if ((bd->zone == zone) && (desk_cur == desk))
849 e_menu_item_toggle_set(submi, 1);
851 e_menu_item_callback_set(submi, _e_border_menu_cb_sendto, desk);
852 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_sendto_icon_pre,
859 _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
865 bd = e_object_data_get(E_OBJECT(m));
868 e_border_zone_set(bd, desk->zone);
869 e_border_desk_set(bd, desk);
874 _e_border_menu_cb_pin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
878 bd = e_object_data_get(E_OBJECT(m));
879 if (bd) e_border_pinned_set(bd, 1);
883 _e_border_menu_cb_unpin(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
887 bd = e_object_data_get(E_OBJECT(m));
888 if (bd) e_border_pinned_set(bd, 0);
892 _e_border_menu_cb_stacking_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
898 if (!(bd = data)) return;
901 e_object_data_set(E_OBJECT(subm), bd);
902 e_menu_item_submenu_set(mi, subm);
904 /* Only allow to change layer for windows in "normal" layers */
905 e_menu_category_set(subm,"border/stacking");
906 e_menu_category_data_set("border/stacking",bd);
908 submi = e_menu_item_new(subm);
909 e_menu_item_label_set(submi, _("Always on Top"));
910 e_menu_item_radio_set(submi, 1);
911 e_menu_item_radio_group_set(submi, 2);
912 e_menu_item_toggle_set(submi, (bd->layer == 150 ? 1 : 0));
913 e_menu_item_callback_set(submi, _e_border_menu_cb_on_top, bd);
914 e_menu_item_icon_edje_set(submi,
915 e_theme_edje_file_get("base/theme/borders",
916 "e/widgets/border/default/stack_on_top"),
917 "e/widgets/border/default/stack_on_top");
919 submi = e_menu_item_new(subm);
920 e_menu_item_label_set(submi, _("Normal"));
921 e_menu_item_radio_set(submi, 1);
922 e_menu_item_radio_group_set(submi, 2);
923 e_menu_item_toggle_set(submi, (bd->layer == 100 ? 1 : 0));
924 e_menu_item_callback_set(submi, _e_border_menu_cb_normal, bd);
925 e_menu_item_icon_edje_set(submi,
926 e_theme_edje_file_get("base/theme/borders",
927 "e/widgets/border/default/stack_normal"),
928 "e/widgets/border/default/stack_normal");
930 submi = e_menu_item_new(subm);
931 e_menu_item_label_set(submi, _("Always Below"));
932 e_menu_item_radio_set(submi, 1);
933 e_menu_item_radio_group_set(submi, 2);
934 e_menu_item_toggle_set(submi, (bd->layer == 50 ? 1 : 0));
935 e_menu_item_callback_set(submi, _e_border_menu_cb_below, bd);
936 e_menu_item_icon_edje_set(submi,
937 e_theme_edje_file_get("base/theme/borders",
938 "e/widgets/border/default/stack_below"),
939 "e/widgets/border/default/stack_below");
941 submi = e_menu_item_new(subm);
942 e_menu_item_separator_set(submi, 1);
944 // Only allow to change layer for windows in "normal" layers
945 if ((!bd->lock_user_stacking) &&
946 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
948 submi = e_menu_item_new(subm);
949 e_menu_item_label_set(submi, _("Raise"));
950 e_menu_item_callback_set(submi, _e_border_menu_cb_raise, bd);
951 e_menu_item_icon_edje_set(submi,
952 e_theme_edje_file_get("base/theme/borders",
953 "e/widgets/border/default/stack_on_top"),
954 "e/widgets/border/default/stack_on_top");
956 submi = e_menu_item_new(subm);
957 e_menu_item_label_set(submi, _("Lower"));
958 e_menu_item_callback_set(submi, _e_border_menu_cb_lower, bd);
959 e_menu_item_icon_edje_set(submi,
960 e_theme_edje_file_get("base/theme/borders",
961 "e/widgets/border/default/stack_below"),
962 "e/widgets/border/default/stack_below");
965 submi = e_menu_item_new(subm);
966 e_menu_item_separator_set(submi, 1);
968 if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NORMAL) ||
969 (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_UNKNOWN))
971 if ((bd->client.netwm.state.stacking != E_STACKING_BELOW) ||
972 (!bd->user_skip_winlist) || (!bd->borderless))
974 submi = e_menu_item_new(subm);
975 e_menu_item_label_set(submi, _("Pin to Desktop"));
976 e_menu_item_callback_set(submi, _e_border_menu_cb_pin, bd);
977 e_menu_item_icon_edje_set(submi,
978 e_theme_edje_file_get("base/theme/borders",
979 "e/widgets/border/default/stick"),
980 "e/widgets/border/default/stick");
982 if ((bd->client.netwm.state.stacking == E_STACKING_BELOW) &&
983 (bd->user_skip_winlist) && (bd->borderless))
985 submi = e_menu_item_new(subm);
986 e_menu_item_label_set(submi, _("Unpin from Desktop"));
987 e_menu_item_callback_set(submi, _e_border_menu_cb_unpin, bd);
988 e_menu_item_icon_edje_set(submi,
989 e_theme_edje_file_get("base/theme/borders",
990 "e/widgets/border/default/stick"),
991 "e/widgets/border/default/stick");
997 _e_border_menu_cb_raise(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1002 if ((!bd->lock_user_stacking) && (!bd->internal) &&
1003 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
1010 _e_border_menu_cb_lower(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1015 if ((!bd->lock_user_stacking) && (!bd->internal) &&
1016 ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
1023 _e_border_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi)
1027 unsigned char prev_icon_pref;
1032 o = e_icon_add(m->evas);
1033 prev_icon_pref = bd->icon_preference;
1034 bd->icon_preference = E_ICON_PREF_E_DEFAULT;
1035 e_icon_object_set(o, e_border_icon_add(bd, m->evas));
1036 bd->icon_preference = prev_icon_pref;
1037 mi->icon_object = o;
1041 _e_border_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi)
1049 if (bd->client.netwm.icons)
1051 o = e_icon_add(m->evas);
1052 e_icon_data_set(o, bd->client.netwm.icons[0].data,
1053 bd->client.netwm.icons[0].width,
1054 bd->client.netwm.icons[0].height);
1055 e_icon_alpha_set(o, 1);
1056 mi->icon_object = o;
1061 _e_border_menu_cb_border_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1067 if (!(bd = data)) return;
1069 subm = e_menu_new();
1070 e_object_data_set(E_OBJECT(subm), bd);
1071 e_menu_item_submenu_set(mi, subm);
1073 if (e_configure_registry_exists("internal/borders_border"))
1075 submi = e_menu_item_new(subm);
1076 e_menu_item_label_set(submi, _("Select Border Style"));
1077 e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd);
1078 e_menu_item_icon_edje_set(submi,
1079 e_theme_edje_file_get("base/theme/borders",
1080 "e/widgets/border/default/borderless"),
1081 "e/widgets/border/default/borderless");
1083 submi = e_menu_item_new(subm);
1084 e_menu_item_separator_set(submi, 1);
1087 submi = e_menu_item_new(subm);
1088 e_menu_item_label_set(submi, _("Use E17 Default Icon Preference"));
1089 e_menu_item_radio_set(submi, 1);
1090 e_menu_item_radio_group_set(submi, 2);
1091 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_E_DEFAULT ? 1 : 0));
1092 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_default_icon, bd);
1093 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_e, bd);
1095 submi = e_menu_item_new(subm);
1096 e_menu_item_label_set(submi, _("Use Application Provided Icon "));
1097 e_menu_item_radio_set(submi, 1);
1098 e_menu_item_radio_group_set(submi, 2);
1099 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_NETWM ? 1 : 0));
1100 e_menu_item_realize_callback_set(submi, _e_border_menu_cb_netwm_icon, bd);
1101 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_netwm, bd);
1103 submi = e_menu_item_new(subm);
1104 e_menu_item_label_set(submi, _("Use User Defined Icon"));
1105 e_menu_item_radio_set(submi, 1);
1106 e_menu_item_radio_group_set(submi, 2);
1107 e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_USER ? 1 : 0));
1108 e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi);
1109 e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_user, bd);
1110 e_menu_item_separator_set(submi, 1);
1112 submi = e_menu_item_new(subm);
1113 e_menu_item_label_set(submi, _("Offer Resistance"));
1114 e_menu_item_check_set(submi, 1);
1115 e_menu_item_toggle_set(submi, (bd->offer_resistance ? 1 : 0));
1116 e_menu_item_callback_set(submi, _e_border_menu_cb_resistance, bd);
1117 e_menu_item_icon_edje_set(submi,
1118 e_theme_edje_file_get("base/theme/borders",
1119 "e/widgets/border/default/borderless"),
1120 "e/widgets/border/default/borderless");
1124 _e_border_menu_cb_iconpref_e(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1128 if (!(bd = data)) return;
1130 bd->icon_preference = E_ICON_PREF_E_DEFAULT;
1131 bd->changes.icon = 1;
1136 _e_border_menu_cb_iconpref_user(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1140 if (!(bd = data)) return;
1142 bd->icon_preference = E_ICON_PREF_USER;
1143 bd->changes.icon = 1;
1148 _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1152 if (!(bd = data)) return;
1154 bd->icon_preference = E_ICON_PREF_NETWM;
1155 bd->changes.icon = 1;
1160 _e_border_menu_cb_skip_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1166 if (!(bd = data)) return;
1168 subm = e_menu_new();
1169 e_object_data_set(E_OBJECT(subm), bd);
1170 e_menu_item_submenu_set(mi, subm);
1172 submi = e_menu_item_new(subm);
1173 e_menu_item_label_set(submi, _("Window List"));
1174 e_menu_item_check_set(submi, 1);
1175 e_menu_item_toggle_set(submi, bd->user_skip_winlist);
1176 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_winlist, bd);
1177 e_menu_item_icon_edje_set(submi,
1178 e_theme_edje_file_get("base/theme/borders",
1179 "e/widgets/border/default/skip_winlist"),
1180 "e/widgets/border/default/skip_winlist");
1182 submi = e_menu_item_new(subm);
1183 e_menu_item_label_set(submi, _("Pager"));
1184 e_menu_item_check_set(submi, 1);
1185 e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_pager);
1186 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_pager, bd);
1187 e_menu_item_icon_edje_set(submi,
1188 e_theme_edje_file_get("base/theme/borders",
1189 "e/widgets/border/default/skip_pager"),
1190 "e/widgets/border/default/skip_pager");
1192 submi = e_menu_item_new(subm);
1193 e_menu_item_label_set(submi, _("Taskbar"));
1194 e_menu_item_check_set(submi, 1);
1195 e_menu_item_toggle_set(submi, bd->client.netwm.state.skip_taskbar);
1196 e_menu_item_callback_set(submi, _e_border_menu_cb_skip_taskbar, bd);
1197 e_menu_item_icon_edje_set(submi,
1198 e_theme_edje_file_get("base/theme/borders",
1199 "e/widgets/border/default/skip_taskbar"),
1200 "e/widgets/border/default/skip_taskbar");
1204 _e_border_menu_cb_fav_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1210 if (!(bd = data)) return;
1211 e_user_dir_concat_static(buf, "applications/menu/favorite.menu");
1212 menu = efreet_menu_parse(buf);
1214 menu = efreet_menu_new("Favorites");
1216 efreet_menu_desktop_insert(menu, bd->desktop, -1);
1217 efreet_menu_save(menu, buf);
1218 efreet_menu_free(menu);
1222 _e_border_menu_cb_kbdshrtct_add(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
1227 if (!(bd = data)) return;
1228 zone = e_util_zone_current_get(e_manager_current_get());
1230 e_configure_registry_call("keyboard_and_mouse/key_bindings",
1231 zone->container, bd->desktop->exec);
1235 _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
1241 char buf[PATH_MAX], *file;
1244 if (!(bd = data)) return;
1245 len = e_user_dir_concat_static(buf, "applications/bar");
1246 if (len + 1 >= sizeof(buf)) return;
1247 dirs = ecore_file_ls(buf);
1254 EINA_LIST_FOREACH(dirs, l, file)
1258 if (file[0] == '.') continue;
1260 eina_strlcpy(buf + len, file, sizeof(buf) - len);
1261 if (ecore_file_is_dir(buf))
1263 smi = e_menu_item_new(sm);
1264 e_menu_item_label_set(smi, file);
1265 e_menu_item_callback_set(smi, _e_border_menu_cb_ibar_add, file);
1268 e_object_data_set(E_OBJECT(sm), bd);
1269 e_menu_item_submenu_set(mi, sm);
1273 _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
1279 bd = e_object_data_get(E_OBJECT(m));
1280 if ((!bd) || (!bd->desktop)) return;
1282 e_user_dir_snprintf(buf, sizeof(buf), "applications/bar/%s/.order",
1283 (const char *)data);
1284 od = e_order_new(buf);
1286 e_order_append(od, bd->desktop);
1287 e_object_del(E_OBJECT(od));
1289 /*vim:ts=8 sw=3 sts=3 expandtab cino=>5n-3f0^-2{2(0W1st0*/