311typedef struct {
312 Evas_Object *window;
313 Ewk_File_Chooser_Request *request;
314} FileSelectorData;
315
316static void close_file_picker(FileSelectorData* fs_data)
317{
318 evas_object_del(fs_data->window);
319 ewk_file_chooser_request_unref(fs_data->request);
320 free(fs_data);
321}
322
323static void
324on_filepicker_deletion(void *user_data, Evas_Object *window, void *event_info)
325{
326 close_file_picker((FileSelectorData *)user_data);
327}
328
329static void
330on_fileselector_done(void *user_data, Evas_Object *file_selector, void *event_info)
331{
332 FileSelectorData *fs_data = (FileSelectorData *)user_data;
333
334 const char *selected = (const char *)event_info;
335 if (selected && *selected)
336 ewk_file_chooser_request_file_choose(fs_data->request, selected);
337
338 close_file_picker(fs_data);
339}
340
341static void
342on_file_chooser_request(void *user_data, Evas_Object *webview, void *event_info)
343{
344 Ewk_File_Chooser_Request *request = (Ewk_File_Chooser_Request *)event_info;
345
346 // Show basic file picker which does not currently support multiple files
347 // or MIME type filtering.
348 Evas_Object *window = elm_win_util_standard_add("file-picker-window", "File picker");
349
350 FileSelectorData* fs_data = (FileSelectorData*)malloc(sizeof(FileSelectorData));
351 fs_data->window = window;
352 fs_data->request = ewk_file_chooser_request_ref(request);
353 evas_object_smart_callback_add(window, "delete,request", on_filepicker_deletion, fs_data);
354
355 Evas_Object *file_selector = elm_fileselector_add(window);
356 const char *home_path = getenv("HOME");
357 elm_fileselector_path_set(file_selector, home_path ? home_path : "/home");
358 evas_object_size_hint_weight_set(file_selector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
359 elm_win_resize_object_add(window, file_selector);
360 evas_object_show(file_selector);
361
362 evas_object_smart_callback_add(file_selector, "done", on_fileselector_done, fs_data);
363
364 evas_object_resize(window, 400, 400);
365 elm_win_center(window, EINA_TRUE, EINA_TRUE);
366 evas_object_show(window);
367}
368