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