forked from enlightenment/enlightenment
parent
a78ae94975
commit
87842cb5e7
|
@ -149,6 +149,28 @@ collections { /* begin the collection of edje groups that are in this file */
|
|||
}
|
||||
}
|
||||
|
||||
group { name: "e/desktop/background/scrollframe";
|
||||
parts {
|
||||
part { name: "clipper";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
}
|
||||
}
|
||||
part { name: "e.swallow.content";
|
||||
clip_to: "clipper";
|
||||
type: SWALLOW;
|
||||
description { state: "default" 0.0;
|
||||
rel1.offset: 0 0;
|
||||
rel2 {
|
||||
relative: 0.0 0.0;
|
||||
offset: -1 -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/*** DEFAULT WINDOW BORDER ***/
|
||||
group { name: "e/widgets/border/default/border";
|
||||
|
|
250
src/bin/e_fm.c
250
src/bin/e_fm.c
|
@ -78,6 +78,7 @@ struct _E_Fm2_Smart_Data
|
|||
Ecore_Job *refresh_job;
|
||||
E_Menu *menu;
|
||||
E_Entry_Dialog *entry_dialog;
|
||||
E_Dialog *image_dialog;
|
||||
unsigned char iconlist_changed : 1;
|
||||
unsigned char order_file : 1;
|
||||
unsigned char typebuf_visible : 1;
|
||||
|
@ -307,12 +308,17 @@ static void _e_fm2_menu_post_cb(void *data, E_Menu *m);
|
|||
static void _e_fm2_icon_menu(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp);
|
||||
static void _e_fm2_icon_menu_post_cb(void *data, E_Menu *m);
|
||||
static void _e_fm2_icon_menu_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_icon_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_toggle_inherit_dir_props(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_grid_icons_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_custom_icons_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_list_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_use_default_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_set_background_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_menu_set_overlay_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_view_image_sel(E_Fm2_Smart_Data *sd, const char *title, void (*ok_cb) (void *data, E_Dialog *dia), void (*clear_cb) (void *data, E_Dialog *dia));
|
||||
static void _e_fm2_view_image_sel_close(void *data, E_Dialog *dia);
|
||||
static void _e_fm2_refresh(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_toggle_hidden_files(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _e_fm2_toggle_ordering(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
@ -7368,6 +7374,11 @@ _e_fm2_smart_del(Evas_Object *obj)
|
|||
e_object_del(E_OBJECT(sd->entry_dialog));
|
||||
sd->entry_dialog = NULL;
|
||||
}
|
||||
if (sd->image_dialog)
|
||||
{
|
||||
e_object_del(E_OBJECT(sd->image_dialog));
|
||||
sd->image_dialog = NULL;
|
||||
}
|
||||
if (sd->scroll_job) ecore_job_del(sd->scroll_job);
|
||||
if (sd->resize_job) ecore_job_del(sd->resize_job);
|
||||
if (sd->refresh_job) ecore_job_del(sd->refresh_job);
|
||||
|
@ -7724,7 +7735,7 @@ _e_fm2_icon_menu(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp)
|
|||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("View Mode"));
|
||||
e_util_menu_item_theme_icon_set(mi, "preferences-appearance");
|
||||
e_menu_item_submenu_pre_callback_set(mi, _e_fm2_view_menu_pre, sd);
|
||||
e_menu_item_submenu_pre_callback_set(mi, _e_fm2_icon_view_menu_pre, sd);
|
||||
}
|
||||
if (!(sd->icon_menu.flags & E_FM2_MENU_NO_REFRESH))
|
||||
{
|
||||
|
@ -8146,20 +8157,11 @@ _e_fm2_toggle_inherit_dir_props(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
_e_fm2_view_menu_common(E_Menu *subm, E_Fm2_Smart_Data *sd)
|
||||
{
|
||||
E_Menu *subm;
|
||||
E_Fm2_Smart_Data *sd;
|
||||
E_Fm2_Config *cfg;
|
||||
E_Menu_Item *mi;
|
||||
char view_mode;
|
||||
|
||||
sd = data;
|
||||
cfg = e_fm2_config_get(sd->obj);
|
||||
|
||||
subm = e_menu_new();
|
||||
e_object_data_set(E_OBJECT(subm), sd);
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
|
||||
view_mode = _e_fm2_view_mode_get(sd);
|
||||
|
||||
mi = e_menu_item_new(subm);
|
||||
|
@ -8211,6 +8213,55 @@ _e_fm2_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
e_menu_item_submenu_pre_callback_set(mi, _e_fm2_view_menu_icon_size_pre, sd);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_icon_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Menu *subm;
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
|
||||
subm = e_menu_new();
|
||||
e_object_data_set(E_OBJECT(subm), sd);
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
|
||||
_e_fm2_view_menu_common(subm, sd);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Menu *subm;
|
||||
E_Fm2_Smart_Data *sd;
|
||||
char buf[PATH_MAX];
|
||||
int access_ok;
|
||||
sd = data;
|
||||
|
||||
subm = e_menu_new();
|
||||
e_object_data_set(E_OBJECT(subm), sd);
|
||||
e_menu_item_submenu_set(mi, subm);
|
||||
|
||||
_e_fm2_view_menu_common(subm, sd);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.directory.desktop", sd->realpath);
|
||||
access_ok = ecore_file_exists(buf) ? ecore_file_can_write(buf)
|
||||
: ecore_file_can_write(sd->realpath);
|
||||
if (access_ok)
|
||||
{
|
||||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi, _("Set background..."));
|
||||
e_util_menu_item_theme_icon_set(mi, "preferences-desktop-wallpaper");
|
||||
e_menu_item_callback_set(mi, _e_fm2_view_menu_set_background_cb, sd);
|
||||
|
||||
mi = e_menu_item_new(subm);
|
||||
e_menu_item_label_set(mi, _("Set overlay..."));
|
||||
e_menu_item_callback_set(mi, _e_fm2_view_menu_set_overlay_cb, sd);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_menu_grid_icons_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
|
@ -8278,6 +8329,181 @@ _e_fm2_view_menu_use_default_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
_e_fm2_refresh(sd, m, mi);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_image_sel(E_Fm2_Smart_Data *sd, const char *title,
|
||||
void (*ok_cb) (void *data, E_Dialog *dia),
|
||||
void (*clear_cb) (void *data, E_Dialog *dia))
|
||||
{
|
||||
E_Manager *man;
|
||||
E_Container *con;
|
||||
E_Dialog *dia;
|
||||
Evas_Object *o;
|
||||
Evas_Coord w, h;
|
||||
|
||||
man = e_manager_current_get();
|
||||
if (!man) return;
|
||||
con = e_container_current_get(man);
|
||||
if (!con) return;
|
||||
|
||||
dia = e_dialog_new(con, "E", "_fm2_view_image_select_dialog");
|
||||
if (!dia) return;
|
||||
e_dialog_title_set(dia, title);
|
||||
|
||||
o = e_widget_fsel_add(dia->win->evas, "/", sd->realpath, NULL, NULL, NULL, sd, NULL, sd, 1);
|
||||
evas_object_show(o);
|
||||
e_widget_min_size_get(o, &w, &h);
|
||||
e_dialog_content_set(dia, o, w, h);
|
||||
dia->data = o;
|
||||
|
||||
e_dialog_button_add(dia, _("OK"), NULL, ok_cb, sd);
|
||||
e_dialog_button_add(dia, _("Clear"), NULL, clear_cb, sd);
|
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _e_fm2_view_image_sel_close, sd);
|
||||
e_dialog_resizable_set(dia, 1);
|
||||
e_win_centered_set(dia->win, 1);
|
||||
e_dialog_show(dia);
|
||||
|
||||
sd->image_dialog = dia;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_image_sel_close(void *data, E_Dialog *dia)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
e_object_del(E_OBJECT(dia));
|
||||
sd->image_dialog = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_custom_file_key_set(E_Fm2_Smart_Data *sd, const char *key, const char *value)
|
||||
{
|
||||
Efreet_Desktop *ef;
|
||||
char buf[PATH_MAX];
|
||||
int len;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.directory.desktop", sd->realpath);
|
||||
ef = efreet_desktop_new(buf);
|
||||
if (!ef)
|
||||
{
|
||||
ef = efreet_desktop_empty_new(buf);
|
||||
if (!ef) return;
|
||||
ef->type = EFREET_DESKTOP_TYPE_DIRECTORY;
|
||||
ef->name = strdup("Directory look and feel");
|
||||
}
|
||||
|
||||
len = strlen(sd->realpath);
|
||||
if (!strncmp(value, sd->realpath, len))
|
||||
efreet_desktop_x_field_set(ef, key, value + len + 1);
|
||||
else
|
||||
efreet_desktop_x_field_set(ef, key, value);
|
||||
|
||||
efreet_desktop_save(ef);
|
||||
efreet_desktop_free(ef);
|
||||
}
|
||||
|
||||
static void
|
||||
_custom_file_key_del(E_Fm2_Smart_Data *sd, const char *key)
|
||||
{
|
||||
Efreet_Desktop *ef;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/.directory.desktop", sd->realpath);
|
||||
ef = efreet_desktop_new(buf);
|
||||
if (!ef) return;
|
||||
|
||||
if (efreet_desktop_x_field_del(ef, key))
|
||||
efreet_desktop_save(ef);
|
||||
|
||||
efreet_desktop_free(ef);
|
||||
}
|
||||
|
||||
static void
|
||||
_set_background_cb(void *data, E_Dialog *dia)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
const char *file;
|
||||
|
||||
sd = data;
|
||||
if (!sd) return;
|
||||
|
||||
file = e_widget_fsel_selection_path_get(dia->data);
|
||||
|
||||
if (file)
|
||||
_custom_file_key_set(sd, "X-Enlightenment-Directory-Wallpaper", file);
|
||||
|
||||
_e_fm2_view_image_sel_close(data, dia);
|
||||
evas_object_smart_callback_call(sd->obj, "dir_changed", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_clear_background_cb(void *data, E_Dialog *dia)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
if (!sd) return;
|
||||
|
||||
_e_fm2_view_image_sel_close(data, dia);
|
||||
|
||||
_custom_file_key_del(sd, "X-Enlightenment-Directory-Wallpaper");
|
||||
evas_object_smart_callback_call(sd->obj, "dir_changed", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_menu_set_background_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
if (sd->image_dialog) return;
|
||||
|
||||
_e_fm2_view_image_sel(sd, _("Set background..."), _set_background_cb, _clear_background_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
_set_overlay_cb(void *data, E_Dialog *dia)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
const char *file;
|
||||
|
||||
sd = data;
|
||||
if (!sd) return;
|
||||
|
||||
file = e_widget_fsel_selection_path_get(dia->data);
|
||||
|
||||
if (file)
|
||||
_custom_file_key_set(sd, "X-Enlightenment-Directory-Overlay", file);
|
||||
|
||||
_e_fm2_view_image_sel_close(data, dia);
|
||||
evas_object_smart_callback_call(sd->obj, "dir_changed", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_clear_overlay_cb(void *data, E_Dialog *dia)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
if (!sd) return;
|
||||
|
||||
_e_fm2_view_image_sel_close(data, dia);
|
||||
|
||||
_custom_file_key_del(sd, "X-Enlightenment-Directory-Overlay");
|
||||
evas_object_smart_callback_call(sd->obj, "dir_changed", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_view_menu_set_overlay_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
|
||||
sd = data;
|
||||
if (sd->image_dialog) return;
|
||||
|
||||
_e_fm2_view_image_sel(sd, _("Set overlay..."), _set_overlay_cb, _clear_overlay_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_refresh(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
|
|
|
@ -27,6 +27,8 @@ static void _e_icon_smart_hide(Evas_Object *obj);
|
|||
static void _e_icon_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
|
||||
static void _e_icon_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
|
||||
static void _e_icon_smart_clip_unset(Evas_Object *obj);
|
||||
static void _e_icon_obj_prepare(Evas_Object *obj, E_Smart_Data *sd);
|
||||
static void _e_icon_preloaded(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
|
||||
/* local subsystem globals */
|
||||
static Evas_Smart *_e_smart = NULL;
|
||||
|
@ -39,6 +41,21 @@ e_icon_add(Evas *evas)
|
|||
return evas_object_smart_add(evas, _e_smart);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_icon_obj_prepare(Evas_Object *obj, E_Smart_Data *sd)
|
||||
{
|
||||
if (!sd->obj) return;
|
||||
|
||||
if (!strcmp(evas_object_type_get(sd->obj), "edje"))
|
||||
{
|
||||
evas_object_del(sd->obj);
|
||||
sd->obj = evas_object_image_add(evas_object_evas_get(obj));
|
||||
evas_object_event_callback_add(sd->obj, EVAS_CALLBACK_IMAGE_PRELOADED,
|
||||
_e_icon_preloaded, obj);
|
||||
evas_object_smart_member_add(sd->obj, obj);
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_icon_file_set(Evas_Object *obj, const char *file)
|
||||
{
|
||||
|
@ -47,6 +64,7 @@ e_icon_file_set(Evas_Object *obj, const char *file)
|
|||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
/* smart code here */
|
||||
_e_icon_obj_prepare(obj, sd);
|
||||
/* FIXME: 64x64 - unhappy about this. use icon size */
|
||||
if (sd->size != 0)
|
||||
evas_object_image_load_size_set(sd->obj, sd->size, sd->size);
|
||||
|
@ -63,6 +81,7 @@ e_icon_file_key_set(Evas_Object *obj, const char *file, const char *key)
|
|||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
/* smart code here */
|
||||
_e_icon_obj_prepare(obj, sd);
|
||||
if (sd->size != 0)
|
||||
evas_object_image_load_size_set(sd->obj, sd->size, sd->size);
|
||||
evas_object_image_file_set(sd->obj, file, key);
|
||||
|
|
|
@ -432,12 +432,16 @@ _e_fwin_new(E_Container *con, const char *dev, const char *path)
|
|||
fwin->pages = eina_list_append(fwin->pages, page);
|
||||
fwin->cur_page = page;
|
||||
|
||||
o = edje_object_add(e_win_evas_get(fwin->win));
|
||||
o = e_icon_add(e_win_evas_get(fwin->win));
|
||||
e_icon_scale_size_set(o, 0);
|
||||
e_icon_fill_inside_set(o, 0);
|
||||
edje_object_part_swallow(fwin->bg_obj, "e.swallow.bg", o);
|
||||
evas_object_pass_events_set(o, 1);
|
||||
fwin->under_obj = o;
|
||||
|
||||
o = edje_object_add(e_win_evas_get(fwin->win));
|
||||
o = e_icon_add(e_win_evas_get(fwin->win));
|
||||
e_icon_scale_size_set(o, 0);
|
||||
e_icon_fill_inside_set(o, 0);
|
||||
edje_object_part_swallow(e_scrollframe_edje_object_get(page->scrollframe_obj), "e.swallow.overlay", o);
|
||||
evas_object_pass_events_set(o, 1);
|
||||
fwin->over_obj = o;
|
||||
|
@ -1157,7 +1161,7 @@ _e_fwin_changed(void *data, Evas_Object *obj, void *event_info)
|
|||
E_Fwin *fwin;
|
||||
E_Fwin_Page *page;
|
||||
Efreet_Desktop *ef;
|
||||
char buf[PATH_MAX];
|
||||
char buf[PATH_MAX], *ext;
|
||||
|
||||
page = data;
|
||||
fwin = page->fwin;
|
||||
|
@ -1178,20 +1182,43 @@ _e_fwin_changed(void *data, Evas_Object *obj, void *event_info)
|
|||
// frees - doesnt just unref.
|
||||
efreet_desktop_free(ef);
|
||||
}
|
||||
else
|
||||
{
|
||||
#define RELEASE_STR(x) if (x) { eina_stringshare_del(x); (x) = NULL; }
|
||||
RELEASE_STR(fwin->wallpaper_file);
|
||||
RELEASE_STR(fwin->overlay_file);
|
||||
RELEASE_STR(fwin->scrollframe_file);
|
||||
RELEASE_STR(fwin->theme_file);
|
||||
#undef RELEASE_STR
|
||||
}
|
||||
if (fwin->under_obj)
|
||||
{
|
||||
evas_object_hide(fwin->under_obj);
|
||||
edje_object_file_set(fwin->under_obj, NULL, NULL);
|
||||
if (fwin->wallpaper_file)
|
||||
edje_object_file_set(fwin->under_obj, fwin->wallpaper_file, "e/desktop/background");
|
||||
{
|
||||
ext = strrchr(fwin->wallpaper_file, '.');
|
||||
if (ext && !strcasecmp(ext, ".edj"))
|
||||
e_icon_file_edje_set(fwin->under_obj, fwin->wallpaper_file, "e/desktop/background");
|
||||
else
|
||||
e_icon_file_set(fwin->under_obj, fwin->wallpaper_file);
|
||||
}
|
||||
else
|
||||
e_icon_file_edje_set(fwin->under_obj, NULL, NULL);
|
||||
evas_object_show(fwin->under_obj);
|
||||
}
|
||||
if (fwin->over_obj)
|
||||
{
|
||||
evas_object_hide(fwin->over_obj);
|
||||
edje_object_file_set(fwin->over_obj, NULL, NULL);
|
||||
if (fwin->overlay_file)
|
||||
edje_object_file_set(fwin->over_obj, fwin->overlay_file, "e/desktop/background");
|
||||
{
|
||||
ext = strrchr(fwin->overlay_file, '.');
|
||||
if (ext && !strcasecmp(ext, ".edj"))
|
||||
e_icon_file_edje_set(fwin->over_obj, fwin->overlay_file, "e/desktop/background");
|
||||
else
|
||||
e_icon_file_set(fwin->over_obj, fwin->overlay_file);
|
||||
}
|
||||
else
|
||||
e_icon_file_edje_set(fwin->over_obj, NULL, NULL);
|
||||
evas_object_show(fwin->over_obj);
|
||||
}
|
||||
if (page->scrollframe_obj)
|
||||
|
|
Loading…
Reference in New Issue