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

Reply via email to