several patches from sergey etc.

SVN revision: 40668
This commit is contained in:
Carsten Haitzler 2009-05-15 11:47:28 +00:00
parent a78ae94975
commit 87842cb5e7
4 changed files with 313 additions and 19 deletions

View File

@ -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";

View File

@ -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);
@ -8210,6 +8212,55 @@ _e_fm2_view_menu_pre(void *data, E_Menu *m, E_Menu_Item *mi)
e_menu_item_label_set(mi, buf);
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)
{

View File

@ -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);

View File

@ -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)