Enlightenment CVS committal
Author : handyande
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_border.c
Log Message:
Added first take on border menus, may need a little tidying
install e_utils module for full icon editing effect
need to fix up icon creation in eapp_edit, then hook in file name generation
here
will be able to pass in window class, which will save folk a lot of time
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- e_border.c 21 Dec 2004 03:01:19 -0000 1.26
+++ e_border.c 22 Dec 2004 15:50:26 -0000 1.27
@@ -61,6 +61,12 @@
static void _e_border_resize_handle(E_Border *bd);
static int _e_border_shade_animator(void *data);
+static void _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y);
+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_maximize(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_icon_edit(void *data, E_Menu *m, E_Menu_Item
*mi);
/* local subsystem globals */
static Evas_List *handlers = NULL;
@@ -1163,7 +1169,7 @@
ecore_x_sync();
// ecore_x_window_del(bd->client.win);
e_object_del(E_OBJECT(bd));
- }
+ }
}
else if (!strcmp(source, "shade_up") || !strcmp(source, "shade"))
{
@@ -1195,7 +1201,12 @@
if (bd->iconic) e_border_uniconify(bd);
else e_border_iconify(bd);
}
-
+ else if (!strcmp(source, "menu"))
+ {
+ Evas_Coord x, y;
+ evas_pointer_canvas_xy_get(bd->bg_evas , &x, &y);
+ _e_border_menu_show(bd, x + bd->x, y + bd->y);
+ }
}
@@ -2258,3 +2269,142 @@
return 1;
}
+E_Menu *_e_border_menu;
+
+static void
+_e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y)
+{
+ E_Menu *m;
+ E_Menu_Item *mi;
+ E_App *a;
+
+ if (!_e_border_menu)
+ _e_border_menu= e_menu_new();
+ m = _e_border_menu;
+
+ /* clear menu */
+ if (m->items)
+ {
+ Evas_List *l;
+ for (l = m->items; l; l = l->next)
+ {
+ E_Menu_Item *mi = l->data;
+ e_object_free(E_OBJECT(mi));
+ }
+
+ }
+
+ 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_callback_set(mi, _e_border_menu_cb_maximize, bd);
+ mi = e_menu_item_new(m);
+ if (bd->shaded)
+ e_menu_item_label_set(mi, "Un-Shade");
+ else
+ e_menu_item_label_set(mi, "Shade");
+ e_menu_item_callback_set(mi, _e_border_menu_cb_shade, bd);
+
+ mi = e_menu_item_new(m);
+ e_menu_item_label_set(mi, "Iconify");
+ e_menu_item_callback_set(mi, _e_border_menu_cb_iconify, bd);
+ mi = e_menu_item_new(m);
+ if (bd->maximized)
+ e_menu_item_label_set(mi, "Restore");
+ else
+ e_menu_item_label_set(mi, "Maximise");
+ e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
+
+ mi = e_menu_item_new(m);
+ e_menu_item_separator_set(mi, 1);
+
+ a = e_app_window_name_class_find(bd->client.icccm.name,
+ bd->client.icccm.class);
+
+ if (a)
+ {
+ mi = e_menu_item_new(m);
+ e_menu_item_label_set(mi, "Edit Icon");
+ e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, a->path);
+ }
+ else
+ {
+ mi = e_menu_item_new(m);
+ e_menu_item_label_set(mi, "Create Icon");
+ /* FIXME need to create path for newly created icon */
+ e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, "");
+ }
+
+ e_menu_activate_mouse(m, bd->container, x, y, 1, 1,
+ E_MENU_POP_DIRECTION_DOWN);
+
+}
+
+static void
+_e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ E_Border *bd;
+
+ bd = data;
+ if (bd->client.icccm.delete_request)
+ ecore_x_window_delete_request_send(bd->client.win);
+ else
+ {
+ ecore_x_kill(bd->client.win);
+ ecore_x_sync();
+// ecore_x_window_del(bd->client.win);
+ e_object_del(E_OBJECT(bd));
+ }
+}
+
+static void
+_e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ E_Border *bd;
+
+ bd = data;
+ if (bd->maximized) e_border_uniconify(bd);
+ else e_border_iconify(bd);
+}
+
+static void
+_e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ E_Border *bd;
+
+ bd = data;
+ if (bd->maximized) e_border_unmaximize(bd);
+ else e_border_maximize(bd);
+}
+
+static void
+_e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ E_Border *bd;
+
+ bd = data;
+ if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP);
+ else e_border_shade(bd, E_DIRECTION_UP);
+}
+
+static void
+_e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ char *file;
+ char *command;
+ char *full;
+ Ecore_Exe *process;
+
+ file = data;
+ command = "e_util_eapp_edit ";
+ full = malloc(strlen(file) + strlen(command) + 1);
+ strcpy(full, command);
+ strcat(full, file);
+ printf("e_util_eapp_edit %s\n", full);
+ process = ecore_exe_run(full, NULL);
+ if (!process || !ecore_exe_pid_get(process))
+ e_error_dialog_show("Icon Edit Error", "Error starting icon editor\n\n \
+ please install e_util_eapp_edit\n \
+ or make sure it is in your PATH\n");
+}
+
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs