From 0a5e26b82b62dddf2c0d37863957bcb55aa97b26 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 20 Aug 2006 04:48:27 +0000 Subject: [PATCH] jamse brown ... errr... gadman is dead. basically if moduels wish to put objects on a desktop - they now will have to DIY and look after themselves. until we have gadcons with "free" layout that do similar stuff - but this simply means module authors need to d a bit more work. gadman code is unmaintained and a burden - thus removed. also borders and e_win's have their own pointers now - this should nuke the stuck pointer bug... :) SVN revision: 24925 --- src/bin/Makefile.am | 2 - src/bin/e_actions.c | 59 +- src/bin/e_border.c | 40 +- src/bin/e_border.h | 1 + src/bin/e_config.c | 3 - src/bin/e_container.c | 6 - src/bin/e_container.h | 1 - src/bin/e_gadman.c | 2097 --------------------------------- src/bin/e_gadman.h | 128 -- src/bin/e_includes.h | 1 - src/bin/e_init.c | 2 +- src/bin/e_int_config_cursor.c | 4 +- src/bin/e_ipc_handlers.h | 2 +- src/bin/e_main.c | 2 - src/bin/e_manager.c | 2 +- src/bin/e_maximize.c | 8 - src/bin/e_place.c | 60 - src/bin/e_pointer.c | 200 ++-- src/bin/e_pointer.h | 2 +- src/bin/e_resist.c | 28 - src/bin/e_test.c | 149 --- src/bin/e_win.c | 4 +- src/bin/e_win.h | 2 + 23 files changed, 134 insertions(+), 2669 deletions(-) delete mode 100644 src/bin/e_gadman.c delete mode 100644 src/bin/e_gadman.h diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 1e8b090ec..278455864 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -54,7 +54,6 @@ e_place.h \ e_resist.h \ e_startup.h \ e_hints.h \ -e_gadman.h \ e_signals.h \ e_xinerama.h \ e_table.h \ @@ -203,7 +202,6 @@ e_place.c \ e_resist.c \ e_startup.c \ e_hints.c \ -e_gadman.c \ e_signals.c \ e_xinerama.c \ e_table.c \ diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index da9c94615..ab3fdf21a 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -1351,49 +1351,6 @@ ACT_FN_GO_KEY(winlist) } } -/***************************************************************************/ -ACT_FN_GO(edit_mode) -{ - if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - if (obj->type != E_CONTAINER_TYPE) - { - obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - } - e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_EDIT); - e_gadcon_all_edit_begin(); -} -ACT_FN_END(edit_mode) -{ - if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - if (obj->type != E_CONTAINER_TYPE) - { - obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - } - e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_NORMAL); - e_gadcon_all_edit_end(); -} - -/***************************************************************************/ -ACT_FN_GO(edit_mode_toggle) -{ - if (!obj) obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - if (obj->type != E_CONTAINER_TYPE) - { - obj = E_OBJECT(e_container_current_get(e_manager_current_get())); - if (!obj) return; - } - if (e_gadman_mode_get(((E_Container *)obj)->gadman) == E_GADMAN_MODE_NORMAL) - e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_EDIT); - else - e_gadman_mode_set(((E_Container *)obj)->gadman, E_GADMAN_MODE_NORMAL); -} -/***************************************************************************/ - /***************************************************************************/ ACT_FN_GO(desk_deskshow_toggle) { @@ -1476,10 +1433,8 @@ ACT_FN_GO(pointer_resize_push) return; if (bd->zone) man = bd->zone->container->manager; + e_pointer_type_push(bd->pointer, bd, params); } - if (!man) man = e_manager_current_get(); - if (!man) return; - e_pointer_type_push(man->pointer, obj, params); } ACT_FN_GO(pointer_resize_pop) @@ -1497,10 +1452,8 @@ ACT_FN_GO(pointer_resize_pop) return; if (bd->zone) man = (E_Manager *)bd->zone->container->manager; + e_pointer_type_pop(bd->pointer, bd, params); } - if (!man) man = e_manager_current_get(); - if (!man) return; - e_pointer_type_pop(man->pointer, obj, params); } /***************************************************************************/ @@ -1812,14 +1765,6 @@ e_actions_init(void) ACT_GO_MOUSE(winlist); ACT_GO_KEY(winlist); - ACT_GO(edit_mode); - ACT_END(edit_mode); - - /* edit_mode */ - ACT_GO(edit_mode_toggle); - e_register_action_predef_name(_("Gadgets"), _("Toggle Edit Mode"), "edit_mode_toggle", NULL, - EDIT_RESTRICT_ACTION | EDIT_RESTRICT_PARAMS, 0); - /* restart */ ACT_GO(restart); e_register_action_predef_name(_("Enlightenment"), _("Restart"), "restart", NULL, diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 9e3e86d1e..973524f0e 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -473,6 +473,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map, int internal) focus_stack = evas_list_append(focus_stack, bd); + bd->pointer = e_pointer_window_new(bd->win, 0); return bd; } @@ -2973,6 +2974,7 @@ e_border_resize_limit(E_Border *bd, int *w, int *h) static void _e_border_free(E_Border *bd) { + e_object_del(E_OBJECT(bd->pointer)); if (bd->focused) { if (e_config->focus_revert_on_hide_or_close) @@ -3189,8 +3191,6 @@ _e_border_del(E_Border *bd) ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL); } - /* remove all pointers for this win. */ - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, NULL); e_container_border_remove(bd); if (bd->parent) { @@ -6981,28 +6981,28 @@ _e_border_pointer_resize_begin(E_Border *bd) switch (bd->resize_mode) { case RESIZE_TL: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_tl"); + e_pointer_type_push(bd->pointer, bd, "resize_tl"); break; case RESIZE_T: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_t"); + e_pointer_type_push(bd->pointer, bd, "resize_t"); break; case RESIZE_TR: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_tr"); + e_pointer_type_push(bd->pointer, bd, "resize_tr"); break; case RESIZE_R: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_r"); + e_pointer_type_push(bd->pointer, bd, "resize_r"); break; case RESIZE_BR: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_br"); + e_pointer_type_push(bd->pointer, bd, "resize_br"); break; case RESIZE_B: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_b"); + e_pointer_type_push(bd->pointer, bd, "resize_b"); break; case RESIZE_BL: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_bl"); + e_pointer_type_push(bd->pointer, bd, "resize_bl"); break; case RESIZE_L: - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "resize_l"); + e_pointer_type_push(bd->pointer, bd, "resize_l"); break; } } @@ -7013,28 +7013,28 @@ _e_border_pointer_resize_end(E_Border *bd) switch (bd->resize_mode) { case RESIZE_TL: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_tl"); + e_pointer_type_pop(bd->pointer, bd, "resize_tl"); break; case RESIZE_T: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_t"); + e_pointer_type_pop(bd->pointer, bd, "resize_t"); break; case RESIZE_TR: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_tr"); + e_pointer_type_pop(bd->pointer, bd, "resize_tr"); break; case RESIZE_R: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_r"); + e_pointer_type_pop(bd->pointer, bd, "resize_r"); break; case RESIZE_BR: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_br"); + e_pointer_type_pop(bd->pointer, bd, "resize_br"); break; case RESIZE_B: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_b"); + e_pointer_type_pop(bd->pointer, bd, "resize_b"); break; case RESIZE_BL: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_bl"); + e_pointer_type_pop(bd->pointer, bd, "resize_bl"); break; case RESIZE_L: - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "resize_l"); + e_pointer_type_pop(bd->pointer, bd, "resize_l"); break; } } @@ -7042,11 +7042,11 @@ _e_border_pointer_resize_end(E_Border *bd) static void _e_border_pointer_move_begin(E_Border *bd) { - e_pointer_type_push(bd->zone->container->manager->pointer, bd, "move"); + e_pointer_type_push(bd->pointer, bd, "move"); } static void _e_border_pointer_move_end(E_Border *bd) { - e_pointer_type_pop(bd->zone->container->manager->pointer, bd, "move"); + e_pointer_type_pop(bd->pointer, bd, "move"); } diff --git a/src/bin/e_border.h b/src/bin/e_border.h index c7ea68a80..c24aff8b5 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -444,6 +444,7 @@ struct _E_Border Evas_List *transients; E_App *app; + E_Pointer *pointer; }; struct _E_Border_Pending_Move_Resize diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 8acecc25b..ed66fba59 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -857,9 +857,6 @@ e_config_init(void) CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "Tab", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0, "winlist", "prev"); - CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "g", - E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, - "edit_mode_toggle", NULL); CFG_KEYBIND(E_BINDING_CONTEXT_ANY, "End", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, "restart", NULL); diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 9953b39b8..eaceba850 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -174,8 +174,6 @@ e_container_new(E_Manager *man) { zone = e_zone_new(con, 0, 0, 0, con->w, con->h); } - con->gadman = e_gadman_new(con); - return con; } @@ -965,7 +963,6 @@ _e_container_free(E_Container *con) l = l->next; e_object_del(E_OBJECT(tmp->data)); } - if (con->gadman) e_object_del(E_OBJECT(con->gadman)); con->manager->containers = evas_list_remove(con->manager->containers, con); e_canvas_del(con->bg_ecore_evas); ecore_evas_free(con->bg_ecore_evas); @@ -1150,7 +1147,6 @@ _e_container_resize_handle(E_Container *con) ev->container = con; e_object_ref(E_OBJECT(con)); - e_gadman_all_save(con->gadman); e_xinerama_update(); screens = (Evas_List *)e_xinerama_screens_get(); if (screens) @@ -1186,8 +1182,6 @@ _e_container_resize_handle(E_Container *con) e_shelf_zone_move_resize_handle(zone); } - e_gadman_container_resize(con->gadman); - ecore_event_add(E_EVENT_CONTAINER_RESIZE, ev, _e_container_event_container_resize_free, NULL); for (i = 0; i < 7; i++) diff --git a/src/bin/e_container.h b/src/bin/e_container.h index d519c5cd7..e07aa32cf 100644 --- a/src/bin/e_container.h +++ b/src/bin/e_container.h @@ -35,7 +35,6 @@ struct _E_Container int x, y, w, h; char visible : 1; E_Manager *manager; - E_Gadman *gadman; unsigned int num; const char *name; diff --git a/src/bin/e_gadman.c b/src/bin/e_gadman.c deleted file mode 100644 index 8c6d1d284..000000000 --- a/src/bin/e_gadman.c +++ /dev/null @@ -1,2097 +0,0 @@ -/* - * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 - */ -#include "e.h" - -/* FIXME: corner case if module is sized to full screen... cant stop edit or */ -/* re-enter edit mode (cant access root menu) */ -/* FIXME: resist can still jump on top of other gads... */ - -/* local subsystem functions */ - -typedef struct _Gadman_Client_Config Gadman_Client_Config; - -struct _Gadman_Client_Config -{ - struct { - int x, y, w, h; - } pos; - struct { - int l, r, t, b; - } pad; - int w, h; - int edge; - int zone; - int use_autow, use_autoh; - int allow_overlap, always_on_top; - struct { - int w, h; - Evas_List *others; - } res; -}; - -static void _e_gadman_free(E_Gadman *gm); -static void _e_gadman_client_free(E_Gadman_Client *gmc); -static void _e_gadman_client_edit_begin(E_Gadman_Client *gmc); -static void _e_gadman_client_edit_end(E_Gadman_Client *gmc); -static void _e_gadman_client_overlap_deny(E_Gadman_Client *gmc); -static void _e_gadman_client_down_store(E_Gadman_Client *gmc); -static int _e_gadman_client_is_being_modified(E_Gadman_Client *gmc); -static void _e_gadman_client_geometry_to_align(E_Gadman_Client *gmc); -static void _e_gadman_client_aspect_enforce(E_Gadman_Client *gmc, double cx, double cy, int use_horiz); -static void _e_gadman_client_geometry_apply(E_Gadman_Client *gmc); -static void _e_gadman_client_callback_call(E_Gadman_Client *gmc, E_Gadman_Change change); - -static void _e_gadman_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info); -static void _e_gadman_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info); -static void _e_gadman_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info); -static void _e_gadman_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info); - -static void _e_gadman_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_move_stop(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emission, const char *source); - -static void _e_gadman_cb_menu_end(void *data, E_Menu *m); - -static void _e_gadman_cb_half_width(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_full_width(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_center_horiz(void *data, E_Menu *m, E_Menu_Item *mi); - -static void _e_gadman_cb_half_height(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi); - -static void _e_gadman_cb_allow_overlap(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_always_on_top(void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_gadman_cb_end_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi); - -static void _e_gadman_config_free(Gadman_Client_Config *cf); -static void _e_gadman_client_geom_store(E_Gadman_Client *gmc); - -static E_Config_DD *gadman_config_edd = NULL; - -/* externally accessible functions */ -EAPI int -e_gadman_init(void) -{ - gadman_config_edd = E_CONFIG_DD_NEW("Gadman_Client_Config", Gadman_Client_Config); -#undef T -#undef D -#define T Gadman_Client_Config -#define D gadman_config_edd - E_CONFIG_VAL(D, T, pos.x, INT); - E_CONFIG_VAL(D, T, pos.y, INT); - E_CONFIG_VAL(D, T, pos.w, INT); - E_CONFIG_VAL(D, T, pos.h, INT); - E_CONFIG_VAL(D, T, pad.l, INT); - E_CONFIG_VAL(D, T, pad.r, INT); - E_CONFIG_VAL(D, T, pad.t, INT); - E_CONFIG_VAL(D, T, pad.b, INT); - E_CONFIG_VAL(D, T, w, INT); - E_CONFIG_VAL(D, T, h, INT); - E_CONFIG_VAL(D, T, edge, INT); - E_CONFIG_VAL(D, T, zone, INT); - E_CONFIG_VAL(D, T, use_autow, INT); - E_CONFIG_VAL(D, T, use_autoh, INT); - E_CONFIG_VAL(D, T, allow_overlap, INT); - E_CONFIG_VAL(D, T, always_on_top, INT); - E_CONFIG_VAL(D, T, res.w, INT); - E_CONFIG_VAL(D, T, res.h, INT); - E_CONFIG_LIST(D, T, res.others, gadman_config_edd); - return 1; -} - -EAPI int -e_gadman_shutdown(void) -{ - E_CONFIG_DD_FREE(gadman_config_edd); - gadman_config_edd = NULL; - return 1; -} - -EAPI E_Gadman * -e_gadman_new(E_Container *con) -{ - E_Gadman *gm; - - gm = E_OBJECT_ALLOC(E_Gadman, E_GADMAN_TYPE, _e_gadman_free); - if (!gm) return NULL; - gm->container = con; - return gm; -} - -EAPI void -e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode) -{ - Evas_List *l; - - E_OBJECT_CHECK(gm); - E_OBJECT_TYPE_CHECK(gm, E_GADMAN_TYPE); - if (gm->mode == mode) return; - gm->mode = mode; - if (gm->mode == E_GADMAN_MODE_EDIT) - { - for (l = gm->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - _e_gadman_client_edit_begin(gmc); - } - } - else if (gm->mode == E_GADMAN_MODE_NORMAL) - { - for (l = gm->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - _e_gadman_client_edit_end(gmc); - } - } -} - -EAPI E_Gadman_Mode -e_gadman_mode_get(E_Gadman *gm) -{ - E_OBJECT_CHECK_RETURN(gm, E_GADMAN_MODE_NORMAL); - E_OBJECT_TYPE_CHECK_RETURN(gm, E_GADMAN_TYPE, E_GADMAN_MODE_NORMAL); - return gm->mode; -} - -EAPI void -e_gadman_all_save(E_Gadman *gm) -{ - Evas_List *l; - - E_OBJECT_CHECK(gm); - for (l = gm->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - e_gadman_client_save(gmc); - } -} - -EAPI void -e_gadman_container_resize(E_Gadman *gm) -{ - Evas_List *l; - - E_OBJECT_CHECK(gm); - for (l = gm->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - e_gadman_client_load(gmc); - } -} - -EAPI E_Gadman_Client * -e_gadman_client_new(E_Gadman *gm) -{ - E_Gadman_Client *gmc; - E_OBJECT_CHECK_RETURN(gm, NULL); - E_OBJECT_TYPE_CHECK_RETURN(gm, E_GADMAN_TYPE, NULL); - - gmc = E_OBJECT_ALLOC(E_Gadman_Client, E_GADMAN_CLIENT_TYPE, _e_gadman_client_free); - if (!gmc) return NULL; - gmc->gadman = gm; - gmc->policy = E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE; - gmc->zone = e_zone_current_get(gm->container); - gmc->edge = E_GADMAN_EDGE_TOP; - gmc->minw = 1; - gmc->minh = 1; - gmc->maxw = 0; - gmc->maxh = 0; - gmc->ax = 0.0; - gmc->ay = 0.0; - gmc->mina = 0.0; - gmc->maxa = 9999999.0; - gm->clients = evas_list_append(gm->clients, gmc); - return gmc; -} - -EAPI void -e_gadman_client_save(E_Gadman_Client *gmc) -{ - Gadman_Client_Config *cf, *cf2; - Evas_List *l; - char buf[1024]; - int found_res = 0; - - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - /* save all values */ - if (!gmc->config) - { - cf = calloc(1, sizeof(Gadman_Client_Config)); - gmc->config = cf; - } - cf = gmc->config; - _e_gadman_client_geom_store(gmc); - cf->res.w = gmc->zone->w; - cf->res.h = gmc->zone->h; - snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance); - for (l = cf->res.others; l; l = l->next) - { - cf2 = (Gadman_Client_Config *)l->data; - if ((cf2->res.w == cf->res.w) && (cf2->res.h == cf->res.h)) - { - *cf2 = *cf; - cf2->res.others = NULL; - found_res = 1; - break; - } - } - if (!found_res) - { - cf2 = calloc(1, sizeof(Gadman_Client_Config)); - cf->res.others = evas_list_prepend(cf->res.others, cf2); - *cf2 = *cf; - cf2->res.others = NULL; - } - e_config_domain_save(buf, gadman_config_edd, cf); -} - -EAPI void -e_gadman_client_load(E_Gadman_Client *gmc) -{ - Gadman_Client_Config *cf, *cf2; - Evas_List *l; - char buf[1024]; - - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if (gmc->config) - { - _e_gadman_config_free(gmc->config); - gmc->config = NULL; - } - snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance); - cf = e_config_domain_load(buf, gadman_config_edd); - if (cf) - { - E_Zone *zone; - - for (l = cf->res.others; l; l = l->next) - { - cf2 = (Gadman_Client_Config *)l->data; - zone = e_container_zone_number_get(gmc->zone->container, cf2->zone); - if (zone) - { - if ((zone->w == cf2->res.w) && (zone->h == cf2->res.h)) - { - l = cf->res.others; - *cf = *cf2; - cf->res.others = l; - break; - } - } - } - E_CONFIG_LIMIT(cf->pos.x, 0, 10000); - E_CONFIG_LIMIT(cf->pos.y, 0, 10000); - E_CONFIG_LIMIT(cf->pos.w, 1, 10000); - E_CONFIG_LIMIT(cf->pos.h, 1, 10000); - E_CONFIG_LIMIT(cf->pad.l, 0, 1000); - E_CONFIG_LIMIT(cf->pad.r, 0, 1000); - E_CONFIG_LIMIT(cf->pad.t, 0, 1000); - E_CONFIG_LIMIT(cf->pad.b, 0, 1000); - E_CONFIG_LIMIT(cf->w, 0, 10000); - E_CONFIG_LIMIT(cf->h, 0, 10000); - E_CONFIG_LIMIT(cf->edge, E_GADMAN_EDGE_LEFT, E_GADMAN_EDGE_BOTTOM); - if (cf->pos.w != cf->w) - gmc->ax = (double)(cf->pos.x) / (double)(cf->pos.w - cf->w); - else - gmc->ax = 0.0; - if (cf->pos.h != cf->h) - gmc->ay = (double)(cf->pos.y) / (double)(cf->pos.h - cf->h); - else - gmc->ay = 0.0; - gmc->w = cf->w; - gmc->w -= (cf->pad.l + cf->pad.r); - gmc->w += (gmc->pad.l + gmc->pad.r); - gmc->h = cf->h; - gmc->h -= (cf->pad.t + cf->pad.b); - gmc->h += (gmc->pad.t + gmc->pad.b); - gmc->edge = cf->edge; - gmc->use_autow = cf->use_autow; - gmc->use_autoh = cf->use_autoh; - gmc->allow_overlap = cf->allow_overlap; - if (gmc->allow_overlap) - gmc->policy |= E_GADMAN_POLICY_ALLOW_OVERLAP; - gmc->always_on_top = cf->always_on_top; - if (gmc->always_on_top) - gmc->policy |= E_GADMAN_POLICY_ALWAYS_ON_TOP; - zone = e_container_zone_number_get(gmc->zone->container, cf->zone); - if (zone) gmc->zone = zone; - if (gmc->use_autow) - { - gmc->w = gmc->autow; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - } - if (gmc->use_autoh) - { - gmc->h = gmc->autoh; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - } - if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; - if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; -// gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); -// gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - if (cf->pos.w != cf->w) - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - else - gmc->x = gmc->zone->x; - if (cf->pos.h != cf->h) - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - else - gmc->y = gmc->zone->y; - gmc->config = cf; - } - else - { - cf = calloc(1, sizeof(Gadman_Client_Config)); - gmc->config = cf; - _e_gadman_client_geom_store(gmc); - } - _e_gadman_client_overlap_deny(gmc); - e_object_ref(E_OBJECT(gmc)); - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE); - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_EDGE); - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - e_object_unref(E_OBJECT(gmc)); - - if (gmc->gadman->mode == E_GADMAN_MODE_EDIT) - _e_gadman_client_edit_begin(gmc); -} - -EAPI void -e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if (gmc->domain) evas_stringshare_del(gmc->domain); - gmc->domain = evas_stringshare_add(domain); - gmc->instance = instance; -} - -EAPI void -e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if (zone == gmc->zone) return; - gmc->zone = zone; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - e_object_ref(E_OBJECT(gmc)); - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE); - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - e_object_unref(E_OBJECT(gmc)); -} - -EAPI void -e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->policy = pol; - - if (gmc->control_object) - { - if (gmc->policy & E_GADMAN_POLICY_HSIZE) - edje_object_signal_emit(gmc->control_object, "hsize", "on"); - else - edje_object_signal_emit(gmc->control_object, "hsize", "off"); - if (gmc->policy & E_GADMAN_POLICY_VSIZE) - edje_object_signal_emit(gmc->control_object, "vsize", "on"); - else - edje_object_signal_emit(gmc->control_object, "vsize", "off"); - if (gmc->policy & (E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE)) - edje_object_signal_emit(gmc->control_object, "move", "on"); - else - edje_object_signal_emit(gmc->control_object, "move", "off"); - } - -} - -EAPI void -e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if ((gmc->minw == minw) && (gmc->minh == minh)) return; - gmc->minw = minw; - gmc->minh = minh; - if (gmc->minw > gmc->w) - { - gmc->w = gmc->minw; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - } - if (gmc->minh > gmc->h) - { - gmc->h = gmc->minh; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - } - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if ((gmc->maxw == maxw) && (gmc->maxh == maxh)) return; - gmc->maxw = maxw; - gmc->maxh = maxh; - if (gmc->maxw < gmc->w) - { - gmc->w = gmc->maxw; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - } - if (gmc->maxh < gmc->h) - { - gmc->h = gmc->maxh; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - } - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if ((gmc->ax == xalign) && (gmc->ay == yalign)) return; - gmc->ax = xalign; - gmc->ay = yalign; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->mina = mina; - gmc->maxa = maxa; -} - -EAPI void -e_gadman_client_padding_set(E_Gadman_Client *gmc, int l, int r, int t, int b) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->pad.l = l; - gmc->pad.r = r; - gmc->pad.t = t; - gmc->pad.b = b; -} - -EAPI void -e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->autow = autow; - gmc->autoh = autoh; - if (gmc->use_autow) - { - gmc->w = gmc->autow; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - } - if (gmc->use_autoh) - { - gmc->h = gmc->autoh; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - } - /* FIXME: check for overlap and fix */ -/* - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - // blah - } - } - } - */ - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->edge = edge; -} - -EAPI E_Gadman_Edge -e_gadman_client_edge_get(E_Gadman_Client *gmc) -{ - E_OBJECT_CHECK_RETURN(gmc, E_GADMAN_EDGE_TOP); - E_OBJECT_TYPE_CHECK_RETURN(gmc, E_GADMAN_CLIENT_TYPE, E_GADMAN_EDGE_TOP); - return gmc->edge; -} - -EAPI void -e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if (x) *x = gmc->x; - if (y) *y = gmc->y; - if (w) *w = gmc->w; - if (h) *h = gmc->h; -} - -EAPI void -e_gadman_client_user_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if ((gmc->w == w) && (gmc->h == h)) return; - gmc->w = w; - if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - gmc->h = h; - if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h) -{ - int re_adjust = 0; - - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - if ((gmc->w == w) && (gmc->h == h)) return; - gmc->w = w; - if (gmc->w > gmc->zone->w) - { - gmc->w = gmc->zone->w; - re_adjust = 1; - } - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); - gmc->h = h; - if (gmc->h > gmc->zone->h) - { - gmc->h = gmc->zone->h; - re_adjust = 1; - } - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); - _e_gadman_client_geometry_apply(gmc); - if (re_adjust) - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -EAPI void -e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data) -{ - E_OBJECT_CHECK(gmc); - E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); - gmc->func = func; - gmc->data = data; -} - -EAPI E_Menu * -e_gadman_client_menu_new(E_Gadman_Client *gmc) -{ - E_Menu *m; - E_Menu_Item *mi; - int disallow, seperator; - const char *s; - - E_OBJECT_CHECK_RETURN(gmc, NULL); - E_OBJECT_TYPE_CHECK_RETURN(gmc, E_GADMAN_CLIENT_TYPE, NULL); - m = e_menu_new(); - - gmc->menu = m; - - seperator = 0; - if (gmc->policy & E_GADMAN_POLICY_HSIZE) - { - seperator = 1; - if (gmc->autow > 0) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Automatic Width")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, gmc->use_autow); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "auto_width"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_auto_width, gmc); - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Half Screen Width")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "half_width"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_half_width, gmc); - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Full Screen Width")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "full_width"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_full_width, gmc); - } - disallow = (gmc->policy & E_GADMAN_POLICY_EDGES) - && ((gmc->edge == E_GADMAN_EDGE_LEFT) || (gmc->edge == E_GADMAN_EDGE_RIGHT)); - if ((gmc->policy & E_GADMAN_POLICY_HMOVE) && !(disallow)) - { - seperator = 1; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Center Horizontally")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "center_horiz"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_center_horiz, gmc); - } - if (seperator) - { - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - seperator = 0; - if (gmc->policy & E_GADMAN_POLICY_VSIZE) - { - seperator = 1; - if (gmc->autoh > 0) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Automatic Height")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, gmc->use_autoh); - s = e_path_find(path_icons, "default.edj"), - e_menu_item_icon_edje_set(mi, s, "auto_height"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_auto_height, gmc); - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Half Screen Height")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "half_height"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_half_height, gmc); - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Full Screen Height")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "full_height"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_full_height, gmc); - } - disallow = (gmc->policy & E_GADMAN_POLICY_EDGES) - && ((gmc->edge == E_GADMAN_EDGE_TOP) || (gmc->edge == E_GADMAN_EDGE_BOTTOM)); - if ((gmc->policy & E_GADMAN_POLICY_VMOVE) && !(disallow)) - { - seperator = 1; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Center Vertically")); - s = e_path_find(path_icons, "default.edj"); - e_menu_item_icon_edje_set(mi, s, "center_vert"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_center_vert, gmc); - } - if (seperator) - { - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - /* user configurable policy flags */ - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Allow Overlap")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, gmc->allow_overlap); - s = e_path_find(path_icons, "default.edj"), - e_menu_item_icon_edje_set(mi, s, "allow_overlap"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_allow_overlap, gmc); -/* Not used yet - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Always On Top")); - e_menu_item_check_set(mi, 1); - e_menu_item_toggle_set(mi, gmc->always_on_top); - s = e_path_find(path_icons, "default.edj"), - e_menu_item_icon_edje_set(mi, s, "always_on_top"); - if (s) evas_stringshare_del(s); - e_menu_item_callback_set(mi, _e_gadman_cb_always_on_top, gmc); -*/ - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("End Edit Mode")); - e_menu_item_callback_set(mi, _e_gadman_cb_end_edit_mode, gmc); - - return m; -} - -/* local subsystem functions */ -static void -_e_gadman_free(E_Gadman *gm) -{ - free(gm); -} - -static void -_e_gadman_client_free(E_Gadman_Client *gmc) -{ - if (gmc->menu) e_object_del(E_OBJECT(gmc->menu)); - if (gmc->control_object) evas_object_del(gmc->control_object); - if (gmc->event_object) evas_object_del(gmc->event_object); - gmc->gadman->clients = evas_list_remove(gmc->gadman->clients, gmc); - if (gmc->domain) evas_stringshare_del(gmc->domain); - _e_gadman_config_free(gmc->config); - free(gmc); -} - -static void -_e_gadman_client_edit_begin(E_Gadman_Client *gmc) -{ - gmc->control_object = edje_object_add(gmc->gadman->container->bg_evas); - evas_object_layer_set(gmc->control_object, 100); - evas_object_move(gmc->control_object, gmc->x, gmc->y); - evas_object_resize(gmc->control_object, gmc->w, gmc->h); - e_theme_edje_object_set(gmc->control_object, "base/theme/gadman", - "gadman/control"); - edje_object_signal_callback_add(gmc->control_object, "move_start", "", - _e_gadman_cb_signal_move_start, gmc); - edje_object_signal_callback_add(gmc->control_object, "move_stop", "", - _e_gadman_cb_signal_move_stop, gmc); - edje_object_signal_callback_add(gmc->control_object, "move_go", "", - _e_gadman_cb_signal_move_go, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_start", "left", - _e_gadman_cb_signal_resize_left_start, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_stop", "left", - _e_gadman_cb_signal_resize_left_stop, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_go", "left", - _e_gadman_cb_signal_resize_left_go, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_start", "right", - _e_gadman_cb_signal_resize_right_start, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_stop", "right", - _e_gadman_cb_signal_resize_right_stop, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_go", "right", - _e_gadman_cb_signal_resize_right_go, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_start", "up", - _e_gadman_cb_signal_resize_up_start, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_stop", "up", - _e_gadman_cb_signal_resize_up_stop, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_go", "up", - _e_gadman_cb_signal_resize_up_go, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_start", "down", - _e_gadman_cb_signal_resize_down_start, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_stop", "down", - _e_gadman_cb_signal_resize_down_stop, gmc); - edje_object_signal_callback_add(gmc->control_object, "resize_go", "down", - _e_gadman_cb_signal_resize_down_go, gmc); - gmc->event_object = evas_object_rectangle_add(gmc->gadman->container->bg_evas); - evas_object_color_set(gmc->event_object, 0, 0, 0, 0); - evas_object_repeat_events_set(gmc->event_object, 1); - evas_object_layer_set(gmc->event_object, 100); - evas_object_move(gmc->event_object, gmc->x, gmc->y); - evas_object_resize(gmc->event_object, gmc->w, gmc->h); - evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_DOWN, _e_gadman_cb_mouse_down, gmc); - evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_UP, _e_gadman_cb_mouse_up, gmc); - evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_IN, _e_gadman_cb_mouse_in, gmc); - evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_OUT, _e_gadman_cb_mouse_out, gmc); - - if (gmc->policy & E_GADMAN_POLICY_HSIZE) - edje_object_signal_emit(gmc->control_object, "hsize", "on"); - else - edje_object_signal_emit(gmc->control_object, "hsize", "off"); - if (gmc->policy & E_GADMAN_POLICY_VSIZE) - edje_object_signal_emit(gmc->control_object, "vsize", "on"); - else - edje_object_signal_emit(gmc->control_object, "vsize", "off"); - if (gmc->policy & (E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE)) - edje_object_signal_emit(gmc->control_object, "move", "on"); - else - edje_object_signal_emit(gmc->control_object, "move", "off"); - - evas_object_clip_set(gmc->event_object, gmc->zone->bg_clip_object); - evas_object_clip_set(gmc->control_object, gmc->zone->bg_clip_object); - evas_object_show(gmc->event_object); - evas_object_show(gmc->control_object); -} - -static void -_e_gadman_client_edit_end(E_Gadman_Client *gmc) -{ - e_gadman_client_save(gmc); - if (gmc->moving) e_move_end(); - if ((gmc->resizing_l) || (gmc->resizing_r) || - (gmc->resizing_u) || (gmc->resizing_d)) - e_resize_end(); - gmc->moving = 0; - gmc->resizing_l = 0; - gmc->resizing_r = 0; - gmc->resizing_u = 0; - gmc->resizing_d = 0; - evas_object_del(gmc->control_object); - gmc->control_object = NULL; - evas_object_del(gmc->event_object); - gmc->event_object = NULL; -} - -static void -_e_gadman_client_overlap_deny(E_Gadman_Client *gmc) -{ - Evas_List *l; - Evas_Coord ox, oy; - int ok = 0; - int iterate = 0; - - ox = gmc->x; - oy = gmc->y; - ok = 0; - if ((gmc->policy & 0xff) == E_GADMAN_POLICY_EDGES) - { - if ((gmc->edge == E_GADMAN_EDGE_LEFT) || - (gmc->edge == E_GADMAN_EDGE_RIGHT)) - { - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - gmc->y = gmc2->y + gmc2->h; - } - } - } - if (ok) return; - if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - ok = 1; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - break; - } - } - } - if (ok) - { - _e_gadman_client_geometry_to_align(gmc); - return; - } - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - gmc->y = gmc2->y - gmc->h; - } - } - } - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - } - else if ((gmc->edge == E_GADMAN_EDGE_TOP) || - (gmc->edge == E_GADMAN_EDGE_BOTTOM)) - { - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - gmc->x = gmc2->x + gmc2->w; - } - } - } - if (ok) return; - if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - ok = 1; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - break; - } - } - } - if (ok) - { - _e_gadman_client_geometry_to_align(gmc); - return; - } - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - gmc->x = gmc2->x - gmc->w; - } - } - } - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - } - _e_gadman_client_geometry_to_align(gmc); - return; - } - while ((!ok) && (iterate < 1000)) - { - ok = 1; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - gmc->x = gmc2->x + gmc2->w; - } - } - } - if (ok) break; - if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - ok = 1; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - break; - } - } - } - if (ok) break; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - gmc->x = gmc2->x - gmc->w; - } - } - } - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - ok = 1; - for (l = gmc->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc2; - - gmc2 = l->data; - if (gmc != gmc2) - { - if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && - (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) - { - ok = 0; - break; - } - } - } - if (ok) break; - if (gmc->y > (gmc->zone->y + (gmc->zone->h / 2))) - gmc->y -= 8; - else - gmc->y += 8; - if (oy < (gmc->zone->y + (gmc->zone->h / 2))) - { - if ((gmc->y - oy) > (gmc->zone->h / 3)) - { - gmc->x = ox; - gmc->y = oy; - break; - } - } - else - { - if ((oy - gmc->y) > (gmc->zone->h / 3)) - { - gmc->x = ox; - gmc->y = oy; - break; - } - } - iterate++; - } - _e_gadman_client_geometry_to_align(gmc); -} - -static void -_e_gadman_client_down_store(E_Gadman_Client *gmc) -{ - gmc->down_store_x = gmc->x; - gmc->down_store_y = gmc->y; - gmc->down_store_w = gmc->w; - gmc->down_store_h = gmc->h; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &gmc->down_x, &gmc->down_y); -} - -static int -_e_gadman_client_is_being_modified(E_Gadman_Client *gmc) -{ - if ((gmc->moving) || - (gmc->resizing_l) || (gmc->resizing_r) || - (gmc->resizing_u) || (gmc->resizing_d)) - return 1; - return 0; -} - -static void -_e_gadman_client_geometry_to_align(E_Gadman_Client *gmc) -{ - if (gmc->w != gmc->zone->w) - gmc->ax = (double)(gmc->x - gmc->zone->x) / (double)(gmc->zone->w - gmc->w); - else - gmc->ax = 0.0; - if (gmc->h != gmc->zone->h) - gmc->ay = (double)(gmc->y - gmc->zone->y) / (double)(gmc->zone->h - gmc->h); - else - gmc->ay = 0.0; -} - -static void -_e_gadman_client_aspect_enforce(E_Gadman_Client *gmc, double cx, double cy, int use_horiz) -{ - Evas_Coord neww, newh; - double aspect; - int change = 0; - - neww = gmc->w - (gmc->pad.l + gmc->pad.r); - newh = gmc->h - (gmc->pad.t + gmc->pad.b); - if (gmc->h > 0) - aspect = (double)neww / (double)newh; - else - aspect = 0.0; - - if (aspect > gmc->maxa) - { - if (use_horiz) - newh = neww / gmc->maxa; - else - neww = newh * gmc->mina; - change = 1; - } - else if (aspect < gmc->mina) - { - if (use_horiz) - newh = neww / gmc->maxa; - else - neww = newh * gmc->mina; - change = 1; - } - if (change) - { - neww += (gmc->pad.l + gmc->pad.r); - newh += (gmc->pad.t + gmc->pad.b); - gmc->x = gmc->x + ((gmc->w - neww) * cx); - gmc->y = gmc->y + ((gmc->h - newh) * cy); - gmc->w = neww; - gmc->h = newh; - } -} - -static void -_e_gadman_client_geometry_apply(E_Gadman_Client *gmc) -{ - if (gmc->event_object) - { - evas_object_move(gmc->event_object, gmc->x, gmc->y); - evas_object_resize(gmc->event_object, gmc->w, gmc->h); - } - if (gmc->control_object) - { - evas_object_move(gmc->control_object, gmc->x, gmc->y); - evas_object_resize(gmc->control_object, gmc->w, gmc->h); - } -} - -static void -_e_gadman_client_callback_call(E_Gadman_Client *gmc, E_Gadman_Change change) -{ - if (gmc->func) gmc->func(gmc->data, gmc, change); -} - -static void -_e_gadman_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Down *ev; - E_Gadman_Client *gmc; - - gmc = data; - ev = event_info; - if (_e_gadman_client_is_being_modified(gmc)) return; - /* FIXME: how do we prevent this if you don't have a right mouse button */ - /* maybe make this menu available in he modules menu? */ - if (ev->button == 3) - { - E_Menu *m; - - m = e_gadman_client_menu_new(gmc); - if (m) - { - e_menu_post_deactivate_callback_set(m, _e_gadman_cb_menu_end, gmc); - e_menu_activate_mouse(m, gmc->zone, ev->output.x, ev->output.y, 1, 1, - E_MENU_POP_DIRECTION_DOWN, ev->timestamp); - e_util_container_fake_mouse_up_all_later(gmc->zone->container); - } - } -} - -static void -_e_gadman_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Up *ev; - E_Gadman_Client *gmc; - - gmc = data; - ev = event_info; - if (_e_gadman_client_is_being_modified(gmc)) return; -} - -static void -_e_gadman_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_In *ev; - E_Gadman_Client *gmc; - - gmc = data; - ev = event_info; - if (_e_gadman_client_is_being_modified(gmc)) return; - edje_object_signal_emit(gmc->control_object, "active", ""); -} - -static void -_e_gadman_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Out *ev; - E_Gadman_Client *gmc; - - gmc = data; - ev = event_info; - if (_e_gadman_client_is_being_modified(gmc)) return; - edje_object_signal_emit(gmc->control_object, "inactive", ""); -} - -static void -_e_gadman_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (_e_gadman_client_is_being_modified(gmc)) return; - _e_gadman_client_down_store(gmc); - gmc->moving = 1; - evas_object_raise(gmc->control_object); - evas_object_raise(gmc->event_object); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_RAISE); - - if (e_config->move_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_move_begin(gmc->zone, gmc->x, gmc->y); -} - -static void -_e_gadman_cb_signal_move_stop(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->moving = 0; - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - - e_move_end(); -} - -static void -_e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - Evas_Coord x, y; - int new_edge = 0; - int nx, ny, nxx, nyy; - int new_zone = 0; - Evas_List *skiplist = NULL; - - - gmc = data; - if (!gmc->moving) return; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - nxx = nx = gmc->down_store_x + (x - gmc->down_x); - nyy = ny = gmc->down_store_y + (y - gmc->down_y); - skiplist = evas_list_append(skiplist, gmc); - e_resist_container_gadman_position(gmc->zone->container, skiplist, - gmc->x, gmc->y, gmc->w, gmc->h, - nx, ny, gmc->w, gmc->h, - &nxx, &nyy); - evas_list_free(skiplist); - x += (nxx - nx); - y += (nyy - ny); - if ((gmc->policy & 0xff) == E_GADMAN_POLICY_EDGES) - { - double xr, yr; - E_Gadman_Edge ne; - - ne = gmc->edge; - - if (!(gmc->policy & E_GADMAN_POLICY_FIXED_ZONE)) - { - E_Zone *nz; - - nz = e_container_zone_at_point_get(gmc->zone->container, x, y); - if ((nz) && (nz != gmc->zone)) - { - gmc->zone = nz; - new_zone = 1; - evas_object_clip_set(gmc->event_object, gmc->zone->bg_clip_object); - evas_object_clip_set(gmc->control_object, gmc->zone->bg_clip_object); - } - } - - xr = (double)(x - gmc->zone->x) / (double)gmc->zone->w; - yr = (double)(y - gmc->zone->y) / (double)gmc->zone->h; - - if ((xr + yr) <= 1.0) /* top or left */ - { - if (((1.0 - yr) + xr) <= 1.0) ne = E_GADMAN_EDGE_LEFT; - else ne = E_GADMAN_EDGE_TOP; - } - else /* bottom or right */ - { - if (((1.0 - yr) + xr) <= 1.0) ne = E_GADMAN_EDGE_BOTTOM; - else ne = E_GADMAN_EDGE_RIGHT; - } - - if (ne != gmc->edge) - { - gmc->edge = ne; - new_edge = 1; - } - if (gmc->edge == E_GADMAN_EDGE_LEFT) - { - gmc->x = gmc->zone->x; - gmc->y = gmc->down_store_y + (y - gmc->down_y); - if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - } - else if (gmc->edge == E_GADMAN_EDGE_RIGHT) - { - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - gmc->y = gmc->down_store_y + (y - gmc->down_y); - if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - } - else if (gmc->edge == E_GADMAN_EDGE_TOP) - { - gmc->x = gmc->down_store_x + (x - gmc->down_x); - gmc->y = gmc->zone->y; - if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - } - else if (gmc->edge == E_GADMAN_EDGE_BOTTOM) - { - gmc->x = gmc->down_store_x + (x - gmc->down_x); - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - } - } - else - { - if (gmc->policy & E_GADMAN_POLICY_HMOVE) - gmc->x = gmc->down_store_x + (x - gmc->down_x); - else - gmc->x = gmc->down_store_x; - if (gmc->policy & E_GADMAN_POLICY_VMOVE) - gmc->y = gmc->down_store_y + (y - gmc->down_y); - else - gmc->y = gmc->down_store_y; - gmc->w = gmc->down_store_w; - gmc->h = gmc->down_store_h; - if (!(gmc->policy & E_GADMAN_POLICY_FIXED_ZONE)) - { - E_Zone *nz; - - nz = e_container_zone_at_point_get(gmc->zone->container, x, y); - if ((nz) && (nz != gmc->zone)) - { - gmc->zone = nz; - new_zone = 1; - evas_object_clip_set(gmc->event_object, gmc->zone->bg_clip_object); - evas_object_clip_set(gmc->control_object, gmc->zone->bg_clip_object); - } - } - if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; - if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - } - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_geometry_apply(gmc); - e_object_ref(E_OBJECT(gmc)); - if (!e_object_is_del(E_OBJECT(gmc))) - { - if (new_zone) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE); - } - if (!e_object_is_del(E_OBJECT(gmc))) - { - if (new_edge) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_EDGE); - } - if (!e_object_is_del(E_OBJECT(gmc))) - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - e_object_unref(E_OBJECT(gmc)); - - if (e_config->move_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_move_update(gmc->x, gmc->y); -} - -static void -_e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (_e_gadman_client_is_being_modified(gmc)) return; - _e_gadman_client_down_store(gmc); - gmc->use_autow = 0; - gmc->resizing_l = 1; - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_begin(gmc->zone, gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->resizing_l = 0; - e_gadman_client_save(gmc); - - e_resize_end(); -} - -static void -_e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - Evas_Coord x, y; - - gmc = data; - if (!gmc->resizing_l) return; - if (!(gmc->policy & E_GADMAN_POLICY_HSIZE)) return; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - gmc->x = gmc->down_store_x + (x - gmc->down_x); - gmc->y = gmc->down_store_y; - gmc->w = gmc->down_store_w - (x - gmc->down_x); - gmc->h = gmc->down_store_h; - /* limit to zone left edge */ - if (gmc->x < gmc->zone->x) - { - gmc->w = (gmc->down_store_x + gmc->down_store_w) - gmc->zone->x; - gmc->x = gmc->zone->x; - } - /* limit to min size */ - if (gmc->w < gmc->minw) - { - gmc->x = (gmc->down_store_x + gmc->down_store_w) - gmc->minw; - gmc->w = gmc->minw; - } - /* if we are atthe edge or beyond. assyme we want to be all the way there */ - if (x <= gmc->zone->x) - { - gmc->w = (gmc->x + gmc->w) - gmc->zone->x; - gmc->x = gmc->zone->x; - } - /* limit to max size */ - if (gmc->maxw > 0) - { - if (gmc->w > gmc->maxw) - { - gmc->x -= (gmc->maxw - gmc->w); - gmc->w = gmc->maxw; - } - } - _e_gadman_client_aspect_enforce(gmc, 1.0, 0.5, 1); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_update(gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (_e_gadman_client_is_being_modified(gmc)) return; - _e_gadman_client_down_store(gmc); - gmc->use_autow = 0; - gmc->resizing_r = 1; - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_begin(gmc->zone, gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->resizing_r = 0; - e_gadman_client_save(gmc); - - e_resize_end(); -} - -static void -_e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - Evas_Coord x, y; - - gmc = data; - if (!gmc->resizing_r) return; - if (!(gmc->policy & E_GADMAN_POLICY_HSIZE)) return; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - gmc->x = gmc->down_store_x; - gmc->y = gmc->down_store_y; - gmc->w = gmc->down_store_w + (x - gmc->down_x); - gmc->h = gmc->down_store_h; - /* limit to zone right edge */ - if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - { - gmc->w = (gmc->zone->x + gmc->zone->w) - gmc->x; - } - /* limit to min size */ - if (gmc->w < gmc->minw) - { - gmc->w = gmc->minw; - } - /* if we are atthe edge or beyond. assyme we want to be all the way there */ - if (x >= (gmc->zone->x + gmc->zone->w - 1)) - { - gmc->w = gmc->zone->x + gmc->zone->w - gmc->x; - } - /* limit to max size */ - if (gmc->maxw > 0) - { - if (gmc->w > gmc->maxw) - { - gmc->w = gmc->maxw; - } - } - _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_update(gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (_e_gadman_client_is_being_modified(gmc)) return; - _e_gadman_client_down_store(gmc); - gmc->use_autoh = 0; - gmc->resizing_u = 1; - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_begin(gmc->zone, gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->resizing_u = 0; - e_gadman_client_save(gmc); - - e_resize_end(); -} - -static void -_e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - Evas_Coord x, y; - - gmc = data; - if (!gmc->resizing_u) return; - if (!(gmc->policy & E_GADMAN_POLICY_VSIZE)) return; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - gmc->x = gmc->down_store_x; - gmc->y = gmc->down_store_y + (y - gmc->down_y); - gmc->w = gmc->down_store_w; - gmc->h = gmc->down_store_h - (y - gmc->down_y); - /* limit to zone top edge */ - if (gmc->y < gmc->zone->y) - { - gmc->h = (gmc->down_store_y + gmc->down_store_h) - gmc->zone->y; - gmc->y = gmc->zone->y; - } - /* limit to min size */ - if (gmc->h < gmc->minh) - { - gmc->y = (gmc->down_store_y + gmc->down_store_h) - gmc->minh; - gmc->h = gmc->minh; - } - /* if we are atthe edge or beyond. assyme we want to be all the way there */ - if (y <= gmc->zone->y) - { - gmc->h = (gmc->y + gmc->h) - gmc->zone->y; - gmc->y = gmc->zone->y; - } - /* limit to max size */ - if (gmc->maxh > 0) - { - if (gmc->h > gmc->maxh) - { - gmc->y -= (gmc->maxh - gmc->h); - gmc->h = gmc->maxh; - } - } - _e_gadman_client_aspect_enforce(gmc, 0.5, 1.0, 0); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_update(gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (_e_gadman_client_is_being_modified(gmc)) return; - _e_gadman_client_down_store(gmc); - gmc->use_autoh = 0; - gmc->resizing_d = 1; - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_begin(gmc->zone, gmc->w, gmc->h); -} - -static void -_e_gadman_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->resizing_d = 0; - e_gadman_client_save(gmc); - - e_resize_end(); -} - -static void -_e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - E_Gadman_Client *gmc; - Evas_Coord x, y; - - gmc = data; - if (!gmc->resizing_d) return; - if (!(gmc->policy & E_GADMAN_POLICY_VSIZE)) return; - evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - gmc->x = gmc->down_store_x; - gmc->y = gmc->down_store_y; - gmc->w = gmc->down_store_w; - gmc->h = gmc->down_store_h + (y - gmc->down_y); - /* limit to zone right bottom */ - if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - { - gmc->h = (gmc->zone->y + gmc->zone->h) - gmc->y; - } - /* limit to min size */ - if (gmc->h < gmc->minh) - { - gmc->h = gmc->minh; - } - /* if we are atthe edge or beyond. assyme we want to be all the way there */ - if (y >= (gmc->zone->y + gmc->zone->h - 1)) - { - gmc->h = gmc->zone->y + gmc->zone->h - gmc->y; - } - /* limit to max size */ - if (gmc->maxh > 0) - { - if (gmc->h > gmc->maxh) - { - gmc->h = gmc->maxh; - } - } - _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_to_align(gmc); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); - - if (e_config->resize_info_follows) - e_move_resize_object_coords_set(gmc->x, gmc->y, gmc->w, gmc->h); - else - e_move_resize_object_coords_set(gmc->zone->x, gmc->zone->y, gmc->zone->w, gmc->zone->h); - e_resize_update(gmc->w, gmc->h); -} - -static void -_e_gadman_cb_menu_end(void *data, E_Menu *m) -{ - E_Gadman_Client *gmc; - - gmc = data; - e_object_del(E_OBJECT(m)); - gmc->menu = NULL; -} - -static void -_e_gadman_cb_half_width(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->w = gmc->zone->w / 2; - if (gmc->w < gmc->minw) gmc->w = gmc->minw; - if (gmc->maxw > 0) - { - if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; - } - gmc->use_autow = 0; - _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_full_width(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->w = gmc->zone->w; - if (gmc->w < gmc->minw) gmc->w = gmc->minw; - if (gmc->maxw > 0) - { - if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; - } - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) / 2); - gmc->use_autow = 0; - _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (e_menu_item_toggle_get(mi)) - { - gmc->use_autow = 1; - gmc->w = gmc->autow; - if (gmc->w > gmc->zone->w) - gmc->w = gmc->zone->w; - if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = (gmc->zone->x + gmc->zone->w) - gmc->w; - } - else - gmc->use_autow = 0; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_center_horiz(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) / 2); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_half_height(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->h = gmc->zone->h / 2; - if (gmc->h < gmc->minh) gmc->h = gmc->minh; - if (gmc->maxh > 0) - { - if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; - } - gmc->use_autoh = 0; - _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->h = gmc->zone->h; - if (gmc->h < gmc->minh) gmc->h = gmc->minh; - if (gmc->maxh > 0) - { - if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; - } - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) / 2); - gmc->use_autoh = 0; - _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (e_menu_item_toggle_get(mi)) - { - gmc->use_autoh = 1; - gmc->h = gmc->autoh; - if (gmc->h > gmc->zone->h) - gmc->h = gmc->zone->h; - if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = (gmc->zone->y + gmc->zone->h) - gmc->h; - } - else - gmc->use_autoh = 0; - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - - -static void -_e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) / 2); - _e_gadman_client_geometry_apply(gmc); - _e_gadman_client_geometry_to_align(gmc); - e_gadman_client_save(gmc); - _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); -} - -static void -_e_gadman_cb_allow_overlap(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (e_menu_item_toggle_get(mi)) - { - gmc->allow_overlap = 1; - gmc->policy |= E_GADMAN_POLICY_ALLOW_OVERLAP; - } - else - { - gmc->allow_overlap = 0; - gmc->policy &= ~E_GADMAN_POLICY_ALLOW_OVERLAP; - } - e_gadman_client_save(gmc); -} - -static void -_e_gadman_cb_always_on_top(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - if (e_menu_item_toggle_get(mi)) - { - gmc->allow_overlap = 1; - gmc->policy |= E_GADMAN_POLICY_ALWAYS_ON_TOP; - } - else - { - gmc->allow_overlap = 0; - gmc->policy &= ~E_GADMAN_POLICY_ALWAYS_ON_TOP; - } - e_gadman_client_save(gmc); -} - -static void -_e_gadman_cb_end_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Gadman_Client *gmc; - - gmc = data; - e_gadman_mode_set(gmc->gadman, E_GADMAN_MODE_NORMAL); -} - -static void -_e_gadman_config_free(Gadman_Client_Config *cf) -{ - while (cf->res.others) - { - _e_gadman_config_free(cf->res.others->data); - cf->res.others = evas_list_remove_list(cf->res.others, cf->res.others); - } - free(cf); -} - -static void -_e_gadman_client_geom_store(E_Gadman_Client *gmc) -{ - Gadman_Client_Config *cf; - - cf = gmc->config; - cf->pos.x = gmc->x - gmc->zone->x; - cf->pos.y = gmc->y - gmc->zone->y; - cf->pos.w = gmc->zone->w; - cf->pos.h = gmc->zone->h; - cf->pad.l = gmc->pad.l; - cf->pad.r = gmc->pad.r; - cf->pad.t = gmc->pad.t; - cf->pad.b = gmc->pad.b; - cf->w = gmc->w; - cf->h = gmc->h; - cf->edge = gmc->edge; - cf->zone = gmc->zone->num; - cf->use_autow = gmc->use_autow; - cf->use_autoh = gmc->use_autoh; - cf->allow_overlap = gmc->allow_overlap; - cf->always_on_top = gmc->always_on_top; -} diff --git a/src/bin/e_gadman.h b/src/bin/e_gadman.h deleted file mode 100644 index 459fa8ddd..000000000 --- a/src/bin/e_gadman.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 - */ -#ifdef E_TYPEDEFS - -typedef enum _E_Gadman_Policy -{ - /* type */ - E_GADMAN_POLICY_ANYWHERE = 0, - E_GADMAN_POLICY_EDGES = 1, - /* extra flags */ - E_GADMAN_POLICY_FIXED_ZONE = 1 << 8, - E_GADMAN_POLICY_HSIZE = 1 << 9, - E_GADMAN_POLICY_VSIZE = 1 << 10, - E_GADMAN_POLICY_HMOVE = 1 << 11, - E_GADMAN_POLICY_VMOVE = 1 << 12, - /* more extra flags */ - E_GADMAN_POLICY_ALLOW_OVERLAP = 1 << 15, - E_GADMAN_POLICY_ALWAYS_ON_TOP = 1 << 16 // not used yet -} E_Gadman_Policy; - -typedef enum _E_Gadman_Change -{ - E_GADMAN_CHANGE_MOVE_RESIZE, - E_GADMAN_CHANGE_EDGE, - E_GADMAN_CHANGE_ZONE, - E_GADMAN_CHANGE_RAISE -} E_Gadman_Change; - -typedef enum _E_Gadman_Edge -{ - E_GADMAN_EDGE_LEFT, - E_GADMAN_EDGE_RIGHT, - E_GADMAN_EDGE_TOP, - E_GADMAN_EDGE_BOTTOM -} E_Gadman_Edge; - -typedef enum _E_Gadman_Mode -{ - E_GADMAN_MODE_NORMAL, - E_GADMAN_MODE_EDIT -} E_Gadman_Mode; - -typedef struct _E_Gadman E_Gadman; -typedef struct _E_Gadman_Client E_Gadman_Client; - -#else -#ifndef E_GADMAN_H -#define E_GADMAN_H - -#define E_GADMAN_TYPE 0xE0b01006 -#define E_GADMAN_CLIENT_TYPE 0xE0b01007 - -struct _E_Gadman -{ - E_Object e_obj_inherit; - E_Container *container; - Evas_List *clients; - E_Gadman_Mode mode; -}; - -struct _E_Gadman_Client -{ - E_Object e_obj_inherit; - E_Gadman *gadman; - - Evas_Object *control_object; - Evas_Object *event_object; - E_Menu *menu; - Evas_Coord down_x, down_y; - Evas_Coord down_store_x, down_store_y, down_store_w, down_store_h; - unsigned char moving : 1; - unsigned char resizing_l : 1; - unsigned char resizing_r : 1; - unsigned char resizing_u : 1; - unsigned char resizing_d : 1; - E_Gadman_Edge edge; - const char *domain; - E_Zone *zone; - int instance; - E_Gadman_Policy policy; - Evas_Coord x, y, w, h; - Evas_Coord minw, minh, maxw, maxh; - unsigned char use_autow : 1; - unsigned char use_autoh : 1; - unsigned char allow_overlap : 1; - unsigned char always_on_top : 1; - Evas_Coord autow, autoh; - double ax, ay; - double mina, maxa; - struct { - int l, r, t, b; - } pad; - void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change); - void *data; - void *config; -}; - -EAPI int e_gadman_init(void); -EAPI int e_gadman_shutdown(void); -EAPI E_Gadman *e_gadman_new(E_Container *con); -EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode); -EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm); -EAPI void e_gadman_all_save(E_Gadman *gm); -EAPI void e_gadman_container_resize(E_Gadman *gm); -EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm); -EAPI void e_gadman_client_save(E_Gadman_Client *gmc); -EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); -EAPI void e_gadman_client_load(E_Gadman_Client *gmc); -EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance); -EAPI void e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone); -EAPI void e_gadman_client_policy_set(E_Gadman_Client *gmc, E_Gadman_Policy pol); -EAPI void e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh); -EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh); -EAPI void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign); -EAPI void e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa); -EAPI void e_gadman_client_padding_set(E_Gadman_Client *gmc, int l, int r, int t, int b); -EAPI void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh); -EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); -EAPI E_Gadman_Edge e_gadman_client_edge_get(E_Gadman_Client *gmc); -EAPI void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); -EAPI void e_gadman_client_user_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h); -EAPI void e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h); -EAPI void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data); -EAPI E_Menu *e_gadman_client_menu_new(E_Gadman_Client *gmc); - -#endif -#endif diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index d8d1f320f..20327602a 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -31,7 +31,6 @@ #include "e_resist.h" #include "e_startup.h" #include "e_hints.h" -#include "e_gadman.h" #include "e_signals.h" #include "e_xinerama.h" #include "e_table.h" diff --git a/src/bin/e_init.c b/src/bin/e_init.c index 889ed277d..b40f20b66 100644 --- a/src/bin/e_init.c +++ b/src/bin/e_init.c @@ -50,7 +50,7 @@ e_init_init(void) ecore_evas_name_class_set(_e_init_ecore_evas, "E", "Init_Window"); ecore_evas_title_set(_e_init_ecore_evas, "Enlightenment Init"); - _e_init_pointer = e_pointer_window_new(_e_init_win); + _e_init_pointer = e_pointer_window_new(_e_init_win, 1); ecore_evas_raise(_e_init_ecore_evas); ecore_evas_show(_e_init_ecore_evas); diff --git a/src/bin/e_int_config_cursor.c b/src/bin/e_int_config_cursor.c index b2645e498..185d4b95c 100644 --- a/src/bin/e_int_config_cursor.c +++ b/src/bin/e_int_config_cursor.c @@ -79,7 +79,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) E_Manager *man; man = l->data; if (man->pointer) e_object_del(E_OBJECT(man->pointer)); - man->pointer = e_pointer_window_new(man->root); + man->pointer = e_pointer_window_new(man->root, 1); } } return 1; @@ -128,7 +128,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) E_Manager *man; man = l->data; if (man->pointer) e_object_del(E_OBJECT(man->pointer)); - man->pointer = e_pointer_window_new(man->root); + man->pointer = e_pointer_window_new(man->root, 1); } } return 1; diff --git a/src/bin/e_ipc_handlers.h b/src/bin/e_ipc_handlers.h index 7000074c0..eaef61a6f 100644 --- a/src/bin/e_ipc_handlers.h +++ b/src/bin/e_ipc_handlers.h @@ -5354,7 +5354,7 @@ break; E_Manager *man; man = ml->data; if (man->pointer) e_object_del(E_OBJECT(man->pointer)); - man->pointer = e_pointer_window_new(man->root); + man->pointer = e_pointer_window_new(man->root, 1); } SAVE; END_INT; diff --git a/src/bin/e_main.c b/src/bin/e_main.c index cf8e6688e..ffcf64111 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -907,7 +907,6 @@ _e_main_screens_init(void) if (!e_container_init()) return 0; if (!e_zone_init()) return 0; if (!e_desk_init()) return 0; - if (!e_gadman_init()) return 0; if (!e_menu_init()) return 0; if (!e_exehist_init()) return 0; @@ -971,7 +970,6 @@ _e_main_screens_shutdown(void) e_focus_shutdown(); e_exehist_shutdown(); e_menu_shutdown(); - e_gadman_shutdown(); e_desk_shutdown(); e_zone_shutdown(); e_container_shutdown(); diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 03f3fbd23..98f2d42fc 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -148,7 +148,7 @@ e_manager_new(Ecore_X_Window root, int num) h = ecore_event_handler_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_manager_cb_screensaver_notify, man); if (h) man->handlers = evas_list_append(man->handlers, h); - man->pointer = e_pointer_window_new(man->root); + man->pointer = e_pointer_window_new(man->root, 1); return man; } diff --git a/src/bin/e_maximize.c b/src/bin/e_maximize.c index f5749a430..636a9e992 100644 --- a/src/bin/e_maximize.c +++ b/src/bin/e_maximize.c @@ -130,14 +130,6 @@ e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2) Evas_List *l, *rects = NULL; E_Maximize_Rect *r; - for (l = bd->zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - if ((gmc->zone != bd->zone)) continue; - OBSTACLE(gmc->x, gmc->y, gmc->x + gmc->w, gmc->y + gmc->h); - } for (l = e_shelf_list(); l; l = l->next) { E_Shelf *es; diff --git a/src/bin/e_place.c b/src/bin/e_place.c index 2b26cddb9..9354cb4ca 100644 --- a/src/bin/e_place.c +++ b/src/bin/e_place.c @@ -189,66 +189,6 @@ e_place_zone_region_smart(E_Zone *zone, Evas_List *skiplist, int x, int y, int w { Evas_List *l; - for (l = zone->container->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - int bx, by, bw, bh; - - gmc = l->data; - if ((gmc->zone != zone)) continue; - - bx = gmc->x; - by = gmc->y; - bw = gmc->w; - bh = gmc->h; - if (E_INTERSECTS(bx, by, bw, bh, 0, 0, zw, zh)) - { - if ((bx > 0) && (bx <= zw) && (!u_x[bx])) - { - a_w++; - if (a_w > a_alloc_w) - { - a_alloc_w += 32; - E_REALLOC(a_x, int, a_alloc_w); - } - a_x[a_w - 1] = bx; - u_x[bx] = 1; - } - if (((bx + bw) > 0) && ((bx + bw) <= zw) && (!u_x[bx + bw])) - { - a_w++; - if (a_w > a_alloc_w) - { - a_alloc_w += 32; - E_REALLOC(a_x, int, a_alloc_w); - } - a_x[a_w - 1] = bx + bw; - u_x[bx + bw] = 1; - } - if ((by > 0) && (by <= zh) && (!u_y[by])) - { - a_h++; - if (a_h > a_alloc_h) - { - a_alloc_h += 32; - E_REALLOC(a_y, int, a_alloc_h); - } - a_y[a_h - 1] = by; - u_y[by] = 1; - } - if (((by + bh) > 0) && ((by + bh) <= zh) && (!u_y[by + bh])) - { - a_h++; - if (a_h > a_alloc_h) - { - a_alloc_h += 32; - E_REALLOC(a_y, int, a_alloc_h); - } - a_y[a_h - 1] = by + bh; - u_y[by + bh] = 1; - } - } - } for (l = e_shelf_list(); l; l = l->next) { E_Shelf *es; diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c index 1dda9bcbc..e591152d7 100644 --- a/src/bin/e_pointer.c +++ b/src/bin/e_pointer.c @@ -20,6 +20,8 @@ struct _E_Pointer_Stack static Evas_List *_e_pointers = NULL; +static void _e_pointer_canvas_add(E_Pointer *p); +static void _e_pointer_canvas_del(E_Pointer *p); static void _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info); static void _e_pointer_free(E_Pointer *p); static void _e_pointer_stack_free(E_Pointer_Stack *elem); @@ -27,109 +29,29 @@ static int _e_pointer_type_set(E_Pointer *p, const char *type); /* externally accessible functions */ EAPI E_Pointer * -e_pointer_window_new(Ecore_X_Window win) +e_pointer_window_new(Ecore_X_Window win, int filled) { E_Pointer *p = NULL; + p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free); + if (!p) return NULL; + if (e_config->use_e_cursor) { - Evas_Engine_Info_Buffer *einfo; - Evas_Object *o; - int rmethod; - - rmethod = evas_render_method_lookup("buffer"); - if (!rmethod) return NULL; - - p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free); - if (!p) return NULL; p->e_cursor = 1; p->win = win; - - p->w = e_config->cursor_size; - p->h = e_config->cursor_size; - - /* create evas */ - p->evas = evas_new(); - if (!p->evas) - { - e_object_del(E_OBJECT(p)); - return NULL; - } - evas_output_method_set(p->evas, rmethod); - evas_output_size_set(p->evas, p->w, p->h); - evas_output_viewport_set(p->evas, 0, 0, p->w, p->h); - - p->pixels = malloc(p->w * p->h * sizeof(int)); - if (!p->pixels) - { - e_object_del(E_OBJECT(p)); - return NULL; - } - - einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(p->evas); - if (!einfo) - { - e_object_del(E_OBJECT(p)); - return NULL; - } - einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32; - einfo->info.dest_buffer = p->pixels; - einfo->info.dest_buffer_row_bytes = p->w * sizeof(int); - einfo->info.use_color_key = 0; - einfo->info.alpha_threshold = 0; - einfo->info.func.new_update_region = NULL; - einfo->info.func.free_update_region = NULL; - evas_engine_info_set(p->evas, (Evas_Engine_Info *)einfo); - - /* set the pointer edje */ - o = edje_object_add(p->evas); - if (!o) - { - e_object_del(E_OBJECT(p)); - return NULL; - } - p->pointer_object = o; - - /* Create the hotspot object */ - o = evas_object_rectangle_add(p->evas); - if (!o) - { - e_object_del(E_OBJECT(p)); - return NULL; - } - p->hot_object = o; - evas_object_event_callback_add(o, - EVAS_CALLBACK_MOVE, - _e_pointer_cb_move, p); - /* Init the cursor object */ - if (ecore_x_cursor_color_supported_get()) - p->color = 1; - else - p->color = 0; - - /* init edje */ - evas_object_move(p->pointer_object, 0, 0); - evas_object_resize(p->pointer_object, p->w, p->h); - evas_object_show(p->pointer_object); - - ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4); - e_pointer_type_push(p, p, "default"); - - _e_pointers = evas_list_append(_e_pointers, p); + if (ecore_x_cursor_color_supported_get()) p->color = 1; + else p->color = 0; } else { - p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free); - if (!p) return NULL; p->e_cursor = 0; p->win = win; - - ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4); - e_pointer_type_push(p, p, "default"); - - _e_pointers = evas_list_append(_e_pointers, p); } + ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4); + if (filled) e_pointer_type_push(p, p, "default"); + _e_pointers = evas_list_append(_e_pointers, p); return p; } @@ -182,11 +104,15 @@ e_pointer_type_push(E_Pointer *p, void *obj, const char *type) E_Pointer_Stack *stack; p->e_cursor = e_config->use_e_cursor; + if (p->e_cursor) + { + if (!p->evas) _e_pointer_canvas_add(p); + } + if (!_e_pointer_type_set(p, type)) { p->e_cursor = 0; - if (!_e_pointer_type_set(p, type)) - return; + if (!_e_pointer_type_set(p, type)) return; } if (p->type) evas_stringshare_del(p->type); @@ -224,7 +150,11 @@ e_pointer_type_pop(E_Pointer *p, void *obj, const char *type) if (!p->stack) { - printf("BUG: No pointer on the stack!\n"); + if (p->e_cursor) + { + if (p->evas) _e_pointer_canvas_del(p); + } + ecore_x_window_cursor_set(p->win, 0); return; } @@ -267,6 +197,7 @@ e_pointer_idler_before(void) p = l->data; if (!p->e_cursor) continue; + if (!p->evas) continue; updates = evas_render_updates(p->evas); if ((updates) || (p->hot.update)) @@ -283,6 +214,80 @@ e_pointer_idler_before(void) } /* local subsystem functions */ +static void +_e_pointer_canvas_add(E_Pointer *p) +{ + Evas_Engine_Info_Buffer *einfo; + Evas_Object *o; + int rmethod; + + p->w = e_config->cursor_size; + p->h = e_config->cursor_size; + + /* create evas */ + p->evas = evas_new(); + if (!p->evas) + { + e_object_del(E_OBJECT(p)); + return; + } + rmethod = evas_render_method_lookup("buffer"); + evas_output_method_set(p->evas, rmethod); + evas_output_size_set(p->evas, p->w, p->h); + evas_output_viewport_set(p->evas, 0, 0, p->w, p->h); + + p->pixels = malloc(p->w * p->h * sizeof(int)); + if (!p->pixels) + { + evas_free(p->evas); + p->evas = NULL; + return; + } + einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(p->evas); + if (!einfo) + { + free(p->pixels); + p->pixels = NULL; + evas_free(p->evas); + p->evas = NULL; + return; + } + einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32; + einfo->info.dest_buffer = p->pixels; + einfo->info.dest_buffer_row_bytes = p->w * sizeof(int); + einfo->info.use_color_key = 0; + einfo->info.alpha_threshold = 0; + einfo->info.func.new_update_region = NULL; + einfo->info.func.free_update_region = NULL; + evas_engine_info_set(p->evas, (Evas_Engine_Info *)einfo); + + /* set the pointer edje */ + o = edje_object_add(p->evas); + p->pointer_object = o; + /* Create the hotspot object */ + o = evas_object_rectangle_add(p->evas); + p->hot_object = o; + evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, + _e_pointer_cb_move, p); + /* init edje */ + evas_object_move(p->pointer_object, 0, 0); + evas_object_resize(p->pointer_object, p->w, p->h); + evas_object_show(p->pointer_object); +} + +static void +_e_pointer_canvas_del(E_Pointer *p) +{ + if (p->pointer_object) evas_object_del(p->pointer_object); + if (p->hot_object) evas_object_del(p->hot_object); + if (p->evas) evas_free(p->evas); + if (p->pixels) free(p->pixels); + p->pointer_object = NULL; + p->hot_object = NULL; + p->evas = NULL; + p->pixels = NULL; +} + static void _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) { @@ -305,12 +310,8 @@ _e_pointer_free(E_Pointer *p) { _e_pointers = evas_list_remove(_e_pointers, p); - /* free evas */ - if (p->pointer_object) evas_object_del(p->pointer_object); - if (p->hot_object) evas_object_del(p->hot_object); - if (p->evas) evas_free(p->evas); - if (p->pixels) free(p->pixels); - + _e_pointer_canvas_del(p); + while (p->stack) { _e_pointer_stack_free(p->stack->data); @@ -324,8 +325,7 @@ _e_pointer_free(E_Pointer *p) static void _e_pointer_stack_free(E_Pointer_Stack *elem) { - if (elem->type) - evas_stringshare_del(elem->type); + if (elem->type) evas_stringshare_del(elem->type); free(elem); } diff --git a/src/bin/e_pointer.h b/src/bin/e_pointer.h index 9552af1a3..50f8da29c 100644 --- a/src/bin/e_pointer.h +++ b/src/bin/e_pointer.h @@ -35,7 +35,7 @@ struct _E_Pointer } hot; }; -EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win); +EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win, int filled); EAPI void e_pointer_type_push(E_Pointer *p, void *obj, const char *type); EAPI void e_pointer_type_pop(E_Pointer *p, void *obj, const char *type); EAPI void e_pointers_size_set(int size); diff --git a/src/bin/e_resist.c b/src/bin/e_resist.c index 6ad0732a5..8cbe40b44 100644 --- a/src/bin/e_resist.c +++ b/src/bin/e_resist.c @@ -85,13 +85,6 @@ e_resist_container_border_position(E_Container *con, Evas_List *skiplist, } e_container_border_list_free(bl); - for (l = con->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - - gmc = l->data; - OBSTACLE(gmc->x, gmc->y, gmc->w, gmc->h, e_config->gadget_resist); - } for (l = e_shelf_list(); l; l = l->next) { E_Shelf *es; @@ -135,27 +128,6 @@ e_resist_container_gadman_position(E_Container *con, Evas_List *skiplist, return 0; } - for (l = con->gadman->clients; l; l = l->next) - { - E_Gadman_Client *gmc; - int ok; - - gmc = l->data; - ok = 1; - for (ll = skiplist; ll; ll = ll->next) - { - if (ll->data == gmc) - { - ok = 0; - break; - } - } - if (ok) - { - OBSTACLE(gmc->x, gmc->y, gmc->w, gmc->h, e_config->gadget_resist); - } - } - for (l = e_shelf_list(); l; l = l->next) { E_Shelf *es; diff --git a/src/bin/e_test.c b/src/bin/e_test.c index b5858aa92..6cb341f04 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -4,7 +4,6 @@ #include "e.h" static void _e_test_internal(E_Container *con); -static void _cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); EAPI void e_test(void) @@ -28,149 +27,6 @@ e_test(void) } #if 0 -/* local subsystem functions */ -typedef struct _Dat Dat; -struct _Dat -{ - Evas_Object *table; - Evas_List *items; -}; - -static void -_e_test_internal(E_Container *con) -{ - E_Gadman_Client *gmc; - Dat *dat; - Evas_Object *o; - int i, j; - - dat = calloc(1, sizeof(Dat)); - dat->table = e_table_add(con->bg_evas); - e_table_freeze(dat->table); - e_table_homogenous_set(dat->table, 1); - for (j = 0; j < 5; j++) - { - for (i = 0; i < 5; i++) - { - o = evas_object_rectangle_add(con->bg_evas); - dat->items = evas_list_append(dat->items, o); - evas_object_color_set(o, i * 50, j * 50, 100, 100); - e_table_pack(dat->table, o, i, j, 1, 1); - e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1); - evas_object_show(o); - } - } - e_table_thaw(dat->table); - evas_object_show(dat->table); - - gmc = e_gadman_client_new(con->gadman); - e_gadman_client_domain_set(gmc, "TEST", 0); - e_gadman_client_policy_set(gmc, - E_GADMAN_POLICY_ANYWHERE | - E_GADMAN_POLICY_HMOVE | - E_GADMAN_POLICY_VMOVE | - E_GADMAN_POLICY_HSIZE | - E_GADMAN_POLICY_VSIZE); - e_gadman_client_min_size_set(gmc, 10, 10); - e_gadman_client_auto_size_set(gmc, 128, 128); - e_gadman_client_align_set(gmc, 0.5, 0.5); - e_gadman_client_resize(gmc, 128, 128); - e_gadman_client_change_func_set(gmc, _cb_change, dat); - e_gadman_client_load(gmc); -} - -static void -_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change) -{ - Dat *dat; - Evas_Coord x, y, w, h; - - dat = data; - switch (change) - { - case E_GADMAN_CHANGE_MOVE_RESIZE: - e_gadman_client_geometry_get(gmc, &x, &y, &w, &h); - evas_object_move(dat->table, x, y); - evas_object_resize(dat->table, w, h); - break; - default: - break; - } -} -#elif 0 -typedef struct _Dat Dat; -struct _Dat -{ - Evas_Object *layout; - Evas_List *items; -}; - -static void -_e_test_internal(E_Container *con) -{ - E_Gadman_Client *gmc; - Dat *dat; - Evas_Object *o; - int i; - - dat = calloc(1, sizeof(Dat)); - dat->layout = e_layout_add(con->bg_evas); - e_layout_freeze(dat->layout); - e_layout_virtual_size_set(dat->layout, 800, 600); - for (i = 0; i < 10; i++) - { - Evas_Coord x, y, w, h; - - o = evas_object_rectangle_add(con->bg_evas); - dat->items = evas_list_append(dat->items, o); - evas_object_color_set(o, i * 25, 255 - (i * 25), 100, 100); - e_layout_pack(dat->layout, o); - w = rand() % 800; - h = rand() % 600; - x = rand() % (800 - w); - y = rand() % (600 - h); - e_layout_child_move(o, x, y); - e_layout_child_resize(o, w, h); - evas_object_show(o); - } - e_layout_thaw(dat->layout); - evas_object_show(dat->layout); - - gmc = e_gadman_client_new(con->gadman); - e_gadman_client_domain_set(gmc, "TEST", 0); - e_gadman_client_policy_set(gmc, - E_GADMAN_POLICY_ANYWHERE | - E_GADMAN_POLICY_HMOVE | - E_GADMAN_POLICY_VMOVE | - E_GADMAN_POLICY_HSIZE | - E_GADMAN_POLICY_VSIZE); - e_gadman_client_min_size_set(gmc, 10, 10); - e_gadman_client_auto_size_set(gmc, 128, 128); - e_gadman_client_align_set(gmc, 0.5, 0.5); - e_gadman_client_resize(gmc, 128, 128); - e_gadman_client_change_func_set(gmc, _cb_change, dat); - e_gadman_client_load(gmc); -} - -static void -_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change) -{ - Dat *dat; - Evas_Coord x, y, w, h; - - dat = data; - switch (change) - { - case E_GADMAN_CHANGE_MOVE_RESIZE: - e_gadman_client_geometry_get(gmc, &x, &y, &w, &h); - evas_object_move(dat->layout, x, y); - evas_object_resize(dat->layout, w, h); - break; - default: - break; - } -} -#elif 0 static int _e_test_timer(void *data) { @@ -836,9 +692,4 @@ static void _e_test_internal(E_Container *con) { } - -static void -_cb_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change) -{ -} #endif diff --git a/src/bin/e_win.c b/src/bin/e_win.c index 6bfd7d59e..4a4fec362 100644 --- a/src/bin/e_win.c +++ b/src/bin/e_win.c @@ -75,6 +75,8 @@ e_win_new(E_Container *con) win->min_aspect = 0.0; win->max_aspect = 0.0; wins = evas_list_append(wins, win); + + win->pointer = e_pointer_window_new(win->evas_win, 0); return win; } @@ -104,7 +106,6 @@ e_win_hide(E_Win *win) E_OBJECT_CHECK(win); E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE); if (win->border) e_border_hide(win->border, 1); - e_pointer_type_pop(win->container->manager->pointer, win, NULL); } EAPI void @@ -368,6 +369,7 @@ e_win_evas_object_win_get(Evas_Object *obj) static void _e_win_free(E_Win *win) { + e_object_del(E_OBJECT(win->pointer)); e_canvas_del(win->ecore_evas); ecore_evas_free(win->ecore_evas); if (win->border) diff --git a/src/bin/e_win.h b/src/bin/e_win.h index 0dfa09192..d9bdc1d85 100644 --- a/src/bin/e_win.h +++ b/src/bin/e_win.h @@ -35,6 +35,8 @@ struct _E_Win unsigned char centered : 1; unsigned char dialog : 1; } state; + + E_Pointer *pointer; }; EAPI int e_win_init (void);