diff --git a/src/modules/conf_wallpaper/e_int_config_wallpaper.c b/src/modules/conf_wallpaper/e_int_config_wallpaper.c index 3f613ec95..2e7c2254c 100644 --- a/src/modules/conf_wallpaper/e_int_config_wallpaper.c +++ b/src/modules/conf_wallpaper/e_int_config_wallpaper.c @@ -146,6 +146,31 @@ e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia) cfdata->dia_gradient = NULL; } +EAPI void +e_int_config_wallpaper_handler_set(Evas_Object *obj, const char *path, void *data) +{ + const char *dev, *fpath; + + if (!path) return; + e_fm2_path_get(obj, &dev, &fpath); + if (e_config->wallpaper_import_last_dev) + evas_stringshare_del(e_config->wallpaper_import_last_dev); + e_config->wallpaper_import_last_dev = evas_stringshare_add(dev); + if (e_config->wallpaper_import_last_path) + evas_stringshare_del(e_config->wallpaper_import_last_path); + e_config->wallpaper_import_last_path = evas_stringshare_add(fpath); + e_config_save_queue(); + + e_int_config_wallpaper_import(NULL); +} + +EAPI int +e_int_config_wallpaper_handler_test(Evas_Object *obj, const char *path, void *data) +{ + if (!path) return 0; + return 1; +} + static void _cb_button_up(void *data1, void *data2) { diff --git a/src/modules/conf_wallpaper/e_int_config_wallpaper.h b/src/modules/conf_wallpaper/e_int_config_wallpaper.h index 308ffa5bc..5e2ad4936 100644 --- a/src/modules/conf_wallpaper/e_int_config_wallpaper.h +++ b/src/modules/conf_wallpaper/e_int_config_wallpaper.h @@ -10,9 +10,12 @@ typedef struct _E_Config_Wallpaper E_Config_Wallpaper; EAPI E_Config_Dialog *e_int_config_wallpaper(E_Container *con, const char *params __UNUSED__); EAPI E_Config_Dialog *e_int_config_wallpaper_desk(E_Container *con, const char *params); -EAPI void e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file); -EAPI void e_int_config_wallpaper_import_done(E_Config_Dialog *dia); -EAPI void e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia); +EAPI void e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file); +EAPI void e_int_config_wallpaper_import_done(E_Config_Dialog *dia); +EAPI void e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia); + +EAPI void e_int_config_wallpaper_handler_set(Evas_Object *obj, const char *path, void *data); +EAPI int e_int_config_wallpaper_handler_test(Evas_Object *obj, const char *path, void *data); #endif #endif diff --git a/src/modules/conf_wallpaper/e_int_config_wallpaper_import.c b/src/modules/conf_wallpaper/e_int_config_wallpaper_import.c index e12cf8c1c..390e0cb20 100644 --- a/src/modules/conf_wallpaper/e_int_config_wallpaper_import.c +++ b/src/modules/conf_wallpaper/e_int_config_wallpaper_import.c @@ -80,8 +80,12 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) import = E_NEW(Import, 1); if (!import) return NULL; - - win = e_win_new(parent->con); + + if (parent) + win = e_win_new(parent->con); + else + win = e_win_new(e_container_current_get(e_manager_current_get())); + if (!win) { free(import); @@ -96,8 +100,9 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) import->win = win; evas = e_win_evas_get(win); - - import->parent = parent; + + if (parent) + import->parent = parent; e_win_title_set(win, _("Select a Picture...")); e_win_delete_callback_set(win, _import_cb_delete); @@ -141,8 +146,7 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) } ofm = e_widget_fsel_add(evas, fdev, fpath, NULL, NULL, _import_cb_sel_selected, import, - _import_cb_sel_change, import, 1 - ); + _import_cb_sel_change, import, 1); e_widget_fsel_window_object_set(ofm, E_OBJECT(win)); import->fsel_obj = ofm; e_widget_list_object_append(o, ofm, 1, 1, 0.5); @@ -230,7 +234,8 @@ e_int_config_wallpaper_del(E_Win *win) E_FREE(import->fdest); import->exe = NULL; e_object_del(E_OBJECT(import->win)); - e_int_config_wallpaper_import_done(import->parent); + if (import->parent) + e_int_config_wallpaper_import_done(import->parent); E_FREE(import->cfdata->file); E_FREE(import->cfdata); if (import) free(import); @@ -475,8 +480,9 @@ _import_cb_edje_cc_exit(void *data, int type, void *event) _("Enlightenment was unable to import the picture
" "due to conversion errors.")); } - - e_int_config_wallpaper_update(import->parent, import->fdest); + + if (import->parent) + e_int_config_wallpaper_update(import->parent, import->fdest); e_int_config_wallpaper_del(import->win); return 0; @@ -554,7 +560,8 @@ _import_cb_ok(void *data, void *data2) } else { - e_int_config_wallpaper_update(import->parent, buf); + if (import->parent) + e_int_config_wallpaper_update(import->parent, buf); e_int_config_wallpaper_del(win); return; } diff --git a/src/modules/conf_wallpaper/e_mod_main.c b/src/modules/conf_wallpaper/e_mod_main.c index 4386c4e9f..1796c6494 100644 --- a/src/modules/conf_wallpaper/e_mod_main.c +++ b/src/modules/conf_wallpaper/e_mod_main.c @@ -13,18 +13,8 @@ static void _e_mod_menu_add(void *data, E_Menu *m); static E_Module *conf_module = NULL; static E_Int_Menu_Augmentation *maug = NULL; +static E_Fm2_Mime_Handler *import_hdl = NULL; -/**/ -/***************************************************************************/ - -/***************************************************************************/ -/**/ - -/**/ -/***************************************************************************/ - -/***************************************************************************/ -/**/ /* module setup */ EAPI E_Module_Api e_modapi = { @@ -41,6 +31,15 @@ e_modapi_init(E_Module *m) e_configure_registry_item_add("internal/wallpaper_desk", -1, _("Wallpaper"), NULL, "enlightenment/windows", e_int_config_wallpaper_desk); maug = e_int_menus_menu_augmentation_add("config/1", _e_mod_menu_add, NULL, NULL, NULL); + import_hdl = e_fm2_mime_handler_new(_("Set As Background"), "enlightenment/background", + e_int_config_wallpaper_handler_set, NULL, + e_int_config_wallpaper_handler_test, NULL); + if (import_hdl) + { + e_fm2_mime_handler_mime_add(import_hdl, "image/png"); + e_fm2_mime_handler_mime_add(import_hdl, "image/jpeg"); + } + conf_module = m; e_module_delayed_set(m, 1); return m; @@ -56,11 +55,20 @@ e_modapi_shutdown(E_Module *m) e_int_menus_menu_augmentation_del("config/1", maug); maug = NULL; } - while ((cfd = e_config_dialog_get("E", "_config_wallpaper_dialog"))) e_object_del(E_OBJECT(cfd)); + while ((cfd = e_config_dialog_get("E", "_config_wallpaper_dialog"))) + e_object_del(E_OBJECT(cfd)); e_configure_registry_item_del("internal/wallpaper_desk"); e_configure_registry_category_del("internal"); e_configure_registry_item_del("appearance/wallpaper"); e_configure_registry_category_del("appearance"); + + if (import_hdl) + { + e_fm2_mime_handler_mime_del(import_hdl, "image/png"); + e_fm2_mime_handler_mime_del(import_hdl, "image/jpeg"); + e_fm2_mime_handler_free(import_hdl); + } + conf_module = NULL; return 1; }