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 SVN revision: 12551
This commit is contained in:
parent
4f7683b206
commit
ce599e8455
|
@ -1594,6 +1594,12 @@ collections {
|
|||
source: "resize_l";
|
||||
action: SIGNAL_EMIT "resize_stop" "mouse,1";
|
||||
}
|
||||
program {
|
||||
name: "menu_action";
|
||||
signal: "mouse,clicked,1";
|
||||
source: "icon";
|
||||
action: SIGNAL_EMIT "action" "menu";
|
||||
}
|
||||
program {
|
||||
name: "close_action";
|
||||
signal: "mouse,clicked,1";
|
||||
|
|
|
@ -61,6 +61,12 @@ static void _e_border_moveinfo_gather(E_Border *bd, const char *source);
|
|||
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 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
|
|||
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 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
|
|||
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 @@ _e_border_shade_animator(void *data)
|
|||
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");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue