break out wallpaper import dialog and import settings dialog into separate dialogs usable outside the wallpaper widget, also clean up this code
SVN revision: 75047
This commit is contained in:
parent
0689758ce0
commit
5e1e915578
|
@ -95,6 +95,8 @@ e.h \
|
|||
e_hints.h \
|
||||
e_icon.h \
|
||||
e_ilist.h \
|
||||
e_import_config_dialog.h \
|
||||
e_import_dialog.h \
|
||||
e_includes.h \
|
||||
e_init.h \
|
||||
e_int_border_locks.h \
|
||||
|
@ -247,6 +249,8 @@ e_grabinput.c \
|
|||
e_hints.c \
|
||||
e_icon.c \
|
||||
e_ilist.c \
|
||||
e_import_config_dialog.c \
|
||||
e_import_dialog.c \
|
||||
e_init.c \
|
||||
e_int_border_locks.c \
|
||||
e_int_border_menu.c \
|
||||
|
|
|
@ -0,0 +1,520 @@
|
|||
#include "e.h"
|
||||
|
||||
#define IMPORT_STRETCH 0
|
||||
#define IMPORT_TILE 1
|
||||
#define IMPORT_CENTER 2
|
||||
#define IMPORT_SCALE_ASPECT_IN 3
|
||||
#define IMPORT_SCALE_ASPECT_OUT 4
|
||||
#define IMPORT_PAN 5
|
||||
|
||||
static void _import_edj_gen(E_Import_Config_Dialog *import);
|
||||
static Eina_Bool _import_cb_edje_cc_exit(void *data, int type, void *event);
|
||||
|
||||
|
||||
static void
|
||||
_import_edj_gen(E_Import_Config_Dialog *import)
|
||||
{
|
||||
Evas *evas;
|
||||
Evas_Object *img;
|
||||
int fd, num = 1;
|
||||
int w = 0, h = 0;
|
||||
const char *file, *locale;
|
||||
char buf[PATH_MAX], cmd[PATH_MAX], tmpn[PATH_MAX], ipart[PATH_MAX], enc[128];
|
||||
char *imgdir = NULL, *fstrip;
|
||||
int cr, cg, cb, ca;
|
||||
FILE *f;
|
||||
size_t len, off;
|
||||
|
||||
evas = e_win_evas_get(import->dia->win);
|
||||
file = ecore_file_file_get(import->file);
|
||||
fstrip = ecore_file_strip_ext(file);
|
||||
if (!fstrip) return;
|
||||
len = e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s.edj", fstrip);
|
||||
if (len >= sizeof(buf)) return;
|
||||
off = len - (sizeof(".edj") - 1);
|
||||
for (num = 1; ecore_file_exists(buf) && num < 100; num++)
|
||||
snprintf(buf + off, sizeof(buf) - off, "-%d.edj", num);
|
||||
free(fstrip);
|
||||
cr = import->color.r;
|
||||
cg = import->color.g;
|
||||
cb = import->color.b;
|
||||
ca = import->color.a;
|
||||
|
||||
if (num == 100)
|
||||
{
|
||||
printf("Couldn't come up with another filename for %s\n", buf);
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy(tmpn, "/tmp/e_bgdlg_new.edc-tmp-XXXXXX");
|
||||
fd = mkstemp(tmpn);
|
||||
if (fd < 0)
|
||||
{
|
||||
printf("Error Creating tmp file: %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
close(fd);
|
||||
|
||||
f = fopen(tmpn, "w");
|
||||
if (!f)
|
||||
{
|
||||
printf("Cannot open %s for writing\n", tmpn);
|
||||
return;
|
||||
}
|
||||
|
||||
imgdir = ecore_file_dir_get(import->file);
|
||||
if (!imgdir) ipart[0] = '\0';
|
||||
else
|
||||
{
|
||||
snprintf(ipart, sizeof(ipart), "-id %s", e_util_filename_escape(imgdir));
|
||||
free(imgdir);
|
||||
}
|
||||
|
||||
img = evas_object_image_add(evas);
|
||||
evas_object_image_file_set(img, import->file, NULL);
|
||||
evas_object_image_size_get(img, &w, &h);
|
||||
evas_object_del(img);
|
||||
|
||||
if (import->external)
|
||||
{
|
||||
fstrip = strdup(e_util_filename_escape(import->file));
|
||||
snprintf(enc, sizeof(enc), "USER");
|
||||
}
|
||||
else
|
||||
{
|
||||
fstrip = strdup(e_util_filename_escape(file));
|
||||
if (import->quality == 100)
|
||||
snprintf(enc, sizeof(enc), "COMP");
|
||||
else
|
||||
snprintf(enc, sizeof(enc), "LOSSY %i", import->quality);
|
||||
}
|
||||
switch (import->method)
|
||||
{
|
||||
case IMPORT_STRETCH:
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"0\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"parts {\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n"
|
||||
"} } } } }\n"
|
||||
, fstrip, enc, w, h, fstrip);
|
||||
break;
|
||||
|
||||
case IMPORT_TILE:
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"1\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"parts {\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"image { normal: \"%s\"; }\n"
|
||||
"fill { size {\n"
|
||||
"relative: 0.0 0.0;\n"
|
||||
"offset: %i %i;\n"
|
||||
"} } } } } } }\n"
|
||||
, fstrip, enc, w, h, fstrip, w, h);
|
||||
break;
|
||||
|
||||
case IMPORT_CENTER:
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"2\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"parts {\n"
|
||||
"part { name: \"col\"; type: RECT; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"color: %i %i %i %i;\n"
|
||||
"} }\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"min: %i %i; max: %i %i;\n"
|
||||
"image { normal: \"%s\"; }\n"
|
||||
"} } } } }\n"
|
||||
, fstrip, enc, w, h, cr, cg, cb, ca, w, h, w, h, fstrip);
|
||||
break;
|
||||
|
||||
case IMPORT_SCALE_ASPECT_IN:
|
||||
locale = e_intl_language_get();
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"3\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"parts {\n"
|
||||
"part { name: \"col\"; type: RECT; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"color: %i %i %i %i;\n"
|
||||
"} }\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"aspect: %1.9f %1.9f; aspect_preference: BOTH;\n"
|
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n"
|
||||
"} } } } }\n"
|
||||
, fstrip, enc, w, h, cr, cg, cb, ca, (double)w / (double)h, (double)w / (double)h, fstrip);
|
||||
setlocale(LC_NUMERIC, locale);
|
||||
break;
|
||||
|
||||
case IMPORT_SCALE_ASPECT_OUT:
|
||||
locale = e_intl_language_get();
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"4\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"parts {\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"aspect: %1.9f %1.9f; aspect_preference: NONE;\n"
|
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n"
|
||||
"} } } } }\n"
|
||||
, fstrip, enc, w, h, (double)w / (double)h, (double)w / (double)h, fstrip);
|
||||
setlocale(LC_NUMERIC, locale);
|
||||
break;
|
||||
|
||||
case IMPORT_PAN:
|
||||
locale = e_intl_language_get();
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
fprintf(f,
|
||||
"images { image: \"%s\" %s; }\n"
|
||||
"collections {\n"
|
||||
"group { name: \"e/desktop/background\";\n"
|
||||
"data { item: \"style\" \"4\"; }\n"
|
||||
"max: %i %i;\n"
|
||||
"script {\n"
|
||||
"public cur_anim; public cur_x; public cur_y; public prev_x;\n"
|
||||
"public prev_y; public total_x; public total_y; \n"
|
||||
"public pan_bg(val, Float:v) {\n"
|
||||
"new Float:x, Float:y, Float:px, Float: py;\n"
|
||||
|
||||
"px = get_float(prev_x); py = get_float(prev_y);\n"
|
||||
"if (get_int(total_x) > 1) {\n"
|
||||
"x = float(get_int(cur_x)) / (get_int(total_x) - 1);\n"
|
||||
"x = px - (px - x) * v;\n"
|
||||
"} else { x = 0.0; v = 1.0; }\n"
|
||||
"if (get_int(total_y) > 1) {\n"
|
||||
"y = float(get_int(cur_y)) / (get_int(total_y) - 1);\n"
|
||||
"y = py - (py - y) * v;\n"
|
||||
"} else { y = 0.0; v = 1.0; }\n"
|
||||
|
||||
"set_state_val(PART:\"bg\", STATE_ALIGNMENT, x, y);\n"
|
||||
|
||||
"if (v >= 1.0) {\n"
|
||||
"set_int(cur_anim, 0); set_float(prev_x, x);\n"
|
||||
"set_float(prev_y, y); return 0;\n"
|
||||
"}\n"
|
||||
"return 1;\n"
|
||||
"}\n"
|
||||
"public message(Msg_Type:type, id, ...) {\n"
|
||||
"if ((type == MSG_FLOAT_SET) && (id == 0)) {\n"
|
||||
"new ani;\n"
|
||||
|
||||
"get_state_val(PART:\"bg\", STATE_ALIGNMENT, prev_x, prev_y);\n"
|
||||
"set_int(cur_x, round(getfarg(3))); set_int(total_x, round(getfarg(4)));\n"
|
||||
"set_int(cur_y, round(getfarg(5))); set_int(total_y, round(getfarg(6)));\n"
|
||||
|
||||
"ani = get_int(cur_anim); if (ani > 0) cancel_anim(ani);\n"
|
||||
"ani = anim(getfarg(2), \"pan_bg\", 0); set_int(cur_anim, ani);\n"
|
||||
"} } }\n"
|
||||
"parts {\n"
|
||||
"part { name: \"bg\"; mouse_events: 0;\n"
|
||||
"description { state: \"default\" 0.0;\n"
|
||||
"aspect: %1.9f %1.9f; aspect_preference: NONE;\n"
|
||||
"image { normal: \"%s\"; scale_hint: STATIC; }\n"
|
||||
"} } }\n"
|
||||
"programs { program {\n"
|
||||
" name: \"init\";\n"
|
||||
" signal: \"load\";\n"
|
||||
" source: \"\";\n"
|
||||
" script { custom_state(PART:\"bg\", \"default\", 0.0);\n"
|
||||
" set_state(PART:\"bg\", \"custom\", 0.0);\n"
|
||||
" set_float(prev_x, 0.0); set_float(prev_y, 0.0);\n"
|
||||
"} } } } }\n"
|
||||
, fstrip, enc, w, h, (double)w / (double)h, (double)w / (double)h, fstrip);
|
||||
setlocale(LC_NUMERIC, locale);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* won't happen */
|
||||
break;
|
||||
}
|
||||
free(fstrip);
|
||||
|
||||
fclose(f);
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "edje_cc -v %s %s %s",
|
||||
ipart, tmpn, e_util_filename_escape(buf));
|
||||
|
||||
import->tmpf = strdup(tmpn);
|
||||
import->fdest = eina_stringshare_add(buf);
|
||||
import->exe_handler =
|
||||
ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
|
||||
_import_cb_edje_cc_exit, import);
|
||||
import->exe = ecore_exe_run(cmd, import);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_import_cb_edje_cc_exit(void *data, __UNUSED__ int type, void *event)
|
||||
{
|
||||
E_Import_Config_Dialog *import;
|
||||
Ecore_Exe_Event_Del *ev;
|
||||
int r = 1;
|
||||
|
||||
ev = event;
|
||||
import = data;
|
||||
if (ecore_exe_data_get(ev->exe) != import) return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
if (ev->exit_code != 0)
|
||||
{
|
||||
e_util_dialog_show(_("Picture E_Import_Config_Dialog Error"),
|
||||
_("Enlightenment was unable to import the picture<br>"
|
||||
"due to conversion errors."));
|
||||
r = 0;
|
||||
}
|
||||
|
||||
if (r && import->ok)
|
||||
{
|
||||
e_object_ref(E_OBJECT(import));
|
||||
import->ok((void*)import->fdest, import);
|
||||
e_object_del(E_OBJECT(import));
|
||||
e_object_unref(E_OBJECT(import));
|
||||
}
|
||||
else
|
||||
e_object_del(E_OBJECT(import));
|
||||
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
||||
static void
|
||||
_import_cb_close(void *data, E_Dialog *dia __UNUSED__)
|
||||
{
|
||||
E_Import_Config_Dialog *import = data;
|
||||
|
||||
e_object_ref(data);
|
||||
if (import->cancel) import->cancel(import);
|
||||
e_object_del(data);
|
||||
e_object_unref(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_import_cb_ok(void *data, E_Dialog *dia __UNUSED__)
|
||||
{
|
||||
E_Import_Config_Dialog *import = data;
|
||||
const char *file;
|
||||
char buf[PATH_MAX];
|
||||
int is_bg, is_theme, r;
|
||||
|
||||
r = 0;
|
||||
if (!import->file) return;
|
||||
file = ecore_file_file_get(import->file);
|
||||
if (!eina_str_has_extension(file, "edj"))
|
||||
{
|
||||
_import_edj_gen(import);
|
||||
e_win_hide(import->dia->win);
|
||||
return;
|
||||
}
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s", file);
|
||||
|
||||
is_bg = edje_file_group_exists(import->file, "e/desktop/background");
|
||||
is_theme = edje_file_group_exists(import->file,
|
||||
"e/widgets/border/default/border");
|
||||
|
||||
if ((is_bg) && (!is_theme))
|
||||
{
|
||||
if (!ecore_file_cp(import->file, buf))
|
||||
{
|
||||
e_util_dialog_show(_("Import Error"),
|
||||
_("Enlightenment was unable to "
|
||||
"import the image<br>due to a "
|
||||
"copy error."));
|
||||
}
|
||||
else
|
||||
r = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
e_util_dialog_show(_("Import Error"),
|
||||
_("Enlightenment was unable to "
|
||||
"import the image.<br><br>"
|
||||
"Are you sure this is a valid "
|
||||
"image?"));
|
||||
}
|
||||
|
||||
if (r)
|
||||
{
|
||||
e_object_ref(E_OBJECT(import));
|
||||
if (import->ok) import->ok((void*)buf, import);
|
||||
e_object_del(E_OBJECT(import));
|
||||
e_object_unref(E_OBJECT(import));
|
||||
}
|
||||
else
|
||||
_import_cb_close(import, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_import_config_preview_size_get(int size, int w, int h,int *tw, int *th)
|
||||
{
|
||||
if (size <= 0) return;
|
||||
double aspect;
|
||||
aspect = (double)w/h;
|
||||
|
||||
if(w > size)
|
||||
{
|
||||
w = size;
|
||||
h = (w/aspect);
|
||||
}
|
||||
*tw = w;
|
||||
*th = h;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_import_config_dialog_del(void *data)
|
||||
{
|
||||
E_Import_Config_Dialog *import = data;
|
||||
|
||||
if (import->exe_handler) ecore_event_handler_del(import->exe_handler);
|
||||
import->exe_handler = NULL;
|
||||
if (import->tmpf) unlink(import->tmpf);
|
||||
free(import->tmpf);
|
||||
eina_stringshare_del(import->fdest);
|
||||
import->exe = NULL;
|
||||
eina_stringshare_del(import->file);
|
||||
e_object_del(E_OBJECT(import->dia));
|
||||
free(import);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_import_config_dialog_win_del(E_Win *win)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
E_Import_Config_Dialog *import;
|
||||
|
||||
dia = win->data;
|
||||
import = dia->data;
|
||||
e_object_ref(E_OBJECT(import));
|
||||
if (import->cancel) import->cancel(import);
|
||||
e_object_del(E_OBJECT(import));
|
||||
e_object_unref(E_OBJECT(import));
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
EAPI E_Import_Config_Dialog *
|
||||
e_import_config_dialog_show(E_Container *con, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel)
|
||||
{
|
||||
Evas *evas;
|
||||
E_Dialog *dia;
|
||||
E_Import_Config_Dialog *import;
|
||||
Evas_Object *o, *of, *ord, *ot, *ol, *preview, *frame;
|
||||
E_Radio_Group *rg;
|
||||
int w, h, tw, th;
|
||||
|
||||
if (!path) return NULL;
|
||||
|
||||
import = E_OBJECT_ALLOC(E_Import_Config_Dialog, E_IMPORT_CONFIG_DIALOG_TYPE, _e_import_config_dialog_del);
|
||||
if (!import) return NULL;
|
||||
|
||||
dia = e_dialog_new(con, "E", "_import_config_dialog");
|
||||
e_dialog_title_set(dia, _("Import Settings..."));
|
||||
dia->data = import;
|
||||
import->dia = dia;
|
||||
import->ok = ok, import->cancel = cancel;
|
||||
import->path = eina_stringshare_add(path);
|
||||
e_win_delete_callback_set(dia->win, _e_import_config_dialog_win_del);
|
||||
|
||||
evas = e_win_evas_get(dia->win);
|
||||
|
||||
import->method = IMPORT_SCALE_ASPECT_OUT;
|
||||
import->external = 0;
|
||||
import->quality = 90;
|
||||
import->file = eina_stringshare_add(path);
|
||||
|
||||
evas = e_win_evas_get(dia->win);
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
||||
ot = e_widget_list_add(evas, 0, 0);
|
||||
frame = e_widget_frametable_add(evas, _("Preview"), 1);
|
||||
|
||||
preview = evas_object_image_add(evas);
|
||||
evas_object_image_file_set(preview, path, NULL);
|
||||
evas_object_image_size_get(preview,&w, &h);
|
||||
evas_object_del(preview);
|
||||
|
||||
_e_import_config_preview_size_get(320, w, h, &tw, &th);
|
||||
|
||||
preview = e_widget_preview_add(evas, tw, th);
|
||||
e_widget_preview_thumb_set(preview, path, NULL, tw, th);
|
||||
|
||||
e_widget_frametable_object_append(frame, preview, 0, 0, 1, 1, 1, 1, 1, 0);
|
||||
e_widget_list_object_append(ot, frame, 1, 1, 0);
|
||||
of = e_widget_frametable_add(evas, _("Fill and Stretch Options"), 1);
|
||||
rg = e_widget_radio_group_new(&import->method);
|
||||
ord = e_widget_radio_icon_add(evas, _("Stretch"),
|
||||
"enlightenment/wallpaper_stretch",
|
||||
24, 24, IMPORT_STRETCH, rg);
|
||||
e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_radio_icon_add(evas, _("Center"),
|
||||
"enlightenment/wallpaper_center",
|
||||
24, 24, IMPORT_CENTER, rg);
|
||||
e_widget_frametable_object_append(of, ord, 1, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_radio_icon_add(evas, _("Tile"),
|
||||
"enlightenment/wallpaper_tile",
|
||||
24, 24, IMPORT_TILE, rg);
|
||||
e_widget_frametable_object_append(of, ord, 2, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_radio_icon_add(evas, _("Within"),
|
||||
"enlightenment/wallpaper_scale_aspect_in",
|
||||
24, 24, IMPORT_SCALE_ASPECT_IN, rg);
|
||||
e_widget_frametable_object_append(of, ord, 3, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_radio_icon_add(evas, _("Fill"),
|
||||
"enlightenment/wallpaper_scale_aspect_out",
|
||||
24, 24, IMPORT_SCALE_ASPECT_OUT, rg);
|
||||
e_widget_frametable_object_append(of, ord, 4, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_radio_icon_add(evas, _("Pan"),
|
||||
"enlightenment/wallpaper_pan",
|
||||
24, 24, IMPORT_PAN, rg);
|
||||
e_widget_frametable_object_append(of, ord, 5, 0, 1, 1, 1, 0, 1, 0);
|
||||
e_widget_list_object_append(ot, of, 1, 1, 0);
|
||||
|
||||
ol = e_widget_list_add(evas, 0, 1);
|
||||
|
||||
of = e_widget_frametable_add(evas, _("File Quality"), 0);
|
||||
ord = e_widget_check_add(evas, _("Use original file"), &(import->external));
|
||||
e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0);
|
||||
ord = e_widget_slider_add(evas, 1, 0, _("%3.0f%%"), 0.0, 100.0, 1.0, 0,
|
||||
NULL, &(import->quality), 150);
|
||||
e_widget_frametable_object_append(of, ord, 0, 1, 1, 1, 1, 0, 1, 0);
|
||||
e_widget_list_object_append(ol, of, 1, 1, 0);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Fill Color"), 0);
|
||||
ord = e_widget_color_well_add(evas, &import->color, 1);
|
||||
e_widget_framelist_object_append(of, ord);
|
||||
e_widget_list_object_append(ol, of, 1, 0, 1);
|
||||
e_widget_list_object_append(ot, ol, 1, 1, 0);
|
||||
|
||||
e_widget_list_object_append(o, ot, 0, 0, 0.5);
|
||||
|
||||
e_widget_size_min_get(o, &w, &h);
|
||||
e_dialog_content_set(dia, o, w, h);
|
||||
e_dialog_button_add(dia, _("OK"), NULL, _import_cb_ok, import);
|
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _import_cb_close, import);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_dialog_border_icon_set(dia, "folder-image");
|
||||
e_dialog_button_focus_num(dia, 0);
|
||||
e_dialog_show(dia);
|
||||
|
||||
return import;
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
typedef struct _E_Import_Config_Dialog E_Import_Config_Dialog;
|
||||
#else
|
||||
#ifndef E_IMPORT_CONFIG_DIALOG_H
|
||||
#define E_IMPORT_CONFIG_DIALOG_H
|
||||
|
||||
#define E_IMPORT_CONFIG_DIALOG_TYPE 0xE0b01040
|
||||
struct _E_Import_Config_Dialog
|
||||
{
|
||||
E_Object e_obj_inherit;
|
||||
Ecore_End_Cb ok;
|
||||
Ecore_Cb cancel;
|
||||
|
||||
const char *file;
|
||||
int method;
|
||||
int external;
|
||||
int quality;
|
||||
E_Color color;
|
||||
|
||||
Ecore_Exe *exe;
|
||||
Ecore_Event_Handler *exe_handler;
|
||||
const char *path;
|
||||
char *tmpf;
|
||||
const char *fdest;
|
||||
|
||||
E_Dialog *dia;
|
||||
};
|
||||
|
||||
EAPI E_Import_Config_Dialog *e_import_config_dialog_show(E_Container *con, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel);
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -0,0 +1,182 @@
|
|||
#include "e.h"
|
||||
|
||||
static void
|
||||
_fsel_path_save(E_Import_Dialog *id)
|
||||
{
|
||||
const char *fdev = NULL, *fpath = NULL;
|
||||
|
||||
e_widget_fsel_path_get(id->fsel_obj, &fdev, &fpath);
|
||||
if ((fdev) || (fpath))
|
||||
{
|
||||
eina_stringshare_replace(&e_config->wallpaper_import_last_dev, fdev);
|
||||
eina_stringshare_replace(&e_config->wallpaper_import_last_path, fpath);
|
||||
e_config_save_queue();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_fsel_cb_close(void *data, E_Dialog *dia __UNUSED__)
|
||||
{
|
||||
E_Import_Dialog *id = data;
|
||||
|
||||
e_object_ref(data);
|
||||
if (id->cancel) id->cancel(id);
|
||||
e_object_del(data);
|
||||
e_object_unref(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_import_ok(void *data, void *data2)
|
||||
{
|
||||
E_Import_Dialog *id;
|
||||
|
||||
id = e_object_data_get(data2);
|
||||
e_object_ref(E_OBJECT(id));
|
||||
if (id->ok) id->ok(data, id);
|
||||
e_object_del(E_OBJECT(id));
|
||||
e_object_unref(E_OBJECT(id));
|
||||
}
|
||||
|
||||
static void
|
||||
_fsel_cb_ok(void *data, E_Dialog *dia __UNUSED__)
|
||||
{
|
||||
E_Import_Dialog *id;
|
||||
const char *path, *p;
|
||||
int is_bg, is_theme, r;
|
||||
const char *file;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
id = data;
|
||||
path = e_widget_fsel_selection_path_get(id->fsel_obj);
|
||||
if (!path) return;
|
||||
|
||||
p = strrchr(path, '.');
|
||||
if ((p) && (strcasecmp(p, ".edj")))
|
||||
{
|
||||
E_Import_Config_Dialog *import;
|
||||
import = e_import_config_dialog_show(id->dia->win->container, path, _import_ok, NULL);
|
||||
e_object_data_set(E_OBJECT(import), id);
|
||||
return;
|
||||
}
|
||||
r = 0;
|
||||
file = ecore_file_file_get(path);
|
||||
e_user_dir_snprintf(buf, sizeof(buf), "backgrounds/%s", file);
|
||||
|
||||
is_bg = edje_file_group_exists(path, "e/desktop/background");
|
||||
is_theme =
|
||||
edje_file_group_exists(path, "e/widgets/border/default/border");
|
||||
|
||||
if ((is_bg) && (!is_theme))
|
||||
{
|
||||
if (!ecore_file_cp(path, buf))
|
||||
{
|
||||
e_util_dialog_show(_("Import Error"),
|
||||
_("Enlightenment was unable to "
|
||||
"import the image<br>due to a "
|
||||
"copy error."));
|
||||
}
|
||||
else
|
||||
r = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
e_util_dialog_show(_("Import Error"),
|
||||
_("Enlightenment was unable to "
|
||||
"import the image.<br><br>"
|
||||
"Are you sure this is a valid "
|
||||
"image?"));
|
||||
}
|
||||
|
||||
if (r)
|
||||
{
|
||||
e_object_ref(E_OBJECT(id));
|
||||
if (id->ok) id->ok(buf, id);
|
||||
e_object_del(E_OBJECT(id));
|
||||
e_object_unref(E_OBJECT(id));
|
||||
}
|
||||
else
|
||||
_fsel_cb_close(id, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_e_import_dialog_del(void *data)
|
||||
{
|
||||
E_Import_Dialog *id = data;
|
||||
|
||||
_fsel_path_save(id);
|
||||
e_object_del(E_OBJECT(id->dia));
|
||||
free(id);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_import_dialog_win_del(E_Win *win)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
E_Import_Dialog *id;
|
||||
|
||||
dia = win->data;
|
||||
id = dia->data;
|
||||
e_object_del(E_OBJECT(id));
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
EAPI E_Import_Dialog *
|
||||
e_import_dialog_show(E_Container *con, const char *dev, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel)
|
||||
{
|
||||
Evas *evas;
|
||||
E_Import_Dialog *id;
|
||||
Evas_Object *ofm;
|
||||
int w, h;
|
||||
const char *fdev, *fpath;
|
||||
char buf[PATH_MAX];
|
||||
E_Dialog *dia;
|
||||
|
||||
id = E_OBJECT_ALLOC(E_Import_Dialog, E_IMPORT_DIALOG_TYPE, _e_import_dialog_del);
|
||||
if (!id) return NULL;
|
||||
|
||||
dia = e_dialog_new(con, "E", "_import_fsel_dialog");
|
||||
dia->data = id;
|
||||
id->dia = dia;
|
||||
id->ok = ok, id->cancel = cancel;
|
||||
e_win_delete_callback_set(dia->win, _e_import_dialog_win_del);
|
||||
|
||||
evas = e_win_evas_get(dia->win);
|
||||
e_dialog_title_set(dia, _("Select a Picture..."));
|
||||
|
||||
fdev = dev ?: e_config->wallpaper_import_last_dev;
|
||||
fpath = path ?: e_config->wallpaper_import_last_path;
|
||||
if (fdev)
|
||||
snprintf(buf, sizeof(buf), "%s/%s",
|
||||
fdev, path);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%s", path);
|
||||
|
||||
if (!ecore_file_exists(ecore_file_realpath(buf)))
|
||||
fpath = "/";
|
||||
else
|
||||
fpath = path ?: e_config->wallpaper_import_last_path;
|
||||
|
||||
if ((!fdev) && (!fpath))
|
||||
{
|
||||
fdev = "~/";
|
||||
fpath = "/";
|
||||
}
|
||||
|
||||
printf("LAST: [%s] '%s' '%s'\n", buf, fdev, fpath);
|
||||
ofm = e_widget_fsel_add(evas, fdev, fpath, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, 1);
|
||||
e_widget_fsel_window_object_set(ofm, E_OBJECT(dia->win));
|
||||
id->fsel_obj = ofm;
|
||||
e_widget_size_min_get(ofm, &w, &h);
|
||||
e_dialog_content_set(dia, ofm, w, h);
|
||||
|
||||
e_dialog_button_add(dia, _("Import"), NULL, _fsel_cb_ok, id);
|
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _fsel_cb_close, id);
|
||||
e_dialog_border_icon_set(dia, "enlightenment/background");
|
||||
e_dialog_show(dia);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_widget_focus_set(ofm, 1);
|
||||
|
||||
return id;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
typedef struct _E_Import_Dialog E_Import_Dialog;
|
||||
#else
|
||||
#ifndef E_IMPORT_DIALOG_H
|
||||
#define E_IMPORT_DIALOG_H
|
||||
|
||||
#define E_IMPORT_DIALOG_TYPE 0xE0b0103f
|
||||
struct _E_Import_Dialog
|
||||
{
|
||||
E_Object e_obj_inherit;
|
||||
Evas_Object *fsel_obj;
|
||||
Ecore_End_Cb ok;
|
||||
Ecore_Cb cancel;
|
||||
|
||||
E_Dialog *dia;
|
||||
};
|
||||
|
||||
EAPI E_Import_Dialog *e_import_dialog_show(E_Container *con, const char *dev, const char *path, Ecore_End_Cb ok, Ecore_Cb cancel);
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -144,3 +144,5 @@
|
|||
#include "e_update.h"
|
||||
#include "e_xkb.h"
|
||||
#include "e_log.h"
|
||||
#include "e_import_dialog.h"
|
||||
#include "e_import_config_dialog.h"
|
||||
|
|
|
@ -42,8 +42,6 @@ module_la_SOURCES = e_mod_main.c \
|
|||
e_int_config_transitions.h \
|
||||
e_int_config_wallpaper.c \
|
||||
e_int_config_wallpaper.h \
|
||||
e_int_config_wallpaper_import.c \
|
||||
e_int_config_wallpaper_import.h \
|
||||
e_int_config_wallpaper_web.c \
|
||||
e_int_config_wallpaper_web.h \
|
||||
e_int_config_xsettings.c
|
||||
|
|
|
@ -41,13 +41,13 @@ struct _E_Config_Dialog_Data
|
|||
Evas_Object *o_personal;
|
||||
Evas_Object *o_system;
|
||||
int fmdir, use_theme_bg;
|
||||
char *bg;
|
||||
const char *bg;
|
||||
|
||||
/* advanced */
|
||||
int all_this_desk_screen;
|
||||
|
||||
/* dialogs */
|
||||
E_Win *win_import;
|
||||
E_Import_Dialog *win_import;
|
||||
#ifdef HAVE_EXCHANGE
|
||||
E_Dialog *dia_web;
|
||||
#endif
|
||||
|
@ -132,35 +132,6 @@ _bg_set(E_Config_Dialog_Data *cfdata)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
char path[PATH_MAX];
|
||||
|
||||
cfdata = dia->cfdata;
|
||||
cfdata->fmdir = 1;
|
||||
e_widget_radio_toggle_set(cfdata->o_personal, 1);
|
||||
e_user_dir_concat_static(path, "backgrounds");
|
||||
E_FREE(cfdata->bg);
|
||||
cfdata->bg = strdup(file);
|
||||
cfdata->use_theme_bg = 0;
|
||||
if (cfdata->o_theme_bg)
|
||||
e_widget_check_checked_set(cfdata->o_theme_bg, cfdata->use_theme_bg);
|
||||
if (cfdata->o_fm) e_widget_flist_path_set(cfdata->o_fm, path, "/");
|
||||
_bg_set(cfdata);
|
||||
if (cfdata->o_fm) e_widget_change(cfdata->o_fm);
|
||||
}
|
||||
|
||||
void
|
||||
e_int_config_wallpaper_import_done(E_Config_Dialog *dia)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
|
||||
cfdata = dia->cfdata;
|
||||
cfdata->win_import = NULL;
|
||||
}
|
||||
|
||||
#ifdef HAVE_EXCHANGE
|
||||
void
|
||||
e_int_config_wallpaper_web_done(E_Config_Dialog *dia)
|
||||
|
@ -215,9 +186,7 @@ _cb_files_selection_change(void *data, Evas_Object *obj __UNUSED__, void *event_
|
|||
eina_list_free(selected);
|
||||
if (ecore_file_is_dir(buf)) return;
|
||||
|
||||
E_FREE(cfdata->bg);
|
||||
|
||||
cfdata->bg = strdup(buf);
|
||||
eina_stringshare_replace(&cfdata->bg, buf);
|
||||
_bg_set(cfdata);
|
||||
if (cfdata->o_theme_bg)
|
||||
e_widget_check_checked_set(cfdata->o_theme_bg, 0);
|
||||
|
@ -301,8 +270,7 @@ _cb_theme_wallpaper(void *data, Evas_Object *obj __UNUSED__, void *event_info __
|
|||
{
|
||||
f = e_theme_edje_file_get("base/theme/backgrounds",
|
||||
"e/desktop/background");
|
||||
E_FREE(cfdata->bg);
|
||||
cfdata->bg = strdup(f);
|
||||
eina_stringshare_replace(&cfdata->bg, f);
|
||||
_bg_set(cfdata);
|
||||
}
|
||||
else
|
||||
|
@ -327,6 +295,31 @@ _cb_dir(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
|||
e_widget_flist_path_set(cfdata->o_fm, path, "/");
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_import_ok(const char *path, void *data)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
|
||||
cfdata = e_object_data_get(data);
|
||||
cfdata->fmdir = 1;
|
||||
e_widget_radio_toggle_set(cfdata->o_personal, cfdata->fmdir);
|
||||
e_widget_change(cfdata->o_personal);
|
||||
eina_stringshare_replace(&cfdata->bg, path);
|
||||
cfdata->use_theme_bg = 0;
|
||||
if (cfdata->o_theme_bg)
|
||||
e_widget_check_checked_set(cfdata->o_theme_bg, cfdata->use_theme_bg);
|
||||
_bg_set(cfdata);
|
||||
if (cfdata->o_fm) e_widget_change(cfdata->o_fm);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_import_del(void *data)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
cfdata = e_object_data_get(data);
|
||||
cfdata->win_import = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_import(void *data1, void *data2 __UNUSED__)
|
||||
{
|
||||
|
@ -334,9 +327,13 @@ _cb_import(void *data1, void *data2 __UNUSED__)
|
|||
|
||||
cfdata = data1;
|
||||
if (cfdata->win_import)
|
||||
e_win_raise(cfdata->win_import);
|
||||
else
|
||||
cfdata->win_import = e_int_config_wallpaper_fsel(cfdata->cfd);
|
||||
{
|
||||
e_win_raise(cfdata->win_import->dia->win);
|
||||
return;
|
||||
}
|
||||
cfdata->win_import = e_import_dialog_show(cfdata->cfd->dia->win->container, NULL, NULL, (Ecore_End_Cb)_cb_import_ok, NULL);
|
||||
e_object_data_set(E_OBJECT(cfdata->win_import), cfdata);
|
||||
e_object_del_attach_func_set(E_OBJECT(cfdata->win_import), _cb_import_del);
|
||||
}
|
||||
|
||||
#ifdef HAVE_EXCHANGE
|
||||
|
@ -368,7 +365,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
|
||||
/* specific config passed in. set for that only */
|
||||
bg = e_bg_file_get(cw->con_num, cw->zone_num, cw->desk_x, cw->desk_y);
|
||||
if (bg) cfdata->bg = strdup(bg);
|
||||
if (bg) cfdata->bg = eina_stringshare_add(bg);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -392,13 +389,12 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
else
|
||||
cfdata->all_this_desk_screen = E_CONFIG_WALLPAPER_SCREEN;
|
||||
}
|
||||
E_FREE(cfdata->bg);
|
||||
cfdata->bg = strdup(cfbg->file);
|
||||
eina_stringshare_replace(&cfdata->bg, cfbg->file);
|
||||
}
|
||||
}
|
||||
|
||||
if ((!cfdata->bg) && (e_config->desktop_default_background))
|
||||
cfdata->bg = strdup(e_config->desktop_default_background);
|
||||
cfdata->bg = eina_stringshare_add(e_config->desktop_default_background);
|
||||
|
||||
if (cfdata->bg)
|
||||
{
|
||||
|
@ -430,13 +426,12 @@ _create_data(E_Config_Dialog *cfd)
|
|||
static void
|
||||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
if (cfdata->win_import)
|
||||
e_int_config_wallpaper_fsel_del(cfdata->win_import);
|
||||
if (cfdata->win_import) e_object_del(E_OBJECT(cfdata->win_import));
|
||||
#ifdef HAVE_EXCHANGE
|
||||
if (cfdata->dia_web)
|
||||
e_int_config_wallpaper_web_del(cfdata->dia_web);
|
||||
#endif
|
||||
E_FREE(cfdata->bg);
|
||||
eina_stringshare_del(cfdata->bg);
|
||||
E_FREE(cfd->data);
|
||||
E_FREE(cfdata);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,13 +0,0 @@
|
|||
#ifdef E_TYPEDEFS
|
||||
#else
|
||||
#ifndef E_INT_CONFIG_WALLPAPER_IMPORT_H
|
||||
#define E_INT_CONFIG_WALLPAPER_IMPORT_H
|
||||
|
||||
E_Win *e_int_config_wallpaper_fsel(E_Config_Dialog *parent);
|
||||
E_Win *e_int_config_wallpaper_import(void *data, const char *path);
|
||||
void e_int_config_wallpaper_del(E_Win *win);
|
||||
void e_int_config_wallpaper_fsel_del(E_Win *win);
|
||||
void e_int_config_wallpaper_import_del(E_Win *win);
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -12,7 +12,6 @@
|
|||
#include "e_int_config_theme_web.h"
|
||||
#include "e_int_config_transitions.h"
|
||||
#include "e_int_config_wallpaper.h"
|
||||
#include "e_int_config_wallpaper_import.h"
|
||||
#include "e_int_config_wallpaper_web.h"
|
||||
|
||||
#undef E_TYPEDEFS
|
||||
|
@ -26,7 +25,6 @@
|
|||
#include "e_int_config_theme_web.h"
|
||||
#include "e_int_config_transitions.h"
|
||||
#include "e_int_config_wallpaper.h"
|
||||
#include "e_int_config_wallpaper_import.h"
|
||||
#include "e_int_config_wallpaper_web.h"
|
||||
|
||||
EAPI extern E_Module_Api e_modapi;
|
||||
|
|
Loading…
Reference in New Issue