Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_bindings.c e_actions.c e_pointer.h e_pointer.c Log Message: Pointer changes on context. Please comment! Will work more on it soon. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_bindings.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- e_bindings.c 22 Sep 2005 20:20:33 -0000 1.20 +++ e_bindings.c 9 Oct 2005 08:54:24 -0000 1.21 @@ -24,11 +24,11 @@ e_bindings_init(void) { Evas_List *l; - + for (l = e_config->mouse_bindings; l; l = l->next) { E_Config_Binding_Mouse *eb; - + eb = l->data; e_bindings_mouse_add(eb->context, eb->button, eb->modifiers, eb->any_mod, eb->action, eb->params); @@ -37,30 +37,35 @@ for (l = e_config->key_bindings; l; l = l->next) { E_Config_Binding_Key *eb; - + eb = l->data; e_bindings_key_add(eb->context, eb->key, eb->modifiers, eb->any_mod, eb->action, eb->params); } - for (l = e_config->signal_bindings; l; l = l->next) + for (l = e_config->signal_bindings; l; l = l->next) { E_Config_Binding_Signal *eb; - + eb = l->data; e_bindings_signal_add(eb->context, eb->signal, eb->source, eb->modifiers, eb->any_mod, eb->action, eb->params); } - for (l = e_config->wheel_bindings; l; l = l->next) + for (l = e_config->wheel_bindings; l; l = l->next) { E_Config_Binding_Wheel *eb; - + eb = l->data; e_bindings_wheel_add(eb->context, eb->direction, eb->z, eb->modifiers, eb->any_mod, eb->action, eb->params); } - + + e_bindings_signal_add(E_BINDING_CONTEXT_BORDER, "mouse,in", "resize_br", + E_BINDING_MODIFIER_NONE, 1, "pointer", "resize_br"); + e_bindings_signal_add(E_BINDING_CONTEXT_BORDER, "mouse,out", "resize_br", + E_BINDING_MODIFIER_NONE, 1, "pointer", "default"); + return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- e_actions.c 5 Oct 2005 16:42:39 -0000 1.37 +++ e_actions.c 9 Oct 2005 08:54:24 -0000 1.38 @@ -3,8 +3,6 @@ */ #include "e.h" -static E_Dialog *exit_dialog = NULL; - #define INITS #define ACT_GO(name) \ { \ @@ -67,6 +65,8 @@ static void _e_action_free(E_Action *act); static Evas_Bool _e_actions_cb_free(Evas_Hash *hash, const char *key, void *data, void *fdata); +static E_Dialog *exit_dialog = NULL; + /* to save writing this in N places - the sctions are defined here */ /***************************************************************************/ ACT_FN_GO(window_move) @@ -1213,6 +1213,29 @@ ecore_main_loop_quit(); } +ACT_FN_GO(pointer) +{ + /* TODO: Check for valid pointer types? */ + E_Manager *man = NULL; + + if (!obj) obj = E_OBJECT(e_manager_current_get()); + if (!obj) return; + if (obj->type == E_BORDER_TYPE) + { + E_Border *bd; + bd = (E_Border *)obj; + if (bd->zone) + obj = bd->zone->container->manager; + } + if (obj->type != E_MANAGER_TYPE) + { + obj = E_OBJECT(e_manager_current_get()); + if (!obj) return; + } + man = (E_Manager *)obj; + e_pointer_type_set(man->pointer, params); +} + /* local subsystem globals */ static Evas_Hash *actions = NULL; static Evas_List *action_names = NULL; @@ -1302,6 +1325,8 @@ ACT_GO(restart); ACT_GO(exit); + + ACT_GO(pointer); return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_pointer.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_pointer.h 8 Oct 2005 20:38:07 -0000 1.10 +++ e_pointer.h 9 Oct 2005 08:54:24 -0000 1.11 @@ -15,6 +15,9 @@ { E_Object e_obj_inherit; + unsigned char e_cursor : 1; + unsigned char color : 1; + Evas *evas; Evas_Object *pointer_object; Evas_Object *hot_object; @@ -32,6 +35,7 @@ }; EAPI E_Pointer *e_pointer_window_new(Ecore_X_Window win); +EAPI void e_pointer_type_set(E_Pointer *p, const char *type); EAPI void e_pointers_size_set(int size); EAPI void e_pointer_idler_before(void); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_pointer.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_pointer.c 8 Oct 2005 20:38:07 -0000 1.12 +++ e_pointer.c 9 Oct 2005 08:54:24 -0000 1.13 @@ -3,6 +3,11 @@ */ #include "e.h" +/* + * TODO + * - Make fallback user controlable. + */ + static Evas_List *_e_pointers = NULL; static void _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info); @@ -25,6 +30,7 @@ p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free); if (!p) return NULL; + p->e_cursor = 1; p->type = strdup("default"); if (!p->type) @@ -84,18 +90,38 @@ if (!e_theme_edje_object_set(o, "base/theme/pointer", "pointer/enlightenment/default/color")) - e_theme_edje_object_set(o, - "base/theme/pointer", - "pointer/enlightenment/default/mono"); + { + /* fallback on x cursor */ + p->e_cursor = 0; + free(p->type); + p->type = strdup(""); + free(p->evas); + p->evas = NULL; + free(p->pixels); + p->evas = NULL; + e_pointer_type_set(p, "default"); + return p; + } + p->color = 1; } else { if (!e_theme_edje_object_set(o, "base/theme/pointer", "pointer/enlightenment/default/mono")) - e_theme_edje_object_set(o, - "base/theme/pointer", - "pointer/enlightenment/default/color"); + { + /* fallback on x cursor */ + p->e_cursor = 0; + free(p->type); + p->type = strdup(""); + free(p->evas); + p->evas = NULL; + free(p->pixels); + p->evas = NULL; + e_pointer_type_set(p, "default"); + return p; + } + p->color = 0; } /* Create the hotspot object */ @@ -122,6 +148,7 @@ { p = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_free); if (!p) return NULL; + p->e_cursor = 0; p->type = strdup("default"); if (!p->type) @@ -130,6 +157,8 @@ return NULL; } + p->win = win; + ecore_x_window_cursor_set(win, ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_PTR)); @@ -149,7 +178,7 @@ Evas_Engine_Info_Buffer *einfo; p = l->data; - if (!p->evas) continue; + if (!p->e_cursor) continue; p->w = p->h = size; evas_output_size_set(p->evas, p->w, p->h); @@ -171,6 +200,106 @@ } void +e_pointer_type_set(E_Pointer *p, const char *type) +{ + if (!strcmp(p->type, type)) return; + + if (p->e_cursor) + { + Evas_Object *o; + char cursor[1024]; + + o = p->pointer_object; + if (p->color) + { + snprintf(cursor, sizeof(cursor), "pointer/enlightenment/%s/color", type); + if (!e_theme_edje_object_set(o, + "base/theme/pointer", + cursor)) + { + /* fallback on x cursor */ + p->e_cursor = 0; + e_pointer_type_set(p, type); + return; + } + } + else + { + snprintf(cursor, sizeof(cursor), "pointer/enlightenment/%s/mono", type); + if (!e_theme_edje_object_set(o, + "base/theme/pointer", + cursor)) + { + /* fallback on x cursor */ + p->e_cursor = 0; + e_pointer_type_set(p, type); + return; + } + } + edje_object_part_swallow(p->pointer_object, "hotspot", p->hot_object); + p->hot.update = 1; + } + else + { + if (!strcmp(type, "move")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_FLEUR)); + } + else if (!strcmp(type, "resize_tl")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_LEFT_CORNER)); + } + else if (!strcmp(type, "resize_t")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_SIDE)); + } + else if (!strcmp(type, "resize_tr")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_RIGHT_CORNER)); + } + else if (!strcmp(type, "resize_r")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_RIGHT_SIDE)); + } + else if (!strcmp(type, "resize_br")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER)); + } + else if (!strcmp(type, "resize_b")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_SIDE)); + } + else if (!strcmp(type, "resize_bl")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_LEFT_CORNER)); + } + else if (!strcmp(type, "resize_l")) + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_SIDE)); + } + else + { + ecore_x_window_cursor_set(p->win, + ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_PTR)); + } + } + /* try the default cursor next time */ + p->e_cursor = e_config->use_e_cursor; + + if (p->type) free(p->type); + p->type = strdup(type); +} + +void e_pointer_idler_before(void) { Evas_List *l; @@ -181,7 +310,7 @@ Evas_List *updates; p = l->data; - if (!p->evas) continue; + if (!p->e_cursor) continue; updates = evas_render_updates(p->evas); if ((updates) || (p->hot.update)) @@ -205,7 +334,7 @@ Evas_Coord x, y; p = data; - if (!p->evas) return; + if (!p->e_cursor) return; evas_object_geometry_get(p->hot_object, &x, &y, NULL, NULL); if ((p->hot.x != x) || (p->hot.y != y)) { ------------------------------------------------------- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs