From: sebastid@stud.ntnu.no Subject: [E-devel] dnd Date: March 24, 2005 10:53:19 AM EST To: enlightenment-devel@lists.sourceforge.net My current testfiles. Sebastian fonts { font: "Vera.ttf" "Edje Vera"; } collections { group { min: 400 400; name: "drag"; parts { part { name: "background"; type: RECT; description { state: "default" 0.0; color: 0 0 0 255; rel1 { relative: 0.0 0.0; offset: 0 0; } rel2 { relative: 1.0 1.0; offset: 0 0; } } } part { name: "foreground"; type: RECT; description { state: "default" 0.0; color: 255 255 255 255; rel1 { relative: 0.0 0.0; offset: 2 2; } rel2 { relative: 1.0 1.0; offset: -3 -3; } } } part { name: "text"; type: TEXT; description { state: "default" 0.0; color: 0 0 0 255; rel1 { relative: 0.0 0.0; offset: 4 4; } rel2 { relative: 1.0 1.0; offset: -5 -5; } text { text: "Drag"; font: "Edje Vera"; size: 10; align: 0.5 0.5; min: 0 0; } } } } } group { min: 400 400; name: "drop"; parts { part { name: "background"; type: RECT; description { state: "default" 0.0; color: 0 0 0 255; rel1 { relative: 0.0 0.0; offset: 0 0; } rel2 { relative: 1.0 1.0; offset: 0 0; } } } part { name: "foreground"; type: RECT; description { state: "default" 0.0; color: 255 255 255 255; rel1 { relative: 0.0 0.0; offset: 2 2; } rel2 { relative: 1.0 1.0; offset: -3 -3; } } } part { name: "text"; type: TEXT; description { state: "default" 0.0; color: 0 0 0 255; rel1 { relative: 0.0 0.0; offset: 4 4; } rel2 { relative: 1.0 1.0; offset: -5 -5; } text { text: "Drop"; font: "Edje Vera"; size: 10; align: 0.5 0.5; min: 0 0; } } } } } } #include #include #include #include #include #include Evas_Object *obj; Ecore_X_Window win; int pos = 0; int exit_handler(void *data, int type, void *event) { ecore_main_loop_quit(); return 1; } int enter_handler(void *data, int type, void *event) { printf("enter\n"); return 1; } int leave_handler(void *data, int type, void *event) { printf("leave\n"); return 1; } int status_handler(void *data, int type, void *event) { printf("status\n"); return 1; } int position_handler(void *data, int type, void *event) { /* printf("position\n"); */ return 1; } int drop_handler(void *data, int type, void *event) { printf("drop\n"); return 1; } int finished_handler(void *data, int type, void *event) { printf("finished\n"); return 1; } void drag_start(void *data, Evas *e, Evas_Object *obj, void *event_info) { char *text = "Dette er en test"; printf("drag_start\n"); ecore_x_dnd_type_set(win, "text/plain", 1); ecore_x_dnd_begin(win, text, strlen(text) * sizeof(char)); } void drag_end(void *data, Evas *e, Evas_Object *obj, void *event_info) { printf("drag_end\n"); ecore_x_dnd_drop(); } int main(int argc, char **argv) { Ecore_Evas *ee; int w, h; ecore_init(); ecore_evas_init(); edje_init(); ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 10, 10); ecore_evas_borderless_set(ee, 1); ecore_evas_layer_set(ee, 999); ecore_evas_show(ee); win = ecore_evas_software_x11_window_get(ee); ecore_x_dnd_aware_set(win, 1); obj = edje_object_add(ecore_evas_get(ee)); edje_object_file_set(obj, "default.eet", "drag"); w = 400; h = 400; evas_object_move(obj, 0, 0); evas_object_resize(obj, w, h); evas_object_show(obj); ecore_evas_move(ee, 20, 20); ecore_evas_resize(ee, w, h); ecore_evas_show(ee); ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, enter_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, leave_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_STATUS, status_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, position_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, drop_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_FINISHED, finished_handler, NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, drag_start, NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, drag_end, NULL); ecore_main_loop_begin(); edje_shutdown(); ecore_evas_shutdown(); ecore_shutdown(); return 0; } #include #include #include #include #include #include Evas_Object *obj; const char * atom_to_string(Ecore_X_Atom atom) { if (atom == ECORE_X_DND_ACTION_COPY) return "copy"; else if (atom == ECORE_X_DND_ACTION_MOVE) return "move"; else if (atom == ECORE_X_DND_ACTION_LINK) return "link"; else if (atom == ECORE_X_DND_ACTION_ASK) return "ask"; else if (atom == ECORE_X_DND_ACTION_PRIVATE) return "private"; else return "unknown"; } int exit_handler(void *data, int type, void *event) { ecore_main_loop_quit(); return 1; } int enter_handler(void *data, int type, void *event) { Ecore_X_Event_Xdnd_Enter *ev; int i; printf("enter\n"); ev = event; for (i = 0; i < ev->num_types; i++) printf("type: %s\n", ev->types[i]); return 1; } int position_handler(void *data, int type, void *event) { Ecore_X_Event_Xdnd_Position *ev; Ecore_X_Rectangle rect; /* printf("position\n"); printf("action: %s\n", atom_to_string(ev->action)); */ ev = event; evas_object_geometry_get(obj, &rect.x, &rect.y, &rect.width, &rect.height); rect.x = 500; rect.y = 20; ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE); return 1; } int drop_handler(void *data, int type, void *event) { Ecore_X_Event_Xdnd_Drop *ev; printf("drop\n"); ev = event; ecore_x_selection_xdnd_request(ev->win, "text/uri-list"); /* ecore_x_selection_xdnd_request(ev->win, "text/plain"); ecore_x_selection_xdnd_request(ev->win, "_NETSCAPE_URL"); ecore_x_selection_xdnd_request(ev->win, "x-special/gnome-icon-list"); */ return 1; } int leave_handler(void *data, int type, void *event) { printf("leave\n"); return 1; } int selection_handler(void *data, int type, void *event) { Ecore_X_Event_Selection_Notify *ev; int i; printf("selection\n"); ev = event; /* ecore_x_selection_xdnd_request_data_get(&buf, &len); printf("%s\n", buf); free(buf); */ for (i = 0; i < ev->num_files; i++) printf("%s\n", ev->files[i]); ecore_x_dnd_send_finished(); return 1; } int main(int argc, char **argv) { Ecore_Evas *ee; Ecore_X_Window win; int w, h; ecore_init(); ecore_evas_init(); edje_init(); ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 10, 10); ecore_evas_borderless_set(ee, 1); ecore_evas_layer_set(ee, 999); ecore_evas_show(ee); win = ecore_evas_software_x11_window_get(ee); ecore_x_dnd_aware_set(win, 1); ecore_x_dnd_type_set(win, "*", 1); obj = edje_object_add(ecore_evas_get(ee)); edje_object_file_set(obj, "default.eet", "drop"); w = 400; h = 400; evas_object_move(obj, 0, 0); evas_object_resize(obj, w, h); evas_object_show(obj); ecore_evas_move(ee, 500, 20); ecore_evas_resize(ee, w, h); ecore_evas_show(ee); ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, enter_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, position_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, drop_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, leave_handler, NULL); ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, selection_handler, NULL); ecore_main_loop_begin(); edje_shutdown(); ecore_evas_shutdown(); ecore_shutdown(); return 0; }