diff --git a/src/bin/e_eap_editor.c b/src/bin/e_eap_editor.c index b96d623f9..36edbff94 100644 --- a/src/bin/e_eap_editor.c +++ b/src/bin/e_eap_editor.c @@ -30,6 +30,8 @@ struct _E_Config_Dialog_Data int wait_exit; /*- common -*/ char *image; + int width; + int height; E_App_Edit *editor; }; @@ -103,6 +105,11 @@ _e_eap_edit_fill_data(E_Config_Dialog_Data *cfdata) IFDUP(cfdata->editor->eap->icon_class, cfdata->iclass); cfdata->startup_notify = cfdata->editor->eap->startup_notify; cfdata->wait_exit = cfdata->editor->eap->wait_exit; + /*- COMMON -*/ + IFDUP(cfdata->editor->eap->image, cfdata->image); + cfdata->height = cfdata->editor->eap->height; + cfdata->width = cfdata->editor->eap->width; + if (cfdata->image) cfdata->editor->img_set = 1; } static void * @@ -157,8 +164,10 @@ _e_eap_edit_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *data) eap->wait_exit = data->wait_exit; /* FIXME: hardcoded until the eap editor provides fields to change it */ - eap->width = 128; - eap->height = 128; + if (data->width) eap->width = data->width; + else eap->width = 128; + if (data->height) eap->height = data->height; + else eap->height = 128; if ((eap->name) && (eap->exe)) e_app_fields_save(eap); @@ -205,9 +214,11 @@ _e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *data if (data->iclass) eap->icon_class = evas_stringshare_add(data->iclass); /* FIXME: hardcoded until the eap editor provides fields to change it */ - eap->width = 128; - eap->height = 128; - + if (data->width) eap->width = data->width; + else eap->width = 128; + if (data->height) eap->height = data->height; + else eap->height = 128; + if ((eap->name) && (eap->exe)) e_app_fields_save(eap); return 1; diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index eefa529e2..b93695d39 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -556,6 +556,26 @@ _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi) if (bname) a->exe = evas_stringshare_add(bname); if (bd->client.netwm.startup_id > 0) a->startup_notify = 1; + if (bd->client.netwm.icons) + { + /* FIXME: Find the icon with the best size */ + const char *tmp; + + tmp = getenv("TMPDIR"); + if (!tmp) tmp = getenv("TMP"); + if (!tmp) tmp = "/tmp"; + snprintf(path, sizeof(path), "%s/%s-%.6f.jpg", tmp, bname, ecore_time_get()); + if (e_util_icon_save(&(bd->client.netwm.icons[0]), path)) + { + a->image = evas_stringshare_add(path); + a->width = bd->client.netwm.icons[0].width; + a->height = bd->client.netwm.icons[0].height; + } + else + { + fprintf(stderr, "Could not save file from ARGB: %s\n", path); + } + } bd->app = a; e_object_ref(E_OBJECT(bd->app)); } diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index ad54bc123..8a05a857e 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -564,7 +564,7 @@ e_util_filename_escape(const char *filename) } EAPI int -e_util_save_icon(Ecore_X_Icon *icon, const char *filename) +e_util_icon_save(Ecore_X_Icon *icon, const char *filename) { Ecore_Evas *ee; Evas *evas; @@ -587,6 +587,7 @@ e_util_save_icon(Ecore_X_Icon *icon, const char *filename) evas_object_resize(im, icon->width, icon->height); evas_object_image_size_set(im, icon->width, icon->height); evas_object_image_data_copy_set(im, icon->data); + evas_object_image_alpha_set(im, 1); evas_object_show(im); ret = evas_object_image_save(im, filename, NULL, NULL); evas_object_del(im); diff --git a/src/bin/e_utils.h b/src/bin/e_utils.h index f2998afaa..13441ef67 100644 --- a/src/bin/e_utils.h +++ b/src/bin/e_utils.h @@ -40,7 +40,7 @@ EAPI E_Border *e_util_desk_border_below(E_Border *bd); EAPI int e_util_edje_collection_exists(const char *file, const char *coll); EAPI void e_util_dialog_internal(const char *title, const char *txt); EAPI const char *e_util_filename_escape(const char *filename); -EAPI int e_util_save_icon(Ecore_X_Icon *icon, const char *filename); +EAPI int e_util_icon_save(Ecore_X_Icon *icon, const char *filename); #endif #endif