Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_dnd.c etk_drag.c etk_drag.h etk_toplevel_widget.h etk_widget.c etk_window.c Log Message: - add parent widget property to Etk_Drag - add cursor support for dragging =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_dnd.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- etk_dnd.c 15 Feb 2006 15:03:17 -0000 1.9 +++ etk_dnd.c 16 Feb 2006 01:40:16 -0000 1.10 @@ -9,6 +9,7 @@ #include "etk_widget.h" #include "etk_toplevel_widget.h" #include "etk_window.h" +#include "etk_drag.h" #include "config.h" /* Some notes for when we're developing this: @@ -494,13 +495,11 @@ if(!ev->will_accept) { - // etk_toplevel_widget_pointer_pop(etk_widget_toplevel_parent_get(ETK_WIDGET(_etk_drag_widget)), ETK_POINTER_RESIZE_BR); + etk_toplevel_widget_pointer_push(etk_widget_toplevel_parent_get(etk_drag_parent_widget_get(ETK_DRAG(_etk_drag_widget))), ETK_POINTER_DEFAULT); return 1; } -// etk_toplevel_widget_pointer_push(etk_widget_toplevel_parent_get(ETK_WIDGET(_etk_drag_widget)), ETK_POINTER_RESIZE_BR); - etk_toplevel_widget_pointer_push(ETK_TOPLEVEL_WIDGET(ETK_WINDOW(_etk_drag_widget)), ETK_POINTER_RESIZE_BR); - + etk_toplevel_widget_pointer_push(etk_widget_toplevel_parent_get(etk_drag_parent_widget_get(ETK_DRAG(_etk_drag_widget))), ETK_POINTER_DND_DROP); return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_drag.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etk_drag.c 15 Feb 2006 15:03:17 -0000 1.1 +++ etk_drag.c 16 Feb 2006 01:40:16 -0000 1.2 @@ -9,12 +9,24 @@ #include "etk_window.h" #include "config.h" +/** + * @addtogroup Etk_Ddrag + * @{ + */ + +enum _Etk_Drag_Propery_Id +{ + ETK_DRAG_PARENT_WIDGET_PROPERTY +}; + Etk_Drag *_etk_drag_widget = NULL; static Ecore_Event_Handler *_etk_drag_mouse_move_handler; static Ecore_Event_Handler *_etk_drag_mouse_up_handler; static void _etk_drag_constructor(Etk_Drag *drag); +static void _etk_drag_property_set(Etk_Object *object, int property_id, Etk_Property_Value *value); +static void _etk_drag_property_get(Etk_Object *object, int property_id, Etk_Property_Value *value); static int _etk_drag_mouse_up_cb(void *data, int type, void *event); static int _etk_drag_mouse_move_cb(void *data, int type, void *event); @@ -28,7 +40,13 @@ if(!drag_type) { - drag_type = etk_type_new("Etk_Drag", ETK_WINDOW_TYPE, sizeof(Etk_Drag), ETK_CONSTRUCTOR(_etk_drag_constructor), NULL); + drag_type = etk_type_new("Etk_Drag", ETK_WINDOW_TYPE, sizeof(Etk_Drag), ETK_CONSTRUCTOR(_etk_drag_constructor), NULL); + + etk_type_property_add(drag_type, "parent_widget", ETK_DRAG_PARENT_WIDGET_PROPERTY, ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_pointer(NULL)); + + drag_type->property_set = _etk_drag_property_set; + drag_type->property_get = _etk_drag_property_get; + } return drag_type; @@ -36,11 +54,12 @@ /** * @brief Create a new drag widget + * @param widget the parent widget of this drag * @return Returns the new drag widget */ -Etk_Widget *etk_drag_new() +Etk_Widget *etk_drag_new(Etk_Widget *widget) { - return etk_widget_new(ETK_DRAG_TYPE, NULL); + return etk_widget_new(ETK_DRAG_TYPE, "parent_widget", widget, NULL); } void etk_drag_types_set(Etk_Drag *drag, const char **types, unsigned int num_types) @@ -73,6 +92,32 @@ _etk_drag_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, _etk_drag_mouse_up_cb, drag); } +/** + * @brief Sets the parent widget of a drag + * @param drag a drag + * @param widget a widget + */ +void etk_drag_parent_widget_set(Etk_Drag *drag, Etk_Widget *widget) +{ + if(!drag || !widget) + return; + + drag->widget = widget; +} + +/** + * @brief Gets the parent widget of a drag + * @param drag a drag + * @return Returns the parent widget of the drag + */ +Etk_Widget *etk_drag_parent_widget_get(Etk_Drag *drag) +{ + if(!drag) + return NULL; + + return drag->widget; +} + /************************** * * Etk specific functions @@ -85,11 +130,53 @@ if (!drag) return; + drag->widget = NULL; + drag->types = NULL; + drag->num_types = 0; + drag->data = NULL; + drag->data_size = 0; + etk_window_decorated_set(ETK_WINDOW(drag), ETK_FALSE); etk_window_shaped_set(ETK_WINDOW(drag), ETK_TRUE); etk_window_skip_pager_hint_set(ETK_WINDOW(drag), ETK_TRUE); etk_window_skip_taskbar_hint_set(ETK_WINDOW(drag), ETK_TRUE); - ecore_x_dnd_aware_set((ETK_WINDOW(drag))->x_window, 1); + ecore_x_dnd_aware_set((ETK_WINDOW(drag))->x_window, 1); +} + +/* Sets the property whose id is "property_id" to the value "value" */ +static void _etk_drag_property_set(Etk_Object *object, int property_id, Etk_Property_Value *value) +{ + Etk_Dialog *drag; + + if (!(drag = ETK_DRAG(object)) || !value) + return; + + switch (property_id) + { + case ETK_DRAG_PARENT_WIDGET_PROPERTY: + etk_drag_parent_widget_set(drag, etk_property_value_pointer_get(value)); + break; + default: + break; + } +} + +/* Gets the value of the property whose id is "property_id" */ +static void _etk_drag_property_get(Etk_Object *object, int property_id, Etk_Property_Value *value) +{ + Etk_Drag *drag; + + if (!(drag = ETK_DRAG(object)) || !value) + return; + + switch (property_id) + { + case ETK_DRAG_PARENT_WIDGET_PROPERTY: + etk_property_value_pointer_set(value, etk_drag_parent_widget_get(drag)); + break; + default: + break; + } } static int _etk_drag_mouse_up_cb(void *data, int type, void *event) @@ -102,6 +189,7 @@ ecore_event_handler_del(_etk_drag_mouse_up_handler); ecore_x_dnd_drop(); etk_widget_drag_end(ETK_WIDGET(drag)); + etk_toplevel_widget_pointer_push(etk_widget_toplevel_parent_get(drag->widget), ETK_POINTER_DEFAULT); return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_drag.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etk_drag.h 15 Feb 2006 15:03:17 -0000 1.1 +++ etk_drag.h 16 Feb 2006 01:40:16 -0000 1.2 @@ -14,9 +14,8 @@ /* private: */ /* Inherit from Etk_Window */ Etk_Window window; - - int dx, dy; - int win_x, win_y; + + Etk_Widget *widget; char **types; unsigned int num_types; @@ -24,11 +23,14 @@ int data_size; }; -Etk_Widget *etk_drag_new(); +Etk_Type *etk_drag_type_get(); +Etk_Widget *etk_drag_new(Etk_Widget *widget); void etk_drag_types_set(Etk_Drag *drag, const char **types, unsigned int num_types); void etk_drag_data_set(Etk_Drag *drag, void *data, int size); void etk_drag_begin(Etk_Drag *drag); - +void etk_drag_parent_widget_set(Etk_Drag *drag, Etk_Widget *widget); +Etk_Widget *etk_drag_parent_widget_get(Etk_Drag *drag); + /** @} */ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_toplevel_widget.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- etk_toplevel_widget.h 20 Nov 2005 10:33:28 -0000 1.4 +++ etk_toplevel_widget.h 16 Feb 2006 01:40:16 -0000 1.5 @@ -25,6 +25,7 @@ enum _Etk_Pointer_Type { ETK_POINTER_DEFAULT, + ETK_POINTER_DND_DROP, ETK_POINTER_MOVE, ETK_POINTER_H_DOUBLE_ARROW, ETK_POINTER_V_DOUBLE_ARROW, =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- etk_widget.c 15 Feb 2006 21:01:33 -0000 1.36 +++ etk_widget.c 16 Feb 2006 01:40:16 -0000 1.37 @@ -1328,7 +1328,7 @@ widget->accepts_dnd = ETK_TRUE; widget->dnd_source = ETK_TRUE; _etk_widget_dnd_source_widgets = evas_list_append(_etk_widget_dnd_source_widgets, widget); - widget->drag = etk_drag_new(); + widget->drag = etk_drag_new(widget); etk_signal_connect("mouse_move", ETK_OBJECT(widget), ETK_CALLBACK(_etk_widget_dnd_drag_mouse_move_cb), NULL); etk_signal_connect("drag_end", ETK_OBJECT(widget->drag), ETK_CALLBACK(_etk_widget_dnd_drag_end_cb), NULL); } @@ -1425,7 +1425,7 @@ if(num) *num = widget->dnd_types_num; - return widget->dnd_types; + return (const char **)(widget->dnd_types); } /** @@ -1606,8 +1606,6 @@ /* Destroys the widget */ static void _etk_widget_destructor(Etk_Widget *widget) { - int i; - if (!widget) return; =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_window.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- etk_window.c 12 Feb 2006 20:08:20 -0000 1.12 +++ etk_window.c 16 Feb 2006 01:40:16 -0000 1.13 @@ -620,6 +620,9 @@ switch (pointer_type) { + case ETK_POINTER_DND_DROP: + x_pointer_type = ECORE_X_CURSOR_PLUS; + break; case ETK_POINTER_MOVE: x_pointer_type = ECORE_X_CURSOR_FLEUR; break; ------------------------------------------------------- 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