From 7ea19245d769693fcc38f98ecde286286b9c3756 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 15 Jun 2006 07:24:10 +0000 Subject: [PATCH] todo-- :) SVN revision: 23444 --- TODO | 1 - src/bin/e_gadcon.c | 27 ++++++++++++----- src/bin/e_gadcon.h | 7 ++++- src/bin/e_shelf.c | 74 +++++++++++++++++++++++++++++++--------------- 4 files changed, 75 insertions(+), 34 deletions(-) diff --git a/TODO b/TODO index 2f3d23a65..5ccf64b2c 100644 --- a/TODO +++ b/TODO @@ -60,7 +60,6 @@ Some of the things (in very short form) that need to be done to E17... real problems are where to find the icons for the .desktop files. * shelf config dialog needs to have basic modce be simple recipies like "on desktop", "at the top" "panel" etc. -* right click menu on gadgets needs to include gadcon and shelf menu * middle mouse on gadgets as a quick move/resize thing? * on xrandr screen res change e moves and resizes windows to fit in the new resolution. this is good and bad. if some other app temporarily changes diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index 156dd22f5..d9c0df135 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -490,6 +490,17 @@ e_gadcon_canvas_zone_geometry_get(E_Gadcon *gc, int *x, int *y, int *w, int *h) return 1; } +EAPI void +e_gadcon_util_menu_attach_func_set(E_Gadcon *gc, + void (*func) (void *data, E_Menu *menu), + void *data) +{ + E_OBJECT_CHECK(gc); + E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE); + gc->menu_attach.func = func; + gc->menu_attach.data = data; +} + EAPI E_Gadcon_Client * e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *style, Evas_Object *base_obj) { @@ -1001,14 +1012,6 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int f if (gcc->resizable) e_menu_item_toggle_set(mi, 1); e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_resizable, gcc); - mi = e_menu_item_new(menu); - if (gcc->o_control) - e_menu_item_label_set(mi, _("Stop editing")); - else - e_menu_item_label_set(mi, _("Begin editing")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/edit"); - e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_edit, gcc); - mi = e_menu_item_new(menu); e_menu_item_separator_set(mi, 1); @@ -1016,6 +1019,14 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int f e_menu_item_label_set(mi, _("Remove this gadget")); e_util_menu_item_edje_icon_set(mi, "enlightenment/remove"); e_menu_item_callback_set(mi, _e_gadcon_client_cb_menu_remove, gcc); + + if (gcc->gadcon->menu_attach.func) + { + mi = e_menu_item_new(menu); + e_menu_item_separator_set(mi, 1); + + gcc->gadcon->menu_attach.func(gcc->gadcon->menu_attach.data, menu); + } } static void diff --git a/src/bin/e_gadcon.h b/src/bin/e_gadcon.h index a1a4f9cdc..fa625e6fc 100644 --- a/src/bin/e_gadcon.h +++ b/src/bin/e_gadcon.h @@ -70,6 +70,10 @@ struct _E_Gadcon Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style); void *data; } frame_request; + struct { + void (*func) (void *data, E_Menu *menu); + void *data; + } menu_attach; E_Config_Dialog *config_dialog; unsigned char editing : 1; @@ -147,7 +151,8 @@ EAPI void e_gadcon_zone_set(E_Gadcon *gc, E_Zone *zone); EAPI E_Zone *e_gadcon_zone_get(E_Gadcon *gc); EAPI void e_gadcon_ecore_evas_set(E_Gadcon *gc, Ecore_Evas *ee); EAPI int e_gadcon_canvas_zone_geometry_get(E_Gadcon *gc, int *x, int *y, int *w, int *h); - +EAPI void e_gadcon_util_menu_attach_func_set(E_Gadcon *gc, void (*func) (void *data, E_Menu *menu), void *data); + EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *style, Evas_Object *base_obj); EAPI void e_gadcon_client_edit_begin(E_Gadcon_Client *gcc); EAPI void e_gadcon_client_edit_end(E_Gadcon_Client *gcc); diff --git a/src/bin/e_shelf.c b/src/bin/e_shelf.c index 0104f4aa8..fa4b996f9 100644 --- a/src/bin/e_shelf.c +++ b/src/bin/e_shelf.c @@ -8,6 +8,13 @@ static const char *_e_shelf_orient_string_get(E_Shelf *es); static void _e_shelf_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h); static void _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h); static Evas_Object *_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style); +static void _e_shelf_cb_menu_config(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_shelf_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_shelf_cb_menu_contents(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_shelf_cb_confirm_dialog_yes(void *data); +static void _e_shelf_cb_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_shelf_menu_append(E_Shelf *es, E_Menu *mn); +static void _e_shelf_cb_menu_items_append(void *data, E_Menu *mn); static void _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_shelf_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info); @@ -149,6 +156,9 @@ e_shelf_zone_new(E_Zone *zone, const char *name, const char *style, int popup, i edje_object_message_signal_process(es->o_base); e_gadcon_zone_set(es->gadcon, zone); e_gadcon_ecore_evas_set(es->gadcon, es->ee); + e_gadcon_util_menu_attach_func_set(es->gadcon, + _e_shelf_cb_menu_items_append, + es); shelves = evas_list_append(shelves, es); return es; @@ -703,6 +713,44 @@ _e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *styl return o; } +static void +_e_shelf_menu_append(E_Shelf *es, E_Menu *mn) +{ + E_Menu_Item *mi; + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Shelf Location and Appearance Settings")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/config"); + e_menu_item_callback_set(mi, _e_shelf_cb_menu_config, es); + + mi = e_menu_item_new(mn); + if (es->gadcon->editing) + e_menu_item_label_set(mi, _("Stop Moving/Resizing Items")); + else + e_menu_item_label_set(mi, _("Begin Moving/Resizing Items")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/edit"); + e_menu_item_callback_set(mi, _e_shelf_cb_menu_edit, es); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Configure Shelf Contents")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/config"); + e_menu_item_callback_set(mi, _e_shelf_cb_menu_contents, es); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Delete this Shelf")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/delete"); + e_menu_item_callback_set(mi, _e_shelf_cb_menu_delete, es); +} + +static void +_e_shelf_cb_menu_items_append(void *data, E_Menu *mn) +{ + E_Shelf *es; + + es = data; + _e_shelf_menu_append(es, mn); +} + static void _e_shelf_cb_menu_config(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -784,36 +832,14 @@ _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_inf if (ev->button == 3) { E_Menu *mn; - E_Menu_Item *mi; int cx, cy, cw, ch; mn = e_menu_new(); e_menu_post_deactivate_callback_set(mn, _e_shelf_cb_menu_post, es); es->menu = mn; + + _e_shelf_menu_append(es, mn); - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Shelf Location and Appearance Settings")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/config"); - e_menu_item_callback_set(mi, _e_shelf_cb_menu_config, es); - - mi = e_menu_item_new(mn); - if (es->gadcon->editing) - e_menu_item_label_set(mi, _("Stop Moving/Resizing Items")); - else - e_menu_item_label_set(mi, _("Begin Moving/Resizing Items")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/edit"); - e_menu_item_callback_set(mi, _e_shelf_cb_menu_edit, es); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Configure Shelf Contents")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/config"); - e_menu_item_callback_set(mi, _e_shelf_cb_menu_contents, es); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Delete this Shelf")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/delete"); - e_menu_item_callback_set(mi, _e_shelf_cb_menu_delete, es); - e_gadcon_canvas_zone_geometry_get(es->gadcon, &cx, &cy, &cw, &ch); e_menu_activate_mouse(mn, e_util_zone_current_get(e_manager_current_get()),