Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_dnd.c ewl_dnd.h ewl_misc.c Log Message: - cleanup =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_dnd.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ewl_dnd.c 29 Dec 2005 17:12:09 -0000 1.6 +++ ewl_dnd.c 29 Dec 2005 17:45:01 -0000 1.7 @@ -6,40 +6,81 @@ #include <Ecore_X.h> #define EWL_DND_WINDOW_ROOT 0 + static int ewl_dragging_current = 0; static int ewl_dnd_move_count = 0; -static Ecore_Evas* _ewl_dnd_drag_canvas; -static Evas* _ewl_dnd_drag_evas; -static Evas_Object* _ewl_dnd_drag_image; -static Ecore_X_Window _ewl_dnd_evas_win; -static Ecore_X_Window _ewl_dnd_drag_win = 0; - -static Ewl_Widget* _ewl_dnd_widget = NULL; +static Ecore_Evas *ewl_dnd_drag_canvas; +static Evas *ewl_dnd_drag_evas; +static Evas_Object *ewl_dnd_drag_image; +static Ecore_X_Window ewl_dnd_evas_win; +static Ecore_X_Window ewl_dnd_drag_win = 0; + +static Ewl_Widget *ewl_dnd_widget = NULL; + +static Ecore_Hash *ewl_dnd_position_hash; +static int ewl_dnd_status = 0; + +Ecore_Event_Handler *ewl_dnd_mouse_up_handler; +Ecore_Event_Handler *ewl_dnd_mouse_move_handler; + +char *ewl_dnd_drop_types[] = { "text/uri-list" }; + +static int ewl_dnd_event_mouse_up(void *data, int type, void *event); +static int ewl_dnd_event_dnd_move(void *data, int type, void *event); + +/** + * @return Returns TRUE if the DND system was successfully initialized, + * FALSE otherwise + */ +int +ewl_dnd_init(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); -static Ecore_Hash* ewl_dnd_position_hash; -static int _ewl_dnd_status=0; + ewl_dnd_position_hash = ecore_hash_new(ecore_direct_hash, ecore_direct_compare); + if (!ewl_dnd_position_hash) + DRETURN_INT(FALSE, DLEVEL_STABLE); -Ecore_Event_Handler* _ewl_dnd_mouse_up_handler; -Ecore_Event_Handler* _ewl_dnd_mouse_move_handler; + ewl_dragging_current = 0; + ewl_dnd_status = 1; + DRETURN_INT(TRUE, DLEVEL_STABLE); +} -char *drop_types[] = { "text/uri-list" }; -char *data[] = { "file:///home/chaos/wlan-key2" }; +/** + * @brief Shuts down the EWL DND system + */ +void +ewl_dnd_shutdown(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + ecore_hash_destroy(ewl_dnd_position_hash); -void ewl_dnd_init(void) { - ewl_dnd_position_hash = ecore_hash_new(ecore_direct_hash, ecore_direct_compare); - ewl_dragging_current = 0; - _ewl_dnd_status = 1; + DLEAVE_FUNCTION(DLEVEL_STABLE); } +/** + * @param w: The widget to add + * @return Returns no value + * @brief: Adds the given widget @a w to the position hash + */ +void +ewl_dnd_position_windows_set(Ewl_Widget *w) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, "widget"); -void ewl_dnd_position_windows_set(Ewl_Widget* w) { - ecore_hash_set(ewl_dnd_position_hash, w, (void*)1); -} - + ecore_hash_set(ewl_dnd_position_hash, w, (void *)1); + DLEAVE_FUNCTION(DLEVEL_STABLE); +} +/** + * @param widget: The widget to get the types for + * @return Returns the Ewl_Dnd_Types for the given widget + */ Ewl_Dnd_Types * ewl_dnd_types_for_widget_get(Ewl_Widget *widget) { @@ -64,62 +105,190 @@ DRETURN_PTR(NULL, DLEVEL_STABLE); } +/** + * @param: The widget to start dragging + * @return Returns no value + */ +void +ewl_drag_start(Ewl_Widget *w) +{ + int width, height; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, "widget"); + + if (!ewl_dnd_status || ewl_dragging_current) + DRETURN(DLEVEL_STABLE); + + ewl_dragging_current = 1; + ewl_dnd_widget = w; + ewl_dnd_move_count = 0; + + ewl_dnd_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, + ewl_dnd_event_mouse_up, NULL); + ewl_dnd_mouse_move_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, + ewl_dnd_event_dnd_move, NULL); + + ewl_dnd_drag_canvas = ecore_evas_software_x11_new(NULL, + EWL_DND_WINDOW_ROOT, + 64, 64, 64, 64); + ewl_dnd_drag_evas = ecore_evas_get(ewl_dnd_drag_canvas); + + ecore_evas_shaped_set(ewl_dnd_drag_canvas, 1); + ecore_evas_software_x11_direct_resize_set(ewl_dnd_drag_canvas, 1); + + ewl_dnd_evas_win = ecore_evas_software_x11_window_get(ewl_dnd_drag_canvas); + ecore_x_window_resize(ewl_dnd_evas_win, 64, 64); + ecore_evas_override_set(ewl_dnd_drag_canvas, 1); + + //ecore_evas_software_x11_direct_resize_set(ewl_dnd_drag_evas, 1); + ecore_evas_ignore_events_set(ewl_dnd_drag_canvas, 1); + + /* XXX Setup a cursor (This needs to become generic) */ + ewl_dnd_drag_image = evas_object_image_add(ewl_dnd_drag_evas); + evas_object_image_file_set(ewl_dnd_drag_image, PACKAGE_DATA_DIR + "/images/World.png", 0); + evas_object_image_fill_set(ewl_dnd_drag_image, 0, 0, 50, 50); + evas_object_resize(ewl_dnd_drag_image, 50, 50); + evas_object_show(ewl_dnd_drag_image); + + /* Setup the dnd event capture window */ + ecore_x_window_geometry_get(EWL_DND_WINDOW_ROOT, NULL, NULL, + &width, &height); + ewl_dnd_drag_win = ecore_x_window_input_new(EWL_DND_WINDOW_ROOT, 0, 0, + width, height); + + /* Finally show the drag window */ + ecore_x_window_show(ewl_dnd_drag_win); + + /* Confine the pointer to our event windows */ + ecore_x_pointer_confine_grab(ewl_dnd_drag_win); + ecore_x_keyboard_grab(ewl_dnd_drag_win); + + ecore_x_dnd_aware_set(ewl_dnd_drag_win, 1); + ecore_x_dnd_aware_set(ewl_dnd_evas_win, 1); + ecore_x_mwm_borderless_set(ewl_dnd_evas_win, 1); + + /* Start the drag operation */ + ecore_x_dnd_types_set(ewl_dnd_drag_win, ewl_dnd_drop_types, 1); + ecore_x_dnd_begin(ewl_dnd_drag_win, NULL, 0); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @brief Disables DND + * @return Returns no value + */ +void +ewl_dnd_disable(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + ewl_dnd_status = 0; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @brief Enables DND + * @return Returns no value + */ +void +ewl_dnd_enable(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + ewl_dnd_status = 1; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @return Returns the current DND status + */ +int +ewl_dnd_status_get(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + DRETURN_INT(ewl_dnd_status, DLEVEL_STABLE); +} + +/** + * @return Returns the current DND widget + */ +Ewl_Widget * +ewl_dnd_drag_widget_get(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + DRETURN_PTR(ewl_dnd_widget, DLEVEL_STABLE); +} + +/** + * @brief Clears the current DND widget + */ +void +ewl_dnd_drag_widget_clear(void) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + ewl_dnd_widget = NULL; + DLEAVE_FUNCTION(DLEVEL_STABLE); +} static int -_ewl_dnd_event_dnd_move(void *data __UNUSED__, int type __UNUSED__, +ewl_dnd_event_dnd_move(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_X_Event_Mouse_Move *ev; - ev = event; - if (!_ewl_dnd_status) return 1; + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("event", event, FALSE); - //printf("%d:%d\n", ev->x, ev->y); - ewl_dnd_move_count++; + ev = event; - if (ewl_dnd_move_count == 1) { - ecore_evas_show(_ewl_dnd_drag_canvas); - } + if (!ewl_dnd_status) DRETURN_INT(TRUE, DLEVEL_STABLE); - if (_ewl_dnd_drag_canvas) ecore_evas_move(_ewl_dnd_drag_canvas, ev->x - 15, ev->y - 15); + ewl_dnd_move_count++; + if (ewl_dnd_move_count == 1) + ecore_evas_show(ewl_dnd_drag_canvas); + if (ewl_dnd_drag_canvas) + ecore_evas_move(ewl_dnd_drag_canvas, ev->x - 15, ev->y - 15); - return 1; + DRETURN_INT(TRUE, DLEVEL_STABLE); } - static int -_ewl_dnd_event_mouse_up(void *data __UNUSED__, int type __UNUSED__, +ewl_dnd_event_mouse_up(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - if (_ewl_dnd_drag_canvas && ewl_dragging_current) { - Ecore_List* pos; - void* val; + DENTER_FUNCTION(DLEVEL_STABLE); + + if (ewl_dnd_drag_canvas && ewl_dragging_current) { + Ecore_List *pos; + void *val; ecore_x_pointer_ungrab(); ecore_x_keyboard_ungrab(); - ecore_event_handler_del(_ewl_dnd_mouse_up_handler); - ecore_event_handler_del(_ewl_dnd_mouse_move_handler); - - //evas_object_del(_ewl_dnd_drag_image); - ecore_evas_free(_ewl_dnd_drag_canvas); - //ecore_evas_hide(_ewl_dnd_drag_canvas); - _ewl_dnd_drag_canvas = NULL; - - - ecore_x_window_del(_ewl_dnd_drag_win); - + ecore_event_handler_del(ewl_dnd_mouse_up_handler); + ecore_event_handler_del(ewl_dnd_mouse_move_handler); - //ecore_x_window_del(_ewl_dnd_evas_win); + ecore_evas_free(ewl_dnd_drag_canvas); + ewl_dnd_drag_canvas = NULL; + ecore_x_window_del(ewl_dnd_drag_win); ecore_x_dnd_drop(); /* Kill all last position references so they don't get * carried over to the next drag */ pos = ecore_hash_keys(ewl_dnd_position_hash); ecore_list_goto_first(pos); - while ( (val = ecore_list_remove_first(pos)) ) { + while ((val = ecore_list_remove_first(pos))) { EWL_WINDOW(val)->dnd_last_position = NULL; ecore_hash_remove(ewl_dnd_position_hash, val); } @@ -129,96 +298,6 @@ ewl_widget_dnd_reset(); } - return 1; - -} - - -void ewl_drag_start(Ewl_Widget* w) { - int width,height; - - if (!_ewl_dnd_status) return; - - if (ewl_dragging_current) { - return; - } - - ewl_dragging_current = 1; - _ewl_dnd_widget = w; - ewl_dnd_move_count = 0; - - - _ewl_dnd_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,_ewl_dnd_event_mouse_up, NULL); - _ewl_dnd_mouse_move_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, _ewl_dnd_event_dnd_move, NULL); - - _ewl_dnd_drag_canvas = ecore_evas_software_x11_new(NULL, EWL_DND_WINDOW_ROOT, 64,64,64,64); - _ewl_dnd_drag_evas = ecore_evas_get(_ewl_dnd_drag_canvas); - - ecore_evas_shaped_set(_ewl_dnd_drag_canvas, 1); - ecore_evas_software_x11_direct_resize_set(_ewl_dnd_drag_canvas,1); - - _ewl_dnd_evas_win = ecore_evas_software_x11_window_get(_ewl_dnd_drag_canvas); - ecore_x_window_resize(_ewl_dnd_evas_win, 64,64); - ecore_evas_override_set(_ewl_dnd_drag_canvas, 1); - - - //ecore_evas_software_x11_direct_resize_set(_ewl_dnd_drag_evas,1); - ecore_evas_ignore_events_set(_ewl_dnd_drag_canvas, 1); - - - - /*Setup a cursor*/ - _ewl_dnd_drag_image = evas_object_image_add(_ewl_dnd_drag_evas); - evas_object_image_file_set(_ewl_dnd_drag_image, PACKAGE_DATA_DIR "/images/World.png",0); - evas_object_image_fill_set(_ewl_dnd_drag_image, 0,0,50,50); - evas_object_resize(_ewl_dnd_drag_image, 50,50); - evas_object_show(_ewl_dnd_drag_image); - - - - - /*Setup the dnd event capture window*/ - ecore_x_window_geometry_get(EWL_DND_WINDOW_ROOT, NULL, NULL, &width, &height); - _ewl_dnd_drag_win = ecore_x_window_input_new(EWL_DND_WINDOW_ROOT, - 0, 0, - width,height); - - /*Finally show the drag window*/ - ecore_x_window_show(_ewl_dnd_drag_win); - - - /*Confine the pointer to our event windows*/ - ecore_x_pointer_confine_grab(_ewl_dnd_drag_win); - ecore_x_keyboard_grab(_ewl_dnd_drag_win); - - ecore_x_dnd_aware_set(_ewl_dnd_drag_win, 1); - ecore_x_dnd_aware_set(_ewl_dnd_evas_win, 1); - ecore_x_mwm_borderless_set(_ewl_dnd_evas_win, 1); - - /*Start the drag operation*/ - ecore_x_dnd_types_set(_ewl_dnd_drag_win, drop_types, 1); - ecore_x_dnd_begin(_ewl_dnd_drag_win, NULL, 0); - - + DRETURN_INT(TRUE, DLEVEL_STABLE); } - -void ewl_dnd_disable(void) { - _ewl_dnd_status=0; -} - -void ewl_dnd_enable(void) { - _ewl_dnd_status=1; -} - -int ewl_dnd_status_get(void) { - return _ewl_dnd_status; -} - -Ewl_Widget* ewl_dnd_drag_widget_get(void) { - return _ewl_dnd_widget; -} - -void ewl_dnd_drag_widget_clear(void) { - _ewl_dnd_widget = NULL; -} =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_dnd.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- ewl_dnd.h 22 Dec 2005 20:18:47 -0000 1.8 +++ ewl_dnd.h 29 Dec 2005 17:45:01 -0000 1.9 @@ -1,14 +1,31 @@ #ifndef __EWL_DND_H__ #define __EWL_DND_H__ -Ewl_Dnd_Types *ewl_dnd_types_for_widget_get(Ewl_Widget *widget); -void ewl_drag_start(Ewl_Widget* w); -void ewl_dnd_position_windows_set(Ewl_Widget* w); -void ewl_dnd_init(void); -Ewl_Widget* ewl_dnd_drag_widget_get(void); -int ewl_dnd_status_get(void); -void ewl_dnd_drag_widget_clear(void); -void ewl_dnd_disable(void); -void ewl_dnd_enable(void); +/** + * @file ewl_dnd.h + * @defgroup Ewl_Dnd Dnd: The files containing DND functions + * + * @{ + */ + +int ewl_dnd_init(void); +void ewl_dnd_shutdown(void); + +void ewl_drag_start(Ewl_Widget *w); +void ewl_dnd_drag_widget_clear(void); +Ewl_Widget *ewl_dnd_drag_widget_get(void); + +int ewl_dnd_status_get(void); + +void ewl_dnd_position_windows_set(Ewl_Widget *w); +Ewl_Dnd_Types *ewl_dnd_types_for_widget_get(Ewl_Widget *widget); + +void ewl_dnd_disable(void); +void ewl_dnd_enable(void); + +/** + * @} + */ + #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_misc.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- ewl_misc.c 22 Dec 2005 23:46:37 -0000 1.35 +++ ewl_misc.c 29 Dec 2005 17:45:01 -0000 1.36 @@ -185,7 +185,11 @@ DRETURN_INT(_ewl_init_count, DLEVEL_STABLE); } - ewl_dnd_init(); + if (!ewl_dnd_init()) { + DERROR("Count not init dnd.\n"); + ewl_shutdown(); + DRETURN_INT(_ewl_init_count, DLEVEL_STABLE); + } #ifdef ENABLE_EWL_SOFTWARE_X11 @@ -283,6 +287,7 @@ ewl_callbacks_shutdown(); ewl_theme_shutdown(); ewl_config_shutdown(); + ewl_dnd_shutdown(); /* * Free internal accounting lists. ------------------------------------------------------- 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://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs