Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_filechooser_widget.c etk_tooltips.c etk_tooltips.h 
        etk_tree.c 


Log Message:
- more tooltip work
- trying out tooltips on trees using the file selector, not 100% bug free
- make the action/go_up button in the filechooser work

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/proto/etk/src/lib/etk_filechooser_widget.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- etk_filechooser_widget.c    12 Feb 2006 12:27:49 -0000      1.7
+++ etk_filechooser_widget.c    6 Mar 2006 22:49:11 -0000       1.8
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <limits.h>
+#include <Ecore.h>
 #include <Ecore_Data.h>
 #include <Ecore_File.h>
 #include "etk_theme.h"
@@ -16,6 +17,7 @@
 #include "etk_box.h"
 #include "etk_hbox.h"
 #include "etk_vbox.h"
+#include "etk_tooltips.h"
 #include "config.h"
 
 /* OS-specific to list the mount points */
@@ -63,6 +65,8 @@
 static void _etk_filechooser_widget_place_activated_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
 static void _etk_filechooser_widget_fav_activated_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
 static void _etk_filechooser_widget_file_activated_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
+static void _etk_filechooser_files_tree_row_mouse_in_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
+static void _etk_filechooser_files_tree_row_mouse_out_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data);
 static void _etk_filechooser_widget_places_tree_fill(Etk_Filechooser_Widget 
*fcw);
 static void _etk_filechooser_widget_favs_tree_fill(Etk_Filechooser_Widget 
*fcw);
 
@@ -92,6 +96,9 @@
 static int _etk_filechooser_num_unsupported_fs = 
sizeof(_etk_filechooser_unsupported_fs) / sizeof 
(_etk_filechooser_unsupported_fs[0]);
 /* static Etk_Signal 
*_etk_filechooser_widget_signals[ETK_FILECHOOSER_WIDGET_NUM_SIGNALS]; */
 
+static Ecore_Timer *_etk_filechooser_timer = NULL;
+static char _etk_filechooser_tooltip_text[PATH_MAX + 128];
+
 /**************************
  *
  * Implementation
@@ -341,6 +348,8 @@
    etk_widget_show(fcw->files_tree);
    etk_widget_visibility_locked_set(fcw->files_tree, ETK_TRUE);
    etk_signal_connect("row_activated", ETK_OBJECT(fcw->files_tree), 
ETK_CALLBACK(_etk_filechooser_widget_file_activated_cb), fcw);
+   etk_signal_connect("row_mouse_in", ETK_OBJECT(fcw->files_tree), 
ETK_CALLBACK(_etk_filechooser_files_tree_row_mouse_in_cb), fcw);
+   etk_signal_connect("row_mouse_out", ETK_OBJECT(fcw->files_tree), 
ETK_CALLBACK(_etk_filechooser_files_tree_row_mouse_out_cb), fcw);
 
    _etk_filechooser_widget_places_tree_fill(ETK_FILECHOOSER_WIDGET(fcw));
    _etk_filechooser_widget_favs_tree_fill(ETK_FILECHOOSER_WIDGET(fcw));
@@ -349,7 +358,7 @@
    etk_filechooser_widget_current_folder_set(ETK_FILECHOOSER_WIDGET(fcw), 
NULL);
 }
 
-/* Destroys the status bar */
+/* Destroys the file chooser */
 static void _etk_filechooser_widget_destructor(Etk_Filechooser_Widget 
*filechooser_widget)
 {
    if (!filechooser_widget)
@@ -437,7 +446,12 @@
      return;
    
    if (strcmp(selected_dir, "..") == 0)
-      ;
+   {
+      char back[PATH_MAX];
+      
+      snprintf(back, PATH_MAX, "%s/..", filechooser_widget->current_folder);
+      etk_filechooser_widget_current_folder_set(filechooser_widget, back);
+   }
    else
       etk_filechooser_widget_current_folder_set(filechooser_widget, 
selected_dir);
 }
@@ -464,6 +478,11 @@
 
    etk_tree_row_fields_get(row, filechooser_widget->files_name_col, NULL, 
NULL, &selected_file, NULL);
    snprintf(file_path, PATH_MAX, "%s/%s", filechooser_widget->current_folder, 
selected_file);
+
+   if(_etk_filechooser_timer)
+     ecore_timer_del(_etk_filechooser_timer);
+   _etk_filechooser_timer = NULL;
+   etk_tooltips_pop_down();
    
    if (ecore_file_exists(file_path))
    {
@@ -474,6 +493,54 @@
    }
 }
 
+static int _etk_filechooser_timer_cb(void *data)
+{
+   Etk_Filechooser_Widget *fcw;
+   
+   _etk_filechooser_timer = NULL;
+   
+   if (!(fcw = ETK_FILECHOOSER_WIDGET(data)))
+     return 0;
+   
+   etk_tooltips_tip_set(ETK_WIDGET(fcw), _etk_filechooser_tooltip_text);
+   return 0;
+}
+
+/* Called when the mouse enters a row */
+static void _etk_filechooser_files_tree_row_mouse_in_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data)
+{
+   Etk_Filechooser_Widget *fcw;
+   char *selected_file;
+   char file_path[PATH_MAX];
+   
+   if (!(fcw = ETK_FILECHOOSER_WIDGET(data)))
+     return;   
+   
+   etk_tree_row_fields_get(row, fcw->files_name_col, NULL, NULL, 
&selected_file, NULL);      
+   
+   snprintf(file_path, PATH_MAX, "%s/%s", fcw->current_folder, selected_file);
+   if(!ecore_file_exists(file_path))
+     return;
+   
+   snprintf(_etk_filechooser_tooltip_text, 
sizeof(_etk_filechooser_tooltip_text), " %s <br> %d Kb <br> ", selected_file, 
ecore_file_size(file_path) / 1024);
+
+   _etk_filechooser_timer = ecore_timer_add(0.08, _etk_filechooser_timer_cb, 
fcw);
+}
+
+/* Called when the mouse leaves a row */
+static void _etk_filechooser_files_tree_row_mouse_out_cb(Etk_Object *object, 
Etk_Tree_Row *row, void *data)
+{
+   Etk_Filechooser_Widget *fcw;
+   
+   if (!(fcw = ETK_FILECHOOSER_WIDGET(data)))
+     return;   
+   
+   if(_etk_filechooser_timer)
+     ecore_timer_del(_etk_filechooser_timer);
+   _etk_filechooser_timer = NULL;
+   etk_tooltips_tip_set(ETK_WIDGET(fcw), NULL);
+}
+
 /**************************
  *
  * Private functions
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tooltips.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- etk_tooltips.c      6 Mar 2006 00:15:22 -0000       1.2
+++ etk_tooltips.c      6 Mar 2006 22:49:12 -0000       1.3
@@ -22,12 +22,14 @@
 static void _etk_tooltips_mouse_out_cb(Etk_Object *object, 
Etk_Event_Mouse_In_Out *event, void *data);
 static void _etk_tooltips_mouse_move_cb(Etk_Object *object, 
Etk_Event_Mouse_Move *event, void *data);
 static void _etk_tooltips_mouse_down_cb(Etk_Object *object, void *event, void 
*data);
+static void _etk_tooltips_mouse_wheel_cb(Etk_Object *object, void *event, void 
*data);
 static void _etk_tooltips_key_down_cb(Etk_Object *object, void *event, void 
*data);
 static void _etk_tooltips_widget_unrealize_cb(Etk_Object *object, void *data);
 static int _etk_tooltips_timer_cb(void *data);
   
 static Etk_Widget *_etk_tooltips_window = NULL;
 static Etk_Widget *_etk_tooltips_label = NULL;
+static Etk_Object *_etk_tooltips_cur_object = NULL;
 static double _etk_tooltips_delay = 1.0;
 static Etk_Bool _etk_tooltips_enabled = ETK_FALSE;
 static Etk_Bool _etk_tooltips_initialized = ETK_FALSE;
@@ -107,21 +109,41 @@
    
    key = calloc(32, sizeof(char));
    snprintf(key, 32 * sizeof(char), "%p", widget);
+
    if((tip_text = evas_hash_find(_etk_tooltips_hash, key)) != NULL)
    {
-      free(tip_text);
-      tip_text = strdup(text);
-      _etk_tooltips_hash = evas_hash_modify(_etk_tooltips_hash, key, tip_text);
+      if(text == NULL)
+      {
+        _etk_tooltips_hash = evas_hash_del(_etk_tooltips_hash, key, tip_text);
+        etk_signal_disconnect("mouse_in", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_in_cb));
+        etk_signal_disconnect("mouse_out", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_out_cb));
+        etk_signal_disconnect("mouse_move", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_move_cb));
+        etk_signal_disconnect("mouse_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_down_cb));
+        etk_signal_disconnect("mouse_wheel", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_wheel_cb));
+        etk_signal_disconnect("key_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_key_down_cb));
+        etk_signal_disconnect("unrealize", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_widget_unrealize_cb));
+        free(tip_text);         
+      }
+      else
+      {
+        free(tip_text);         
+        tip_text = strdup(text);
+        _etk_tooltips_hash = evas_hash_modify(_etk_tooltips_hash, key, 
tip_text);
+      }
    }
    else
    {
-      _etk_tooltips_hash = evas_hash_add(_etk_tooltips_hash, key, 
strdup(text));
-      etk_signal_connect("mouse_in", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_in_cb), NULL);
-      etk_signal_connect("mouse_out", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_out_cb), NULL);
-      etk_signal_connect("mouse_move", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_move_cb), NULL);
-      etk_signal_connect("mouse_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_down_cb), NULL);
-      etk_signal_connect("key_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_key_down_cb), NULL);
-      etk_signal_connect("unrealize", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_widget_unrealize_cb), NULL);
+      if(text != NULL)
+      {
+        _etk_tooltips_hash = evas_hash_add(_etk_tooltips_hash, key, 
strdup(text));
+        etk_signal_connect("mouse_in", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_in_cb), NULL);
+        etk_signal_connect("mouse_out", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_out_cb), NULL);
+        etk_signal_connect("mouse_move", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_move_cb), NULL);
+        etk_signal_connect("mouse_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_down_cb), NULL);
+        etk_signal_connect("mouse_wheel", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_mouse_wheel_cb), NULL);
+        etk_signal_connect("key_down", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_key_down_cb), NULL);
+        etk_signal_connect("unrealize", ETK_OBJECT(widget), 
ETK_CALLBACK(_etk_tooltips_widget_unrealize_cb), NULL);
+      }
    }
    free(key);
 }
@@ -147,40 +169,36 @@
    return NULL;
 }
 
-static void _etk_tooltips_mouse_in_cb(Etk_Object *object, 
Etk_Event_Mouse_In_Out *event, void *data)
-{
-#if HAVE_ECORE_X
-   if(!_etk_tooltips_enabled)
-     return;
-   
-   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, object);
-#endif   
-}
-
-static int _etk_tooltips_timer_cb(void *data)
+/**
+ * @brief Instantly pop up the tooltip if applicable
+ * @param widget the widget we want to pop up on
+ */
+void etk_tooltips_pop_up(Etk_Widget *widget)
 {
 #if HAVE_ECORE_X   
-   const char *text;
+   const char *text = NULL;
    int x, y;
    char *key;
+
+   if(!ETK_IS_OBJECT(widget))
+     return;
    
    key = calloc(32, sizeof(char));
-   snprintf(key, 32 * sizeof(char), "%p", data);
+   snprintf(key, 32 * sizeof(char), "%p", ETK_OBJECT(widget));
    if((text = evas_hash_find(_etk_tooltips_hash, key)) == NULL)
    {
       free(key);
       _etk_tooltips_timer = NULL;      
-      return 0;
-   }
-      
+      return;
+   } 
+   
      {
        /* We are doing this because if the label / window grow, then are not 
shrinking anymore */
-       etk_object_destroy(ETK_OBJECT(_etk_tooltips_window));   
+       etk_object_destroy(ETK_OBJECT(_etk_tooltips_window));
        _etk_tooltips_window = etk_widget_new(ETK_WINDOW_TYPE, "theme_group", 
"tooltip", "decorated", ETK_FALSE, "skip_taskbar", ETK_TRUE, "skip_pager", 
ETK_TRUE, NULL);
-               
+
        _etk_tooltips_label = etk_label_new(NULL);
-       etk_container_add(ETK_CONTAINER(_etk_tooltips_window), 
_etk_tooltips_label);   
-   
+       etk_container_add(ETK_CONTAINER(_etk_tooltips_window), 
_etk_tooltips_label);
      }
    
    etk_label_set(ETK_LABEL(_etk_tooltips_label), text);   
@@ -190,51 +208,96 @@
    etk_widget_show_all(_etk_tooltips_window);
    free(key);
 #endif  
-   _etk_tooltips_timer = NULL;
+   _etk_tooltips_timer = NULL;      
+}
+
+/**
+ * @brief Instantly pop down the tooltip if applicable
+ */
+void etk_tooltips_pop_down()
+{
+   if(!_etk_tooltips_enabled)
+     return;
+   
+   etk_widget_hide(_etk_tooltips_window);
+   if(_etk_tooltips_timer)
+     ecore_timer_del(_etk_tooltips_timer);
+   _etk_tooltips_cur_object = NULL;
+}
+
+/* Callback for when the mouse enters a widget */
+static void _etk_tooltips_mouse_in_cb(Etk_Object *object, 
Etk_Event_Mouse_In_Out *event, void *data)
+{
+#if HAVE_ECORE_X
+   if(!_etk_tooltips_enabled || !ETK_IS_OBJECT(object))
+     return;
+
+   _etk_tooltips_cur_object = object;
+   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, NULL);
+#endif   
+}
+
+/* Timer callback, pops up the tooltip */
+static int _etk_tooltips_timer_cb(void *data)
+{
+   etk_tooltips_pop_up(ETK_WIDGET(_etk_tooltips_cur_object));
    return 0;
 }
 
+/* Callback for when the mouse leave the widget */
 static void _etk_tooltips_mouse_out_cb(Etk_Object *object, 
Etk_Event_Mouse_In_Out *event, void *data)
 {
    if(!_etk_tooltips_enabled)
      return;
    
-   ecore_timer_del(_etk_tooltips_timer);
+   etk_tooltips_pop_down();
 }
 
+/* Callback for when the mouse moves on the widget */
 static void _etk_tooltips_mouse_move_cb(Etk_Object *object, 
Etk_Event_Mouse_Move *event, void *data)
 {
    if(!_etk_tooltips_enabled)
      return;
    
-   etk_widget_hide(_etk_tooltips_window);
-   if(_etk_tooltips_timer)
-     ecore_timer_del(_etk_tooltips_timer);
-   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, object);
+   etk_tooltips_pop_down();
+   _etk_tooltips_cur_object = object;
+   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, NULL);
 }
 
+/* Callback for when the mouse clicks the widget */
 static void _etk_tooltips_mouse_down_cb(Etk_Object *object, void *event, void 
*data)
 {
    if(!_etk_tooltips_enabled)
      return;
    
-   etk_widget_hide(_etk_tooltips_window);
-   if(_etk_tooltips_timer)
-     ecore_timer_del(_etk_tooltips_timer);
-   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, object);
+   etk_tooltips_pop_down();
+   _etk_tooltips_cur_object = object;   
+   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, NULL);
+}
+
+/* Callback for when the mouse wheel is moved on the widget */
+static void _etk_tooltips_mouse_wheel_cb(Etk_Object *object, void *event, void 
*data)
+{
+   if(!_etk_tooltips_enabled)
+     return;
+   
+   etk_tooltips_pop_down();
+   _etk_tooltips_cur_object = object;   
+   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, NULL);
 }
 
+/* Callback for when the a key is pressed on the widget */
 static void _etk_tooltips_key_down_cb(Etk_Object *object, void *event, void 
*data)
 {
    if(!_etk_tooltips_enabled)
      return;
    
-   etk_widget_hide(_etk_tooltips_window);
-   if(_etk_tooltips_timer)
-     ecore_timer_del(_etk_tooltips_timer);
-   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, object);
+   etk_tooltips_pop_down();
+   _etk_tooltips_cur_object = object;   
+   _etk_tooltips_timer = ecore_timer_add(_etk_tooltips_delay, 
_etk_tooltips_timer_cb, NULL);
 }
 
+/* Callback for when the widget is unrealized */
 static void _etk_tooltips_widget_unrealize_cb(Etk_Object *object, void *data)
 {
    char *key;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tooltips.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_tooltips.h      5 Mar 2006 23:52:58 -0000       1.1
+++ etk_tooltips.h      6 Mar 2006 22:49:12 -0000       1.2
@@ -17,6 +17,8 @@
 
 void etk_tooltips_tip_set(Etk_Widget *widget, const char *text);
 const char *etk_tooltips_tip_get(Etk_Widget *widget);
+void etk_tooltips_pop_up(Etk_Widget *widget);
+void etk_tooltips_pop_down();
   
 /** @} */
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -3 -r1.54 -r1.55
--- etk_tree.c  4 Mar 2006 23:29:47 -0000       1.54
+++ etk_tree.c  6 Mar 2006 22:49:12 -0000       1.55
@@ -60,6 +60,8 @@
    ETK_TREE_ROW_ACTIVATED_SIGNAL,
    ETK_TREE_ROW_EXPANDED_SIGNAL,
    ETK_TREE_ROW_COLLAPSED_SIGNAL,
+   ETK_TREE_ROW_MOUSE_IN_SIGNAL,
+   ETK_TREE_ROW_MOUSE_OUT_SIGNAL,     
    ETK_TREE_SELECT_ALL_SIGNAL,
    ETK_TREE_UNSELECT_ALL_SIGNAL,
    ETK_TREE_NUM_SIGNALS
@@ -116,6 +118,8 @@
 static void _etk_tree_row_pressed_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _etk_tree_row_clicked_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _etk_tree_row_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
+static void _etk_tree_row_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
+static void _etk_tree_row_mouse_out_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _etk_tree_focus_cb(Etk_Object *object, void *event, void *data);
 static void _etk_tree_unfocus_cb(Etk_Object *object, void *event, void *data);
 static void _etk_tree_key_down_cb(Etk_Object *object, void *event, void *data);
@@ -173,6 +177,8 @@
       _etk_tree_signals[ETK_TREE_ROW_ACTIVATED_SIGNAL] = 
etk_signal_new("row_activated", tree_type, -1, etk_marshaller_VOID__POINTER, 
NULL, NULL);
       _etk_tree_signals[ETK_TREE_ROW_EXPANDED_SIGNAL] = 
etk_signal_new("row_expaned", tree_type, -1, etk_marshaller_VOID__POINTER, 
NULL, NULL);
       _etk_tree_signals[ETK_TREE_ROW_COLLAPSED_SIGNAL] = 
etk_signal_new("row_collapsed", tree_type, -1, etk_marshaller_VOID__POINTER, 
NULL, NULL);
+      _etk_tree_signals[ETK_TREE_ROW_MOUSE_IN_SIGNAL] = 
etk_signal_new("row_mouse_in", tree_type, -1, etk_marshaller_VOID__POINTER, 
NULL, NULL);
+      _etk_tree_signals[ETK_TREE_ROW_MOUSE_OUT_SIGNAL] = 
etk_signal_new("row_mouse_out", tree_type, -1, etk_marshaller_VOID__POINTER, 
NULL, NULL);
       _etk_tree_signals[ETK_TREE_SELECT_ALL_SIGNAL] = 
etk_signal_new("select_all", tree_type, -1, etk_marshaller_VOID__VOID, NULL, 
NULL);
       _etk_tree_signals[ETK_TREE_UNSELECT_ALL_SIGNAL] = 
etk_signal_new("unselect_all", tree_type, -1, etk_marshaller_VOID__VOID, NULL, 
NULL);
 
@@ -1922,7 +1928,7 @@
       event.modifiers = evas_event->modifiers;
       event.locks = evas_event->locks;
       event.flags = evas_event->flags;
-      event.timestamp = evas_event->timestamp;      
+      event.timestamp = evas_event->timestamp;
 
       if(!row_objects->row->tree->dnd_event)
        {
@@ -2005,11 +2011,61 @@
    
    if(ev->buttons & 0x001 && !_etk_tree_drag_started)
    {
-      Etk_Drag *drag;
+      Etk_Widget *drag;
       
       _etk_tree_drag_started = ETK_TRUE;
       drag = (ETK_WIDGET(row_objects->row->tree))->drag;      
-      etk_drag_begin(drag);      
+      etk_drag_begin(ETK_DRAG(drag));
+   }
+}
+
+/* Called when the mouse moves into a row */
+static void _etk_tree_row_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
+{
+   Etk_Event_Mouse_In_Out event;
+   Evas_Event_Mouse_In *evas_event;
+   Etk_Tree_Row_Objects *row_objects;
+   
+   evas_event = event_info;
+   if (!(row_objects = data) || !row_objects->row)
+     return;   
+   
+   event.canvas.x = evas_event->canvas.x;
+   event.canvas.y = evas_event->canvas.y;
+   event.widget.x = evas_event->canvas.x - 
ETK_WIDGET(row_objects->row->tree)->inner_geometry.x;
+   event.widget.y = evas_event->canvas.y - 
ETK_WIDGET(row_objects->row->tree)->inner_geometry.y;
+   event.modifiers = evas_event->modifiers;
+   event.locks = evas_event->locks;
+   event.timestamp = evas_event->timestamp;   
+   
+   if(!_etk_tree_drag_started)
+   {
+      etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_MOUSE_IN_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
+   }
+}
+
+/* Called when the mouse moves outside a row */
+static void _etk_tree_row_mouse_out_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
+{
+   Etk_Event_Mouse_In_Out event;
+   Evas_Event_Mouse_Out *evas_event;
+   Etk_Tree_Row_Objects *row_objects;
+   
+   evas_event = event_info;
+   if (!(row_objects = data) || !row_objects->row)
+     return;   
+   
+   event.canvas.x = evas_event->canvas.x;
+   event.canvas.y = evas_event->canvas.y;
+   event.widget.x = evas_event->canvas.x - 
ETK_WIDGET(row_objects->row->tree)->inner_geometry.x;
+   event.widget.y = evas_event->canvas.y - 
ETK_WIDGET(row_objects->row->tree)->inner_geometry.y;
+   event.modifiers = evas_event->modifiers;
+   event.locks = evas_event->locks;
+   event.timestamp = evas_event->timestamp;   
+   
+   if(!_etk_tree_drag_started)
+   {
+      etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_MOUSE_OUT_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
    }
 }
 
@@ -2581,6 +2637,8 @@
    evas_object_event_callback_add(new_row_objects->background, 
EVAS_CALLBACK_MOUSE_DOWN, _etk_tree_row_pressed_cb, new_row_objects);
    evas_object_event_callback_add(new_row_objects->background, 
EVAS_CALLBACK_MOUSE_UP, _etk_tree_row_clicked_cb, new_row_objects);
    evas_object_event_callback_add(new_row_objects->background, 
EVAS_CALLBACK_MOUSE_MOVE, _etk_tree_row_mouse_move_cb, new_row_objects);
+   evas_object_event_callback_add(new_row_objects->background, 
EVAS_CALLBACK_MOUSE_IN, _etk_tree_row_mouse_in_cb, new_row_objects);
+   evas_object_event_callback_add(new_row_objects->background, 
EVAS_CALLBACK_MOUSE_OUT, _etk_tree_row_mouse_out_cb, new_row_objects);
    etk_widget_member_object_add(tree->grid, new_row_objects->background);
    
    /* Creates the expander of the row */




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to