Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_tree.c etk_tree.h 


Log Message:
add ability for Etk_Tree to receive drops. once a drop is received, just fetch 
the current selected row in the drop cb.

===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- etk_tree.c  15 Feb 2006 12:48:39 -0000      1.33
+++ etk_tree.c  20 Feb 2006 02:41:13 -0000      1.34
@@ -13,6 +13,8 @@
 #include "etk_signal.h"
 #include "etk_signal_callback.h"
 #include "etk_utils.h"
+#include "etk_window.h"
+#include "config.h"
 
 /**
  * @addtogroup Etk_Tree
@@ -120,6 +122,8 @@
 static void _etk_tree_header_mouse_move_cb(Etk_Object *object, void *event, 
void *data);
 static void _etk_tree_header_mouse_in_cb(Etk_Object *object, void *event, void 
*data);
 static void _etk_tree_header_mouse_out_cb(Etk_Object *object, void *event, 
void *data);
+static void _etk_tree_drag_drop_cb(Etk_Object *object, void *event, void 
*data);
+
 
 static void _etk_tree_update(Etk_Tree *tree);
 static int _etk_tree_rows_draw(Etk_Tree *tree, Etk_Tree_Row *first_row, 
Evas_List **items_objects,
@@ -1529,6 +1533,8 @@
    tree->xoffset = 0;
    tree->yoffset = 0.0;
 
+   tree->dnd_event = ETK_FALSE;
+   
    ETK_WIDGET(tree)->size_allocate = _etk_tree_size_allocate;
    
    etk_signal_connect("realize", ETK_OBJECT(tree), 
ETK_CALLBACK(_etk_tree_realize_cb), NULL);
@@ -1536,6 +1542,7 @@
    etk_signal_connect("focus", ETK_OBJECT(tree), 
ETK_CALLBACK(_etk_tree_focus_cb), NULL);
    etk_signal_connect("unfocus", ETK_OBJECT(tree), 
ETK_CALLBACK(_etk_tree_unfocus_cb), NULL);
    etk_signal_connect("key_down", ETK_OBJECT(tree), 
ETK_CALLBACK(_etk_tree_key_down_cb), NULL);
+   etk_signal_connect("drag_drop", ETK_OBJECT(tree), 
ETK_CALLBACK(_etk_tree_drag_drop_cb), NULL);   
 }
 
 /* Destroys the tree */
@@ -1888,13 +1895,14 @@
       event.locks = evas_event->locks;
       event.flags = evas_event->flags;
       event.timestamp = evas_event->timestamp;
-      etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_CLICKED_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
+      if(!row_objects->row->tree->dnd_event)
+       etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_CLICKED_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
       
       /* We have to check this again because the user can remove the row on 
the "clicked" signal */
       if (!row_objects->row)
          return;
       
-      if (!(evas_event->flags & EVAS_BUTTON_TRIPLE_CLICK) && 
(evas_event->button == 1))
+      if (!(evas_event->flags & EVAS_BUTTON_TRIPLE_CLICK) && 
(evas_event->button == 1) && !row_objects->row->tree->dnd_event)
          etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_ACTIVATED_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row);
    }
    
@@ -1932,8 +1940,11 @@
       event.locks = evas_event->locks;
       event.flags = EVAS_BUTTON_NONE;
       event.timestamp = evas_event->timestamp;
-      
-      etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_CLICKED_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
+
+      if(row_objects->row->tree->dnd_event)             
+       row_objects->row->tree->dnd_event = ETK_FALSE;
+      else
+       etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_CLICKED_SIGNAL], 
ETK_OBJECT(row_objects->row->tree), NULL, row_objects->row, &event);
       _etk_tree_last_clicked_row = row_objects->row;
    }
 }
@@ -2029,6 +2040,8 @@
    Etk_Tree_Col *col;
    Etk_Event_Mouse_Up_Down *down_event;
 
+   printf("mouse down!\n");
+   
    if (!(col = data) || !(down_event = event))
       return;
 
@@ -2664,13 +2677,16 @@
 {
    if (!tree || !row)
       return;
-
+  
    if (!tree->multiple_select || !modifiers)
    {
       etk_tree_unselect_all(tree);
       row->selected = ETK_TRUE;
       tree->last_selected = row;
-      etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
+      if(tree->dnd_event)      
+       etk_widget_theme_object_signal_emit(ETK_WIDGET(tree), "selected");
+      else
+       etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
    }
    else
    {
@@ -2703,7 +2719,11 @@
             }
          }
          tree->last_selected = row;
-         etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
+        
+        if(tree->dnd_event)      
+          etk_widget_theme_object_signal_emit(ETK_WIDGET(tree), "selected");
+        else
+          etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
       }
       else if (evas_key_modifier_is_set(modifiers, "Control"))
       {
@@ -2711,13 +2731,19 @@
          {
             row->selected = ETK_FALSE;
             tree->last_selected = row;
-            etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_UNSELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
+           if(tree->dnd_event)      
+             etk_widget_theme_object_signal_emit(ETK_WIDGET(tree), "selected");
+           else
+             etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
          }
          else
          {
             row->selected = ETK_TRUE;
             tree->last_selected = row;
-            etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
+           if(tree->dnd_event)      
+             etk_widget_theme_object_signal_emit(ETK_WIDGET(tree), "selected");
+           else
+             etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
          }
       }
       else
@@ -2725,7 +2751,10 @@
          etk_tree_unselect_all(tree);
          row->selected = ETK_TRUE;
          tree->last_selected = row;
-         etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
+        if(tree->dnd_event)      
+          etk_widget_theme_object_signal_emit(ETK_WIDGET(tree), "selected");
+        else
+          etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], 
ETK_OBJECT(tree), NULL, row);
       }
    }
 
@@ -2758,3 +2787,31 @@
       _etk_tree_heapify(tree, heap, max, size, compare_cb, asc, col, data);
    }
 }
+
+static void _etk_tree_drag_drop_cb(Etk_Object *object, void *event, void *data)
+{
+#if HAVE_ECORE_X   
+   Etk_Event_Selection_Request *ev;
+   Etk_Widget *win;
+      
+   win = etk_widget_toplevel_parent_get(ETK_WIDGET(object));
+   if(ETK_IS_WINDOW(win))
+   {
+      Etk_Tree *tree;
+      
+      tree = ETK_TREE(object);
+      tree->dnd_event = ETK_TRUE;
+      
+      evas_event_feed_mouse_down(etk_toplevel_widget_evas_get(win), 1,
+                                EVAS_BUTTON_NONE,
+                                ecore_x_current_time_get(),
+                                NULL);
+      
+      evas_event_feed_mouse_up(etk_toplevel_widget_evas_get(win), 1,
+                              EVAS_BUTTON_NONE,
+                              ecore_x_current_time_get(),
+                              NULL);      
+   }      
+#endif   
+}
+  
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- etk_tree.h  14 Feb 2006 18:39:05 -0000      1.16
+++ etk_tree.h  20 Feb 2006 02:41:13 -0000      1.17
@@ -102,6 +102,8 @@
    int cell_margins[4];
    int expander_size;
    Etk_Color separator_color;
+   
+   Etk_Bool dnd_event;
 };
 
 /**




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to