Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_apps.c e_dnd.c e_winlist.c Log Message: XDnD to ibar works now! Cleaned up some warnings in e_winlist.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_apps.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -3 -r1.47 -r1.48 --- e_apps.c 10 Jun 2005 21:26:50 -0000 1.47 +++ e_apps.c 16 Jun 2005 01:55:19 -0000 1.48 @@ -10,6 +10,7 @@ * is added in 'all', it doesn't show! * - track app execution state, visibility state etc. and call callbacks * - calls to execute an app or query its runing/starting state etc. + * - clean up the add app functions. To much similar code. */ /* local subsystem functions */ @@ -338,21 +339,98 @@ void e_app_files_prepend_relative(Evas_List *files, E_App *before) { - /* FIXME: - * Parse all files - * Put them in all - * Change the .order file for before->parent - */ + Evas_List *l; + + if (!before->parent) return; + + for (l = files; l; l = l->next) + { + char *file; + + file = l->data; + if (!_e_app_is_eapp(file)) continue; + if (!ecore_file_download(file, _e_apps_path_all)) continue; + } + /* Force rescan of all subdir */ + _e_app_subdir_rescan(_e_apps_all); + /* Change .order file */ + if (before->parent != _e_apps_all) + { + FILE *f; + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/.order", before->parent->path); + f = fopen(buf, "wb"); + if (!f) return; + + for (l = before->parent->subapps; l; l = l->next) + { + E_App *a; + Evas_List *l2; + + a = l->data; + if (a == before) + { + /* Add the new files */ + for (l2 = files; l2; l2 = l2->next) + { + char *file; + + file = l2->data; + fprintf(f, "%s\n", ecore_file_get_file(file)); + } + } + fprintf(f, "%s\n", ecore_file_get_file(a->path)); + } + fclose(f); + } } void e_app_files_append(Evas_List *files, E_App *parent) { - /* FIXME: - * Parse all files - * Put them in all - * Change the .order file for before->parent - */ + Evas_List *l, *subapps, *changes = NULL; + E_App_Change_Info *ch; + + subapps = parent->subapps; + + for (l = files; l; l = l->next) + { + char *file; + + file = l->data; + if (!_e_app_is_eapp(file)) continue; + if (!ecore_file_download(file, _e_apps_path_all)) continue; + } + /* Force rescan of all subdir */ + _e_app_subdir_rescan(_e_apps_all); + /* Change .order file */ + if (parent != _e_apps_all) + { + FILE *f; + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/.order", parent->path); + f = fopen(buf, "wb"); + if (!f) return; + + for (l = parent->subapps; l; l = l->next) + { + E_App *a; + + a = l->data; + fprintf(f, "%s\n", ecore_file_get_file(a->path)); + } + /* Add the new files */ + for (l = files; l; l = l->next) + { + char *file; + + file = l->data; + fprintf(f, "%s\n", ecore_file_get_file(file)); + } + fclose(f); + } } void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_dnd.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- e_dnd.c 10 Jun 2005 21:26:50 -0000 1.25 +++ e_dnd.c 16 Jun 2005 01:55:19 -0000 1.26 @@ -25,6 +25,7 @@ typedef struct _XDnd { int x, y; + char *type; void *data; } XDnd; @@ -356,7 +357,6 @@ { Evas_List *l; E_Event_Dnd_Drop *ev; - int dropped; if (_drag_current) { @@ -376,29 +376,61 @@ ev->x = x; ev->y = y; - dropped = 0; - for (l = _drop_handlers; l; l = l->next) + if (ev->data) { - E_Drop_Handler *h; + int dropped; - h = l->data; + dropped = 0; + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; - if (!h->active) - continue; - - if ((h->cb.drop) - && E_INSIDE(x, y, h->x, h->y, h->w, h->h)) + h = l->data; + + if (!h->active) + continue; + + if ((h->cb.drop) + && E_INSIDE(x, y, h->x, h->y, h->w, h->h)) + { + h->cb.drop(h->data, h->type, ev); + dropped = 1; + } + } + if (_drag_current) { - h->cb.drop(h->data, h->type, ev); - dropped = 1; + if (_drag_current->cb.finished) + _drag_current->cb.finished(_drag_current, dropped); + e_object_del(E_OBJECT(_drag_current)); + _drag_current = NULL; } } - if (_drag_current) + else { - if (_drag_current->cb.finished) - _drag_current->cb.finished(_drag_current, dropped); - e_object_del(E_OBJECT(_drag_current)); - _drag_current = NULL; + /* Just leave */ + E_Event_Dnd_Leave *leave_ev; + + leave_ev = E_NEW(E_Event_Dnd_Leave, 1); + /* FIXME: We don't need x and y in leave */ + leave_ev->x = 0; + leave_ev->y = 0; + + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; + + h = l->data; + + if (!h->active) + continue; + + if (h->entered) + { + if (h->cb.leave) + h->cb.leave(h->data, h->type, leave_ev); + h->entered = 0; + } + } } free(ev); @@ -552,20 +584,47 @@ con = data; if (con->bg_win != ev->win) return 1; printf("Xdnd enter\n"); + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; + + h = l->data; + + h->active = 0; + h->entered = 0; + } for (i = 0; i < ev->num_types; i++) { - printf("type: %s\n", ev->types[i]); /* FIXME: Maybe we want to get something else then files dropped? */ - if (strcmp("text/uri-list", ev->types[i])) - continue; - for (l = _drop_handlers; l; l = l->next) + if (!strcmp("text/uri-list", ev->types[i])) { - E_Drop_Handler *h; + _xdnd = E_NEW(XDnd, 1); + _xdnd->type = strdup("text/uri-list"); + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; - h = l->data; + h = l->data; - h->active = !strcmp(h->type, "enlightenment/x-file"); - h->entered = 0; + h->active = !strcmp(h->type, "enlightenment/x-file"); + h->entered = 0; + } + break; + } + else if (!strcmp("text/x-moz-url", ev->types[i])) + { + _xdnd = E_NEW(XDnd, 1); + _xdnd->type = strdup("text/x-moz-url"); + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; + + h = l->data; + + h->active = !strcmp(h->type, "enlightenment/x-file"); + h->entered = 0; + } + break; } } return 1; @@ -576,11 +635,43 @@ { Ecore_X_Event_Xdnd_Leave *ev; E_Container *con; + E_Event_Dnd_Leave *leave_ev; + Evas_List *l; ev = event; con = data; if (con->bg_win != ev->win) return 1; printf("Xdnd leave\n"); + + leave_ev = E_NEW(E_Event_Dnd_Leave, 1); + /* FIXME: We don't need x and y in leave */ + leave_ev->x = 0; + leave_ev->y = 0; + + for (l = _drop_handlers; l; l = l->next) + { + E_Drop_Handler *h; + + h = l->data; + + if (!h->active) + continue; + + if (h->entered) + { + if (h->cb.leave) + h->cb.leave(h->data, h->type, leave_ev); + h->entered = 0; + } + } + + if (_xdnd) + { + free(_xdnd->type); + free(_xdnd); + _xdnd = NULL; + } + free(leave_ev); return 1; } @@ -603,6 +694,7 @@ rect.width = 0; rect.height = 0; + active = 0; for (l = _drop_handlers; l; l = l->next) { E_Drop_Handler *h; @@ -635,9 +727,8 @@ if (con->bg_win != ev->win) return 1; printf("Xdnd drop\n"); - ecore_x_selection_xdnd_request(ev->win, "text/uri-list"); + ecore_x_selection_xdnd_request(ev->win, _xdnd->type); - _xdnd = E_NEW(XDnd, 1); _xdnd->x = ev->position.x; _xdnd->y = ev->position.y; return 1; @@ -647,9 +738,7 @@ _e_dnd_cb_event_dnd_selection(void *data, int type, void *event) { Ecore_X_Event_Selection_Notify *ev; - Ecore_X_Selection_Data_Files *files; E_Container *con; - Evas_List *l = NULL; int i; ev = event; @@ -658,22 +747,65 @@ (ev->selection != ECORE_X_SELECTION_XDND)) return 1; printf("Xdnd selection\n"); - files = ev->data; - for (i = 0; i < files->num_files; i++) + if (!strcmp("text/uri-list", _xdnd->type)) { - printf("files: %s\n", files->files[i]); - /* FIXME: - * Remove file:/// - * If ftp:// or http:// use curl/wget - * else, drop it... - l = evas_list_append(l, files->files[i]); - */ - } + Ecore_X_Selection_Data_Files *files; + Evas_List *l = NULL; - _xdnd->data = l; - e_drag_end(_xdnd->x, _xdnd->y); - evas_list_free(l); + files = ev->data; + for (i = 0; i < files->num_files; i++) + l = evas_list_append(l, files->files[i]); + _xdnd->data = l; + e_drag_end(_xdnd->x, _xdnd->y); + evas_list_free(l); + } + else if (!strcmp("text/x-moz-url", _xdnd->type)) + { + /* FIXME: Create a ecore x parser for this type */ + Ecore_X_Selection_Data *data; + Evas_List *l = NULL; + char file[PATH_MAX]; + char *text; + int i, size; + + data = ev->data; + text = data->data; + size = MIN(data->length, PATH_MAX - 1); + /* A moz url _shall_ contain a space */ + /* FIXME: The data is two-byte unicode. Somewhere it + * is written that the url and the text is separated by + * a space, but it seems like they are separated by + * newline + */ + for (i = 0; i < size; i++) + { + file[i] = text[i]; + printf("'%d-%c' ", text[i], text[i]); + /* + if (text[i] == ' ') + { + file[i] = '\0'; + break; + } + */ + } + printf("\n"); + file[i] = '\0'; + printf("file: %d \"%s\"\n", i, file); + l = evas_list_append(l, file); + + _xdnd->data = l; + e_drag_end(_xdnd->x, _xdnd->y); + evas_list_free(l); + } + else + { + e_drag_end(_xdnd->x, _xdnd->y); + } + /* FIXME: When to execute this? It could be executed in ecore_x after getting + * the drop property... */ ecore_x_dnd_send_finished(); + free(_xdnd->type); free(_xdnd); _xdnd = NULL; return 1; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_winlist.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- e_winlist.c 15 Jun 2005 10:57:27 -0000 1.19 +++ e_winlist.c 16 Jun 2005 01:55:19 -0000 1.20 @@ -94,7 +94,7 @@ y = (double)(zone->h - h) * e_config->winlist_pos_align_y; winlist = e_popup_new(zone, x, y, w, h); - if (!winlist) return; + if (!winlist) return 0; e_popup_layer_set(winlist, 255); evas_event_freeze(winlist->evas); o = edje_object_add(winlist->evas); @@ -595,6 +595,7 @@ _e_winlist_border_add(ev->border, winlist->zone, e_desk_current_get(winlist->zone)); _e_winlist_size_adjust(); + return 1; } static int @@ -605,6 +606,7 @@ ev = event; _e_winlist_border_del(ev->border); _e_winlist_size_adjust(); + return 1; } static int ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs