Enlightenment CVS committal
Author : moom
Project : e17
Module : libs/etk
Dir : e17/libs/etk/src/engines/ecore_evas_x11
Modified Files:
ecore_evas_x11.c
Log Message:
* [Combobox] API changes and a part of the code has been rewritten.
Still need some work and some fixes
* [Dnd] I've removed the dnd code, this way, it will force me to
reimplement it...
* [Editable] tweak the position of the selection rectangle
* [Object] Fix a bug in etk_object_notification_callback_remove()
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/engines/ecore_evas_x11/ecore_evas_x11.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- ecore_evas_x11.c 31 Dec 2006 14:50:31 -0000 1.24
+++ ecore_evas_x11.c 8 Mar 2007 18:16:01 -0000 1.25
@@ -56,23 +56,6 @@
static void _selection_clear(Etk_Selection_Type selection);
static int _selection_notify_handler_cb(void *data, int type, void *event);
-
-/* Etk_Drag functions */
-static void _drag_constructor(Etk_Drag *drag);
-static void _drag_begin(Etk_Drag *drag);
-static int _drag_mouse_up_cb(void *data, int type, void *event);
-static int _drag_mouse_move_cb(void *data, int type, void *event);
-
-/* Etk_Dnd functions */
-static void _dnd_container_get_widgets_at(Etk_Toplevel *top, int x, int y, int
offx, int offy, Evas_List **list);
-static int _dnd_enter_handler(void *data, int type, void *event);
-static int _dnd_position_handler(void *data, int type, void *event);
-static int _dnd_drop_handler(void *data, int type, void *event);
-static int _dnd_leave_handler(void *data, int type, void *event);
-static int _dnd_selection_handler(void *data, int type, void *event);
-static int _dnd_status_handler(void *data, int type, void *event);
-static int _dnd_finished_handler(void *data, int type, void *event);
-
/* Private functions */
static void _window_netwm_state_active_set(Etk_Window *window,
Ecore_X_Window_State state, Etk_Bool active);
static Etk_Bool _window_netwm_state_active_get(Etk_Window *window,
Ecore_X_Window_State state);
@@ -90,17 +73,6 @@
static Ecore_Event_Handler *_selection_notify_handler = NULL;
-static Ecore_Event_Handler *_drag_mouse_move_handler;
-static Ecore_Event_Handler *_drag_mouse_up_handler;
-
-extern Etk_Widget *_etk_drag_widget;
-static char **_dnd_types = NULL;
-static int _dnd_types_num = 0;
-static Etk_Widget *_dnd_widget = NULL;
-static Evas_List *_dnd_handlers = NULL;
-static int _dnd_widget_accepts = 0;
-
-
static Etk_Engine engine_info = {
NULL, /* engine specific data */
@@ -112,7 +84,7 @@
_engine_shutdown,
_window_constructor,
- _window_destructor,
+ _window_destructor,
NULL, /* window_show */
NULL, /* window_hide */
NULL, /* window_evas_get */
@@ -165,8 +137,8 @@
_selection_text_request,
_selection_clear,
- _drag_constructor,
- _drag_begin,
+ NULL, /* drag_constructor */
+ NULL, /* drag_begin */
};
/**************************
@@ -208,14 +180,6 @@
_selection_notify_handler =
ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY,
_selection_notify_handler_cb, NULL);
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, _dnd_enter_handler, NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, _dnd_position_handler,
NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, _dnd_drop_handler, NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, _dnd_leave_handler, NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, _dnd_selection_handler,
NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_STATUS, _dnd_status_handler, NULL));
- _dnd_handlers = evas_list_append(_dnd_handlers,
ecore_event_handler_add(ECORE_X_EVENT_XDND_FINISHED, _dnd_finished_handler,
NULL));
-
return ETK_TRUE;
}
@@ -236,12 +200,6 @@
ecore_event_handler_del(_selection_notify_handler);
_selection_notify_handler = NULL;
- while (_dnd_handlers)
- {
- ecore_event_handler_del(_dnd_handlers->data);
- _dnd_handlers = evas_list_remove_list(_dnd_handlers, _dnd_handlers);
- }
-
ecore_x_shutdown();
}
@@ -651,42 +609,6 @@
/**************************
*
- * Etk_Drag's functions
- *
- **************************/
-
-/* TODOC */
-static void _drag_constructor(Etk_Drag *drag)
-{
- Etk_Engine_Window_Data *engine_data;
- Ecore_X_Window x_window;
-
- engine_data = ETK_WINDOW(drag)->engine_data;
- x_window = engine_data->x_window;
- ecore_x_dnd_aware_set(x_window, 1);
-}
-
-/* TODOC */
-static void _drag_begin(Etk_Drag *drag)
-{
- Etk_Engine_Window_Data *engine_data;
- Ecore_Evas *ecore_evas;
- Ecore_X_Window x_window;
-
- engine_data = ETK_WINDOW(drag)->engine_data;
- ecore_evas = ETK_ENGINE_ECORE_EVAS_WINDOW_DATA(engine_data)->ecore_evas;
- x_window = engine_data->x_window;
-
- ecore_evas_ignore_events_set(ecore_evas, 1);
- ecore_x_dnd_types_set(x_window, drag->types, drag->num_types);
- ecore_x_dnd_begin(x_window, drag->data, drag->data_size);
-
- _drag_mouse_move_handler =
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, _drag_mouse_move_cb, drag);
- _drag_mouse_up_handler =
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, _drag_mouse_up_cb, drag);
-}
-
-/**************************
- *
* Callbacks and handlers
*
**************************/
@@ -819,355 +741,6 @@
return 1;
}
-/* TODOC */
-static int _drag_mouse_up_cb(void *data, int type, void *event)
-{
- Etk_Drag *drag;
-
- drag = data;
- etk_widget_hide_all(ETK_WIDGET(drag));
- ecore_event_handler_del(_drag_mouse_move_handler);
- ecore_event_handler_del(_drag_mouse_up_handler);
- ecore_x_dnd_drop();
- etk_widget_drag_end(ETK_WIDGET(drag));
- etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(drag->widget),
ETK_POINTER_DEFAULT);
-
- return 1;
-}
-
-/* TODOC */
-static int _drag_mouse_move_cb(void *data, int type, void *event)
-{
- Ecore_X_Event_Mouse_Move *ev;
- Etk_Drag *drag;
-
- drag = data;
- ev = event;
-
- etk_window_move(ETK_WINDOW(drag), ev->root.x + 2, ev->root.y + 2);
-
- return 1;
-}
-
-/* Searchs the container recursively for the widget that accepts xdnd */
-static void _dnd_container_get_widgets_at(Etk_Toplevel *top, int x, int y, int
offx, int offy, Evas_List **list)
-{
-
- Evas_List *l;
- int wx, wy, ww, wh;
-
- if (!top || !list)
- return;
-
- for (l = etk_widget_dnd_dest_widgets_get(); l; l = l->next)
- {
- Etk_Widget *widget;
-
- if (!(widget = ETK_WIDGET(l->data)) ||
etk_widget_toplevel_parent_get(widget) != top)
- continue;
-
- etk_widget_geometry_get(widget, &wx, &wy, &ww, &wh);
- if (ETK_INSIDE(x, y, wx + offx, wy + offy, ww, wh))
- *list = evas_list_append(*list, widget);
- }
-}
-
-/* The event handler for when a drag enters our window */
-static int _dnd_enter_handler(void *data, int type, void *event)
-{
- Ecore_X_Event_Xdnd_Enter *ev;
- int i;
-
- ev = event;
-
- //printf("enter window!\n");
- //for (i = 0; i < ev->num_types; i++)
- // printf("type: %s\n", ev->types[i]);
-
- if(_dnd_types != NULL && _dnd_types_num >= 0)
- {
- for (i = 0; i < _dnd_types_num; i++)
- if(_dnd_types[i]) free(_dnd_types[i]);
- }
-
- if(_dnd_types != NULL) free(_dnd_types);
- _dnd_types_num = 0;
-
- if(ev->num_types > 0)
- {
- _dnd_types = calloc(ev->num_types, sizeof(char*));
- for (i = 0; i < ev->num_types; i++)
- _dnd_types[i] = strdup(ev->types[i]);
-
- _dnd_types_num = ev->num_types;
- }
-
- return 1;
-}
-
-/* The event handler for when a drag is moving in our window */
-static int _dnd_position_handler(void *data, int type, void *event)
-{
- Ecore_X_Event_Xdnd_Position *ev;
- Etk_Window *window;
- Evas_List *l;
- Evas_List *children = NULL;
- Etk_Widget *widget;
- int x = 0, y = 0;
- int wx, wy, ww, wh;
- Etk_Engine_Window_Data *engine_data;
- Ecore_X_Window x_window;
-
- ev = event;
-
- //printf("position!\n");
-
- /* loop top level widgets (windows) */
- for (l = etk_toplevel_widgets_get(); l; l = l->next)
- {
- if (!ETK_IS_WINDOW(l->data))
- continue;
- window = ETK_WINDOW(l->data);
-
- /* if this isnt the active window, dont waste time */
- engine_data = window->engine_data;
- x_window = engine_data->x_window;
- if (ev->win != x_window)
- continue;
-
- etk_window_geometry_get(window, &x, &y, NULL, NULL);
-
- /* find the widget we want to drop on */
- _dnd_container_get_widgets_at(ETK_TOPLEVEL(window), ev->position.x,
ev->position.y, x, y, &children);
-
- /* check if we're leaving a widget */
- if (_dnd_widget)
- {
- etk_widget_geometry_get(_dnd_widget, &wx, &wy, &ww, &wh);
- if (!ETK_INSIDE(ev->position.x, ev->position.y, wx + x, wy + y, ww,
wh))
- {
- etk_widget_drag_leave(_dnd_widget);
- _dnd_widget = NULL;
- _dnd_widget_accepts = 0;
- }
- }
-
- break;
- }
-
- /* if we found a widget, emit signals */
- if (children != NULL)
- {
- Ecore_X_Rectangle rect;
- int i;
-
- widget = (evas_list_last(children))->data;
- etk_widget_geometry_get(widget, &wx, &wy, &ww, &wh);
-
- rect.x = wx;
- rect.y = wy;
- rect.width = ww;
- rect.height = wh;
-
- if(_dnd_widget == widget && _dnd_widget_accepts)
- {
- etk_widget_drag_motion(widget);
- ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
- }
- else
- {
- _dnd_widget = widget;
-
- /* first case - no specific types, so just accept */
- if(_dnd_widget->dnd_types == NULL || _dnd_widget->dnd_types_num <= 0)
- {
- ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
- _dnd_widget_accepts = 1;
- etk_widget_drag_enter(widget);
- return 1;
- }
-
- /* second case - we found matching types, accept */
- for(i = 0; i < _dnd_types_num; i++)
- {
- int j;
-
- for(j = 0; j < _dnd_widget->dnd_types_num; j++)
- {
- if(!strcmp(_dnd_widget->dnd_types[j], _dnd_types[i]))
- {
- ecore_x_dnd_send_status(1, 1, rect,
ECORE_X_DND_ACTION_PRIVATE);
- _dnd_widget_accepts = 1;
- etk_widget_drag_enter(widget);
- return 1;
- }
- }
- }
-
- /* third case - no matches at all, dont accept */
- ecore_x_dnd_send_status(0, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
- _dnd_widget_accepts = 0;
- }
- }
- else
- {
- /* tell the source we wont accept it here */
- Ecore_X_Rectangle rect;
-
- rect.x = 0;
- rect.y = 0;
- rect.width = 0;
- rect.height = 0;
- ecore_x_dnd_send_status(0, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
- }
- return 1;
-}
-
-/* TODOC */
-static int _dnd_drop_handler(void *data, int type, void *event)
-{
- Ecore_X_Event_Xdnd_Drop *ev;
- int i;
-
- //printf("drop\n");
- ev = event;
-
- if (!_dnd_widget)
- return 0;
-
- /* first case - if we dont have a type preferece, send everyting */
- if(_dnd_widget->dnd_types == NULL || _dnd_widget->dnd_types_num <= 0)
- {
- for(i = 0; i < _dnd_types_num; i++)
- ecore_x_selection_xdnd_request(ev->win, _dnd_types[i]);
- }
- /* second case - send only our preferred types */
- else
- {
- for(i = 0; i < _dnd_widget->dnd_types_num; i++)
- ecore_x_selection_xdnd_request(ev->win, _dnd_widget->dnd_types[i]);
- }
-
- return 1;
-}
-
-/* TODOC */
-static int _dnd_leave_handler(void *data, int type, void *event)
-{
- //printf("leave window\n");
-
- return 1;
-}
-
-/* TODOC */
-static int _dnd_selection_handler(void *data, int type, void *event)
-{
- Ecore_X_Event_Selection_Notify *ev;
- Ecore_X_Selection_Data_Files *files;
- Ecore_X_Selection_Data_Text *text;
- //int i;
-
- //printf("selection\n");
- ev = event;
- switch (ev->selection)
- {
- case ECORE_X_SELECTION_XDND:
- if(!strcmp(ev->target, "text/uri-list"))
- {
- Etk_Event_Selection_Request event;
- Etk_Selection_Data_Files event_files;
-
- files = ev->data;
-
- if (!_dnd_widget || files->num_files < 1)
- break;
-
- event_files.files = files->files;
- event_files.num_files = files->num_files;
- event_files.data.data = files->data.data;
- event_files.data.length = files->data.length;
- event_files.data.free = files->data.free;
-
- event.data = &event_files;
- event.content = ETK_SELECTION_CONTENT_FILES;
-
- /* emit the drop signal so the widget can react */
- etk_widget_drag_drop(_dnd_widget, &event);
- }
- else if(!strcmp(ev->target, "text/plain") ||
- !strcmp(ev->target, ECORE_X_SELECTION_TARGET_UTF8_STRING))
- {
- Etk_Event_Selection_Request event;
- Etk_Selection_Data_Text event_text;
-
- text = ev->data;
-
- if (!_dnd_widget)
- break;
-
- event_text.text = text->text;
- event_text.data.data = text->data.data;
- event_text.data.length = text->data.length;
- event_text.data.free = text->data.free;
-
- event.data = &event_text;
- event.content = ETK_SELECTION_CONTENT_TEXT;
-
- /* emit the drop signal so the widget can react */
- etk_widget_drag_drop(_dnd_widget, &event);
- }
- else
- {
- /* couldnt find any data type that etk supports, send raw data */
- Etk_Event_Selection_Request event;
-
- event.data = ev->data;
- event.content = ETK_SELECTION_CONTENT_CUSTOM;
-
- /* emit the drop signal so the widget can react */
- etk_widget_drag_drop(_dnd_widget, &event);
- }
-
- _dnd_widget = NULL;
-
- ecore_x_dnd_send_finished();
- break;
-
- default:
- break;
- }
-
- return 1;
-}
-
-/* TODOC */
-static int _dnd_status_handler(void *data, int type, void *event)
-{
- Ecore_X_Event_Xdnd_Status *ev;
- Etk_Engine_Window_Data *engine_data;
- Ecore_X_Window x_window;
-
- engine_data = ETK_WINDOW(_etk_drag_widget)->engine_data;
- x_window = engine_data->x_window;
- ev = event;
-
- if (ev->win != x_window) return 1;
- if(!ev->will_accept)
- {
-
etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(etk_drag_parent_widget_get(ETK_DRAG(_etk_drag_widget))),
ETK_POINTER_DEFAULT);
- return 1;
- }
-
-
etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(etk_drag_parent_widget_get(ETK_DRAG(_etk_drag_widget))),
ETK_POINTER_DND_DROP);
- return 1;
-}
-
-/* TODOC */
-static int _dnd_finished_handler(void *data, int type, void *event)
-{
- return 1;
-}
-
/**************************
*
* Private functions
@@ -1192,7 +765,7 @@
root = engine_data->x_window;
while ((parent = ecore_x_window_parent_get(root)) != 0)
- root = parent;
+ root = parent;
ecore_x_netwm_state_request_send(engine_data->x_window, root, state, -1,
active);
}
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs