Enlightenment CVS committal Author : xcomputerman Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: .cvsignore Ecore_X.h Makefile.am ecore_x.c ecore_x_events.c ecore_x_private.h ecore_x_selection.c ecore_x_window_prop.c Added Files: ecore_x_dnd.c Log Message: Teh xdnd cometh! No, it doesn't even remotely do anything useful yet. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/.cvsignore,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- .cvsignore 16 Jan 2004 16:59:07 -0000 1.2 +++ .cvsignore 5 Feb 2004 07:14:55 -0000 1.3 @@ -3,6 +3,7 @@ Makefile Makefile.in ecore_x.lo +ecore_x_dnd.lo ecore_x_error.lo ecore_x_events.lo ecore_x_gc.lo =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- Ecore_X.h 28 Jan 2004 21:48:27 -0000 1.29 +++ Ecore_X.h 5 Feb 2004 07:14:55 -0000 1.30 @@ -28,6 +28,16 @@ #define ECORE_X_SELECTION_TARGET_UTF8_STRING "UTF8_STRING" #define ECORE_X_SELECTION_TARGET_FILENAME "FILENAME" +#define ECORE_X_DND_VERSION 5 + +typedef enum _Ecore_X_DND_Action { + ECORE_X_DND_ACTION_COPY, + ECORE_X_DND_ACTION_MOVE, + ECORE_X_DND_ACTION_LINK, + ECORE_X_DND_ACTION_ASK, + ECORE_X_DND_ACTION_PRIVATE +} Ecore_X_DND_Action; + typedef enum _Ecore_X_Selection { ECORE_X_SELECTION_PRIMARY, ECORE_X_SELECTION_SECONDARY, @@ -108,6 +118,12 @@ typedef struct _Ecore_X_Event_Selection_Clear Ecore_X_Event_Selection_Clear; typedef struct _Ecore_X_Event_Selection_Request Ecore_X_Event_Selection_Request; typedef struct _Ecore_X_Event_Selection_Notify Ecore_X_Event_Selection_Notify; +typedef struct _Ecore_X_Event_Xdnd_Enter Ecore_X_Event_Xdnd_Enter; +typedef struct _Ecore_X_Event_Xdnd_Position Ecore_X_Event_Xdnd_Position; +typedef struct _Ecore_X_Event_Xdnd_Status Ecore_X_Event_Xdnd_Status; +typedef struct _Ecore_X_Event_Xdnd_Leave Ecore_X_Event_Xdnd_Leave; +typedef struct _Ecore_X_Event_Xdnd_Drop Ecore_X_Event_Xdnd_Stop; +typedef struct _Ecore_X_Event_Xdnd_Finished Ecore_X_Event_Xdnd_Finished; typedef struct _Ecore_X_Event_Client_Message Ecore_X_Event_Client_Message; typedef struct _Ecore_X_Event_Window_Shape Ecore_X_Event_Window_Shape; @@ -378,6 +394,51 @@ char *target; }; +struct _Ecore_X_Event_Xdnd_Enter +{ + Ecore_X_Window win, source; + Ecore_X_Time time; +}; + +struct _Ecore_X_Event_Xdnd_Position +{ + Ecore_X_Window win, source; + struct { + int x, y; + } position; + Ecore_X_Time time; + Ecore_X_DND_Action action; +}; + +struct _Ecore_X_Event_Xdnd_Status +{ + Ecore_X_Window win, target; + int drop_accept; + Ecore_X_DND_Action action; +}; + +struct _Ecore_X_Event_Xdnd_Leave +{ + Ecore_X_Window win, source; +}; + +struct _Ecore_X_Event_Xdnd_Drop +{ + Ecore_X_Window win, source; + Ecore_X_Time time; + Ecore_X_DND_Action action; + struct { + int x, y; + } position; +}; + +struct _Ecore_X_Event_Xdnd_Finished +{ + Ecore_X_Window win, target; + int completed; + Ecore_X_DND_Action action; +}; + struct _Ecore_X_Event_Client_Message { Ecore_X_Window win; @@ -606,11 +667,11 @@ void ecore_x_event_mask_set(Ecore_X_Window w, long mask); -int ecore_x_selection_primary_set(Ecore_X_Window w, char *data, int size); +int ecore_x_selection_primary_set(Ecore_X_Window w, unsigned char *data, int size); int ecore_x_selection_primary_clear(void); -int ecore_x_selection_secondary_set(Ecore_X_Window w, char *data, int size); +int ecore_x_selection_secondary_set(Ecore_X_Window w, unsigned char *data, int size); int ecore_x_selection_secondary_clear(void); -int ecore_x_selection_clipboard_set(Ecore_X_Window w, char *data, int size); +int ecore_x_selection_clipboard_set(Ecore_X_Window w, unsigned char *data, int size); int ecore_x_selection_clipboard_clear(void); void ecore_x_selection_primary_request(Ecore_X_Window w, char *target); void ecore_x_selection_secondary_request(Ecore_X_Window w, char *target); @@ -644,6 +705,7 @@ void ecore_x_window_prop_property_set(Ecore_X_Window win, Ecore_X_Atom type, Ecore_X_Atom format, int size, void *data, int number); int ecore_x_window_prop_property_get(Ecore_X_Window win, Ecore_X_Atom property, Ecore_X_Atom type, int size, unsigned char **data, int *num); +void ecore_x_window_prop_property_del(Ecore_X_Window win, Ecore_X_Atom property); void ecore_x_window_prop_property_notify(Ecore_X_Window win, const char *type, long *data); void ecore_x_window_prop_string_set(Ecore_X_Window win, Ecore_X_Atom type, char *str); char *ecore_x_window_prop_string_get(Ecore_X_Window win, Ecore_X_Atom type); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Makefile.am,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- Makefile.am 22 Jan 2004 23:13:53 -0000 1.7 +++ Makefile.am 5 Feb 2004 07:14:55 -0000 1.8 @@ -20,6 +20,7 @@ libecore_x_la_SOURCES = \ ecore_x.c \ +ecore_x_dnd.c \ ecore_x_error.c \ ecore_x_events.c \ ecore_x_selection.c \ @@ -48,6 +49,7 @@ Ecore_X.h \ Ecore_X_Cusor.h \ ecore_x.c \ +ecore_x_dnd.c \ ecore_x_error.c \ ecore_x_events.c \ ecore_x_selection.c \ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- ecore_x.c 4 Feb 2004 17:43:41 -0000 1.26 +++ ecore_x.c 5 Feb 2004 07:14:55 -0000 1.27 @@ -37,6 +37,7 @@ Atom _ecore_x_atom_wm_client_machine = 0; Atom _ecore_x_atom_motif_wm_hints = 0; Atom _ecore_x_atom_win_layer = 0; + Atom _ecore_x_atom_selection_primary = 0; Atom _ecore_x_atom_selection_secondary = 0; Atom _ecore_x_atom_selection_clipboard = 0; @@ -44,6 +45,21 @@ Atom _ecore_x_atom_selection_prop_secondary = 0; Atom _ecore_x_atom_selection_prop_clipboard = 0; +Atom _ecore_x_atom_selection_xdnd = 0; +Atom _ecore_x_atom_xdnd_aware = 0; +Atom _ecore_x_atom_xdnd_enter = 0; +Atom _ecore_x_atom_xdnd_type_list = 0; +Atom _ecore_x_atom_xdnd_position = 0; +Atom _ecore_x_atom_xdnd_action_copy = 0; +Atom _ecore_x_atom_xdnd_action_private = 0; +Atom _ecore_x_atom_xdnd_action_ask = 0; +Atom _ecore_x_atom_xdnd_action_list = 0; +Atom _ecore_x_atom_xdnd_action_description = 0; +Atom _ecore_x_atom_xdnd_status = 0; +Atom _ecore_x_atom_xdnd_drop = 0; +Atom _ecore_x_atom_xdnd_finished = 0; +Atom _ecore_x_atom_xdnd_leave = 0; + /* * Root window NetWM hints. */ @@ -330,7 +346,21 @@ _ecore_x_atom_selection_prop_primary = XInternAtom(_ecore_x_disp, "_ECORE_SELECTION_PRIMARY", False); _ecore_x_atom_selection_prop_secondary = XInternAtom(_ecore_x_disp, "_ECORE_SELECTION_SECONDARY", False); _ecore_x_atom_selection_prop_clipboard = XInternAtom(_ecore_x_disp, "_ECORE_SELECTION_CLIPBOARD", False); - + _ecore_x_atom_selection_xdnd = XInternAtom(_ecore_x_disp, "XdndSelection", False); + _ecore_x_atom_xdnd_aware = XInternAtom(_ecore_x_disp, "XdndAware", False); + _ecore_x_atom_xdnd_type_list = XInternAtom(_ecore_x_disp, "XdndTypeList", False); + _ecore_x_atom_xdnd_enter = XInternAtom(_ecore_x_disp, "XdndEnter", False); + _ecore_x_atom_xdnd_position = XInternAtom(_ecore_x_disp, "XdndPosition", False); + _ecore_x_atom_xdnd_action_copy = XInternAtom(_ecore_x_disp, "XdndActionCopy", False); + _ecore_x_atom_xdnd_action_private = XInternAtom(_ecore_x_disp, "XdndActionPrivate", False); + _ecore_x_atom_xdnd_action_ask = XInternAtom(_ecore_x_disp, "XdndActionAsk", False); + _ecore_x_atom_xdnd_action_list = XInternAtom(_ecore_x_disp, "XdndActionList", False); + _ecore_x_atom_xdnd_action_description = XInternAtom(_ecore_x_disp, "XdndActionDescription", False); + _ecore_x_atom_xdnd_status = XInternAtom(_ecore_x_disp, "XdndStatus", False); + _ecore_x_atom_xdnd_leave = XInternAtom(_ecore_x_disp, "XdndLeave", False); + _ecore_x_atom_xdnd_drop = XInternAtom(_ecore_x_disp, "XdndDrop", False); + _ecore_x_atom_xdnd_finished = XInternAtom(_ecore_x_disp, "XdndFinished", False); + _ecore_x_atom_net_supported = XInternAtom(_ecore_x_disp, "_NET_SUPPORTED", False); _ecore_x_atom_net_supporting_wm_check = XInternAtom(_ecore_x_disp, "_NET_SUPPORTING_WM_CHECK", False); @@ -395,7 +425,8 @@ _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_DELETE_REQUEST] = _ecore_x_atom_wm_delete_window; _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_TAKE_FOCUS] = _ecore_x_atom_wm_take_focus; - _ecore_x_selection_data_initialize(); + _ecore_x_selection_data_init(); + _ecore_x_dnd_init(); _ecore_x_init_count++; return _ecore_x_init_count; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- ecore_x_events.c 22 Jan 2004 05:23:33 -0000 1.20 +++ ecore_x_events.c 5 Feb 2004 07:14:56 -0000 1.21 @@ -1028,19 +1028,53 @@ if ((xevent->xclient.message_type == _ecore_x_atom_wm_protocols) && (xevent->xclient.format == 32) && (xevent->xclient.data.l[0] == (long)_ecore_x_atom_wm_delete_window)) - { - Ecore_X_Event_Window_Delete_Request *e; + { + Ecore_X_Event_Window_Delete_Request *e; - e = calloc(1, sizeof(Ecore_X_Event_Window_Delete_Request)); - if (!e) return; - e->win = xevent->xclient.window; - e->time = _ecore_x_event_last_time; - ecore_event_add(ECORE_X_EVENT_WINDOW_DELETE_REQUEST, e, _ecore_x_event_free_generic, NULL); - } + e = calloc(1, sizeof(Ecore_X_Event_Window_Delete_Request)); + if (!e) return; + e->win = xevent->xclient.window; + e->time = _ecore_x_event_last_time; + ecore_event_add(ECORE_X_EVENT_WINDOW_DELETE_REQUEST, e, _ecore_x_event_free_generic, NULL); + } + /* Xdnd Client Message Handling */ + else if (xevent->xclient.message_type == _ecore_x_atom_xdnd_enter) + { + Ecore_X_Event_Xdnd_Enter *e; + Ecore_X_DND_Protocol *_xdnd; + short *ldata; + + _xdnd = _ecore_x_dnd_protocol_get(); + _xdnd->source = xevent->xclient.data.l[0]; + _xdnd->dest = xevent->xclient.window; + /* gcc won't let us do this */ + /* _xdnd->version = (int) (xevent->xclient.data.l >> 24); */ + ldata = (short *) &(xevent->xclient.data.l); + _xdnd->version = (int) ldata[0]; + if (_xdnd->version > ECORE_X_DND_VERSION) + return 0; + + if (xevent->xclient.data.l[1] & 0x0001) + { + /* source supports more than 3 types, fetch property */ + } + else + { + _xdnd->types[0] = xevent->xclient.data.l[2]; + _xdnd->types[1] = xevent->xclient.data.l[3]; + _xdnd->types[2] = xevent->xclient.data.l[4]; + } + + e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Enter)); + if (!e) return; + e->win = _xdnd->dest; + e->source = _xdnd->source; + e->time = CurrentTime; + } else - { + { /* FIXME: handle this event type */ - } + } } void =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- ecore_x_private.h 4 Feb 2004 17:43:41 -0000 1.19 +++ ecore_x_private.h 5 Feb 2004 07:14:56 -0000 1.20 @@ -40,7 +40,7 @@ { Window win; Atom selection; - char *data; + unsigned char *data; int length; Time time; }; @@ -55,6 +55,31 @@ struct _Ecore_X_Selection_Converter *next; }; +typedef struct _Ecore_X_DND_Protocol +{ + int version; + Window source, dest; + + enum { + ECORE_X_DND_OUT, + ECORE_X_DND_IN, + ECORE_X_DND_FINISHED + } state; + + struct { + int x, y, w, h; + } status_rect; + + Atom types[256]; + + struct { + Ecore_Event_Handler *mouse_move; + Ecore_Event_Handler *mouse_up; + Ecore_Event_Handler *mouse_in; + Ecore_Event_Handler *mouse_out; + } handlers; +} Ecore_X_DND_Protocol; + typedef enum _Ecore_X_WM_Protocol { /** * If enabled the window manager will be asked to send a @@ -147,6 +172,22 @@ extern Atom _ecore_x_atom_selection_prop_secondary; extern Atom _ecore_x_atom_selection_prop_clipboard; +extern Atom _ecore_x_atom_selection_xdnd; +extern Atom _ecore_x_atom_xdnd_aware; +extern Atom _ecore_x_atom_xdnd_enter; +extern Atom _ecore_x_atom_xdnd_type_list; +extern Atom _ecore_x_atom_xdnd_position; +extern Atom _ecore_x_atom_xdnd_action_copy; +extern Atom _ecore_x_atom_xdnd_action_private; +extern Atom _ecore_x_atom_xdnd_action_ask; +extern Atom _ecore_x_atom_xdnd_action_list; +extern Atom _ecore_x_atom_xdnd_action_description; +extern Atom _ecore_x_atom_xdnd_status; +extern Atom _ecore_x_atom_xdnd_drop; +extern Atom _ecore_x_atom_xdnd_finished; + +extern Ecore_X_DND_Protocol *_xdnd; + void _ecore_x_error_handler_init(void); void _ecore_x_event_handle_key_press(XEvent *xevent); void _ecore_x_event_handle_key_release(XEvent *xevent); @@ -182,13 +223,15 @@ void _ecore_x_event_handle_mapping_notify(XEvent *xevent); void _ecore_x_event_handle_shape_change(XEvent *xevent); -void _ecore_x_selection_data_initialize(void); +void _ecore_x_selection_data_init(void); void _ecore_x_selection_shutdown(void); Atom _ecore_x_selection_target_atom_get(char *target); char * _ecore_x_selection_target_get(Atom target); void _ecore_x_selection_request_data_set(Ecore_X_Selection_Data data); Ecore_X_Selection_Data * _ecore_x_selection_get(Atom selection); -int _ecore_x_selection_set(Window w, char *data, int len, Atom selection); +int _ecore_x_selection_set(Window w, unsigned char *data, int len, Atom selection); int _ecore_x_selection_convert(Atom selection, Atom target, void **data_ret); +void _ecore_x_dnd_init(void); +Ecore_X_DND_Protocol * _ecore_x_dnd_protocol_get(void); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_selection.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ecore_x_selection.c 4 Feb 2004 17:43:41 -0000 1.10 +++ ecore_x_selection.c 5 Feb 2004 07:14:56 -0000 1.11 @@ -10,7 +10,7 @@ static int _ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret); void -_ecore_x_selection_data_initialize(void) +_ecore_x_selection_data_init(void) { /* Initialize converters */ ecore_x_selection_converter_atom_add(_ecore_x_atom_text, @@ -145,10 +145,10 @@ } int -_ecore_x_selection_set(Window w, char *data, int size, Atom selection) +_ecore_x_selection_set(Window w, unsigned char *data, int size, Atom selection) { int in; - char *buf = NULL; + unsigned char *buf = NULL; XSetSelectionOwner(_ecore_x_disp, selection, w, _ecore_x_event_last_time); if (XGetSelectionOwner(_ecore_x_disp, selection) != w) @@ -197,7 +197,7 @@ * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> */ int -ecore_x_selection_primary_set(Ecore_X_Window w, char *data, int size) +ecore_x_selection_primary_set(Ecore_X_Window w, unsigned char *data, int size) { return _ecore_x_selection_set(w, data, size, _ecore_x_atom_selection_primary); } @@ -228,7 +228,7 @@ * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> */ int -ecore_x_selection_secondary_set(Ecore_X_Window w, char *data, int size) +ecore_x_selection_secondary_set(Ecore_X_Window w, unsigned char *data, int size) { return _ecore_x_selection_set(w, data, size, _ecore_x_atom_selection_secondary); } @@ -259,7 +259,7 @@ * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> */ int -ecore_x_selection_clipboard_set(Ecore_X_Window w, char *data, int size) +ecore_x_selection_clipboard_set(Ecore_X_Window w, unsigned char *data, int size) { return _ecore_x_selection_set(w, data, size, _ecore_x_atom_selection_clipboard); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_window_prop.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- ecore_x_window_prop.c 28 Jan 2004 21:48:27 -0000 1.25 +++ ecore_x_window_prop.c 5 Feb 2004 07:14:56 -0000 1.26 @@ -89,6 +89,12 @@ return 1; } +void +ecore_x_window_prop_property_del(Ecore_X_Window win, Ecore_X_Atom property) +{ + XDeleteProperty(_ecore_x_disp, win, property); +} + /** * Send a property notify to a window. * @param win The window @@ -1071,65 +1077,6 @@ free(newset); } -/** - * Set a window as a desktop type. - * @param win The Window - * - * Set a window as a desktop type. - * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> - */ -void -ecore_x_window_prop_window_type_desktop_set(Ecore_X_Window win) -{ - ecore_x_window_prop_window_type_set(win, _ecore_x_atom_net_wm_window_type_desktop); -} - -/** - * Set a window as a desktop type. - * @param win The Window - * - * Set a window as a desktop type. - * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> - */ -void -ecore_x_window_prop_window_type_dock_set(Ecore_X_Window win) -{ - ecore_x_window_prop_window_type_set(win, _ecore_x_atom_net_wm_window_type_dock); -} - -/** - * Set a window as a toolbar type. - * @param win The Window - * - * Set a window as a toolbar type. - * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> - */ -void -ecore_x_window_prop_window_type_toolbar_set(Ecore_X_Window win) -{ - ecore_x_window_prop_window_type_set(win, _ecore_x_atom_net_wm_window_type_toolbar); -} - -/** - * Set a window as a menu type. - * @param win The Window - * - * Set a window as a menu type. - * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> - */ -void -ecore_x_window_prop_window_type_menu_set(Ecore_X_Window win) -{ - ecore_x_window_prop_window_type_set(win, _ecore_x_atom_net_wm_window_type_menu); -} - -/** - * Set a window as a utility type. - * @param win The Window - * - * Set a window as a utility type. - * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> - */ void ecore_x_window_prop_window_type_utility_set(Ecore_X_Window win) { ------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs