working on fm prop dialog. i don't like how i am getting the icon info for a

file. i think i ned to abstract that much mroe cleanly.
also desklock SHOULD have else-if's


SVN revision: 27841
This commit is contained in:
Carsten Haitzler 2007-01-07 09:01:47 +00:00
parent a51828da27
commit c34bae6064
4 changed files with 269 additions and 199 deletions

View File

@ -694,9 +694,9 @@ _desklock_pam_init(E_Desklock_Auth *da)
/* try other pam profiles - and system-auth (login for fbsd users) is a fallback */
pam_prof = "login";
if (ecore_file_exists("/etc/pam.d/enlightenment")) pam_prof = "enlightenment";
if (ecore_file_exists("/etc/pam.d/xscreensaver")) pam_prof = "xscreensaver";
if (ecore_file_exists("/etc/pam.d/kscreensaver")) pam_prof = "kscreensaver";
if (ecore_file_exists("/etc/pam.d/system-auth")) pam_prof = "system-auth";
else if (ecore_file_exists("/etc/pam.d/xscreensaver")) pam_prof = "xscreensaver";
else if (ecore_file_exists("/etc/pam.d/kscreensaver")) pam_prof = "kscreensaver";
else if (ecore_file_exists("/etc/pam.d/system-auth")) pam_prof = "system-auth";
if ((pamerr = pam_start(pam_prof, da->user, &(da->pam.conv),
&(da->pam.handle))) != PAM_SUCCESS)

View File

@ -30,7 +30,6 @@ typedef enum _E_Fm2_Fop_Type
typedef struct _E_Fm2_Smart_Data E_Fm2_Smart_Data;
typedef struct _E_Fm2_Region E_Fm2_Region;
typedef struct _E_Fm2_Icon E_Fm2_Icon;
typedef struct _E_Fm2_Action E_Fm2_Action;
typedef struct _E_Fm2_Fop E_Fm2_Fop;
typedef struct _E_Fm2_Fop_Item E_Fm2_Fop_Item;
@ -911,6 +910,225 @@ e_fm2_fop_add_add(Evas_Object *obj, const char *file, const char *rel, int after
fi->fop->items = evas_list_append(fi->fop->items, fi);
}
EAPI Evas_Object *
e_fm2_icon_get(Evas *evas, const char *realpath,
E_Fm2_Icon *ic, E_Fm2_Icon_Info *ici,
const char *keyhint,
void (*gen_func) (void *data, Evas_Object *obj, void *event_info),
void *data, int force_gen, const char **type_ret)
{
Evas_Object *oic;
char buf[4096], *p;
if (ici->icon)
{
/* custom icon */
if (ici->icon[0] == '/')
{
/* path to icon file */
p = strrchr(ici->icon, '.');
if ((p) && (!strcmp(p, ".edj")))
{
oic = edje_object_add(evas);
if (!edje_object_file_set(oic, ici->icon, "icon"))
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
{
oic = e_icon_add(evas);
e_icon_file_set(oic, ici->icon);
e_icon_fill_inside_set(oic, 1);
}
if (type_ret) *type_ret = "CUSTOM";
}
else
{
/* theme icon */
oic = edje_object_add(evas);
e_util_edje_icon_set(oic, ici->icon);
if (type_ret) *type_ret = "THEME_ICON";
}
return oic;
}
if (S_ISDIR(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/folder");
}
else
{
if (ici->mime)
{
const char *icon;
icon = e_fm_mime_icon_get(ici->mime);
/* use mime type to select icon */
if (!icon)
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (!strcmp(icon, "THUMB"))
{
if (ici->pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ici->pseudo_dir, ici->file);
else
snprintf(buf, sizeof(buf), "%s/%s", realpath, ici->file);
oic = e_thumb_icon_add(evas);
e_thumb_icon_file_set(oic, buf, NULL);
e_thumb_icon_size_set(oic, 128, 128);
if (gen_func) evas_object_smart_callback_add(oic,
"e_thumb_gen",
gen_func, data);
if (!ic)
e_thumb_icon_begin(oic);
else
_e_fm2_icon_thumb(ic, oic, force_gen);
if (type_ret) *type_ret = "THUMB";
}
else if (!strcmp(icon, "DESKTOP"))
{
E_App *app;
if (ici->pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ici->pseudo_dir, ici->file);
else
snprintf(buf, sizeof(buf), "%s/%s", realpath, ici->file);
app = e_app_new(buf, 0);
if (app)
{
oic = e_app_icon_add(app, evas);
e_object_unref(E_OBJECT(app));
}
if (type_ret) *type_ret = "DESKTOP";
}
else if (!strncmp(icon, "e/icons/fileman/mime/", 21))
{
oic = edje_object_add(evas);
if (!e_theme_edje_object_set(oic,
"base/theme/fileman",
icon))
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "THEME";
}
else
{
p = strrchr(icon, '.');
if ((p) && (!strcmp(p, ".edj")))
{
oic = edje_object_add(evas);
if (!edje_object_file_set(oic, icon, "icon"))
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
{
oic = e_icon_add(evas);
e_icon_file_set(oic, icon);
e_icon_fill_inside_set(oic, 1);
}
if (type_ret) *type_ret = "CUSTOM";
}
}
else
{
if (ici->pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ici->pseudo_dir, ici->file);
else
snprintf(buf, sizeof(buf), "%s/%s", realpath, ici->file);
/* fallback */
if (
(e_util_glob_case_match(ici->file, "*.edj"))
)
{
oic = e_thumb_icon_add(evas);
if (keyhint)
e_thumb_icon_file_set(oic, buf, keyhint);
else
{
/* FIXME: There is probably a quicker way of doing this. */
if (edje_file_group_exists(buf, "icon"))
e_thumb_icon_file_set(oic, buf, "icon");
else if (edje_file_group_exists(buf, "e/desktop/background"))
e_thumb_icon_file_set(oic, buf, "e/desktop/background");
else if (edje_file_group_exists(buf, "e/init/splash"))
e_thumb_icon_file_set(oic, buf, "e/init/splash");
}
e_thumb_icon_size_set(oic, 128, 96);
if (gen_func) evas_object_smart_callback_add(oic,
"e_thumb_gen",
gen_func, data);
if (!ic)
e_thumb_icon_begin(oic);
else
_e_fm2_icon_thumb(ic, oic, force_gen);
if (type_ret) *type_ret = "THUMB";
}
else if ((e_util_glob_case_match(ici->file, "*.desktop")) ||
(e_util_glob_case_match(ici->file, "*.directory")))
{
E_App *app;
app = e_app_new(buf, 0);
if (app)
{
oic = e_app_icon_add(app, evas);
e_object_unref(E_OBJECT(app));
}
if (type_ret) *type_ret = "DESKTOP";
}
else if (S_ISCHR(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
else if (S_ISBLK(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
else if (S_ISFIFO(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
else if (S_ISSOCK(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
else if (ecore_file_can_exec(buf))
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
else
{
oic = edje_object_add(evas);
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
}
}
return oic;
}
/* local subsystem functions */
static const char *
_e_fm2_dev_path_map(const char *dev, const char *path)
@ -1465,7 +1683,6 @@ _e_fm2_icons_place_custom_icons(E_Fm2_Smart_Data *sd)
}
}
#if 0
static void
_e_fm2_icons_place_custom_grid_icons(E_Fm2_Smart_Data *sd)
{
@ -1485,7 +1702,6 @@ _e_fm2_icons_place_custom_grid_icons(E_Fm2_Smart_Data *sd)
if ((ic->y + ic->h) > sd->max.h) sd->max.h = ic->y + ic->h;
}
}
#endif
static void
_e_fm2_icons_place_custom_smart_grid_icons(E_Fm2_Smart_Data *sd)
@ -1560,7 +1776,7 @@ _e_fm2_icons_place(Evas_Object *obj)
_e_fm2_icons_place_custom_icons(sd);
break;
case E_FM2_VIEW_MODE_CUSTOM_GRID_ICONS:
_e_fm2_icons_place_custom_smart_grid_icons(sd);
_e_fm2_icons_place_custom_grid_icons(sd);
break;
case E_FM2_VIEW_MODE_CUSTOM_SMART_GRID_ICONS:
_e_fm2_icons_place_custom_smart_grid_icons(sd);
@ -1993,183 +2209,13 @@ _e_fm2_icon_icon_direct_set(E_Fm2_Icon *ic, Evas_Object *o, void (*gen_func) (vo
Evas_Object *oic;
char buf[4096], *p;
if (ic->info.icon)
oic = e_fm2_icon_get(evas_object_evas_get(o), ic->sd->realpath,
ic, &(ic->info), ic->sd->config->icon.key_hint,
gen_func, data, force_gen, NULL);
if (oic)
{
/* custom icon */
if (ic->info.icon[0] == '/')
{
/* path to icon file */
oic = e_icon_add(evas_object_evas_get(o));
e_icon_file_set(oic, ic->info.icon);
e_icon_fill_inside_set(oic, 1);
}
else
{
/* theme icon */
oic = edje_object_add(evas_object_evas_get(o));
e_util_edje_icon_set(oic, ic->info.icon);
}
edje_object_part_swallow(o, "e.swallow.icon", oic);
evas_object_show(oic);
return oic;
}
if (S_ISDIR(ic->info.statinfo.st_mode))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/folder");
edje_object_part_swallow(o, "e.swallow.icon", oic);
evas_object_show(oic);
}
else
{
if (ic->info.mime)
{
const char *icon;
icon = e_fm_mime_icon_get(ic->info.mime);
/* use mime type to select icon */
if (!icon)
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (!strcmp(icon, "THUMB"))
{
if (ic->info.pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ic->info.pseudo_dir, ic->info.file);
else
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->info.file);
oic = e_thumb_icon_add(evas_object_evas_get(o));
e_thumb_icon_file_set(oic, buf, NULL);
e_thumb_icon_size_set(oic, 128, 128);
evas_object_smart_callback_add(oic, "e_thumb_gen",
gen_func, data);
_e_fm2_icon_thumb(ic, oic, force_gen);
}
else if (!strcmp(icon, "DESKTOP"))
{
E_App *app;
if (ic->info.pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ic->info.pseudo_dir, ic->info.file);
else
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->info.file);
app = e_app_new(buf, 0);
if (app)
{
oic = e_app_icon_add(app, evas_object_evas_get(o));
e_object_unref(E_OBJECT(app));
}
}
else if (!strncmp(icon, "e/icons/fileman/mime/", 21))
{
oic = edje_object_add(evas_object_evas_get(o));
if (!e_theme_edje_object_set(oic,
"base/theme/fileman",
icon))
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
{
p = strrchr(icon, '.');
if ((p) && (!strcmp(p, ".edj")))
{
oic = edje_object_add(evas_object_evas_get(o));
if (!edje_object_file_set(oic, icon, "icon"))
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
{
oic = e_icon_add(evas_object_evas_get(o));
e_icon_file_set(oic, icon);
}
}
}
else
{
if (ic->info.pseudo_link)
snprintf(buf, sizeof(buf), "%s/%s", ic->info.pseudo_dir, ic->info.file);
else
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->info.file);
/* fallback */
if (
(e_util_glob_case_match(ic->info.file, "*.edj"))
)
{
oic = e_thumb_icon_add(evas_object_evas_get(o));
if (ic->sd->config->icon.key_hint)
e_thumb_icon_file_set(oic, buf, ic->sd->config->icon.key_hint);
else
{
/* FIXME: There is probably a quicker way of doing this. */
if (edje_file_group_exists(buf, "icon"))
e_thumb_icon_file_set(oic, buf, "icon");
else if (edje_file_group_exists(buf, "e/desktop/background"))
e_thumb_icon_file_set(oic, buf, "e/desktop/background");
else if (edje_file_group_exists(buf, "e/init/splash"))
e_thumb_icon_file_set(oic, buf, "e/init/splash");
}
e_thumb_icon_size_set(oic, 128, 96);
evas_object_smart_callback_add(oic, "e_thumb_gen",
gen_func, data);
_e_fm2_icon_thumb(ic, oic, force_gen);
}
else if ((e_util_glob_case_match(ic->info.file, "*.desktop")) ||
(e_util_glob_case_match(ic->info.file, "*.directory")))
{
E_App *app;
app = e_app_new(buf, 0);
if (app)
{
oic = e_app_icon_add(app, evas_object_evas_get(o));
e_object_unref(E_OBJECT(app));
}
}
else if (S_ISCHR(ic->info.statinfo.st_mode))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (S_ISBLK(ic->info.statinfo.st_mode))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (S_ISFIFO(ic->info.statinfo.st_mode))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (S_ISSOCK(ic->info.statinfo.st_mode))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else if (ecore_file_can_exec(buf))
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
{
oic = edje_object_add(evas_object_evas_get(o));
e_theme_edje_object_set(oic, "base/theme/fileman",
"e/icons/fileman/file");
}
}
edje_object_part_swallow(o, "e.swallow.icon", oic);
evas_object_show(oic);
}
return oic;
}

View File

@ -26,6 +26,7 @@ typedef enum _E_Fm2_Menu_Flags
} E_Fm2_Menu_Flags;
typedef struct _E_Fm2_Config E_Fm2_Config;
typedef struct _E_Fm2_Icon E_Fm2_Icon;
typedef struct _E_Fm2_Icon_Info E_Fm2_Icon_Info;
#else
@ -141,6 +142,13 @@ EAPI void e_fm2_fop_delete_add(Evas_Object *obj, E_Fm2_Icon_Inf
EAPI void e_fm2_fop_move_add(Evas_Object *obj, const char *src, const char *dst, const char *rel, int after, int file_add);
EAPI void e_fm2_fop_link_add(Evas_Object *obj, const char *src, const char *dst);
EAPI void e_fm2_fop_add_add(Evas_Object *obj, const char *file, const char *rel, int after);
EAPI Evas_Object *
e_fm2_icon_get(Evas *evas, const char *realpath,
E_Fm2_Icon *ic, E_Fm2_Icon_Info *ici,
const char *keyhint,
void (*gen_func) (void *data, Evas_Object *obj, void *event_info),
void *data, int force_gen, const char **type_ret);
#endif
#endif

View File

@ -163,9 +163,12 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
Evas_Object *o, *ot, *ob, *of, *oi;
E_Radio_Group *rg;
char buf[4096];
E_Fm2_Config *cfg;
const char *itype = NULL;
snprintf(buf, sizeof(buf), "%s/%s",
e_fm2_real_path_get(cfdata->fi->fm), cfdata->fi->file);
cfg = e_fm2_config_get(cfdata->fi->fm);
o = e_widget_table_add(evas, 0);
ot = e_widget_table_add(evas, 0);
@ -236,33 +239,46 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
ob = e_widget_button_add(evas, "", NULL, _cb_icon_sel, cfdata, cfd);
cfdata->gui.icon_wid = ob;
if (0) /* FIXME: find icon */
oi = e_fm2_icon_get(evas, e_fm2_real_path_get(cfdata->fi->fm),
NULL, cfdata->fi,
cfg->icon.key_hint,
NULL, NULL, 0, &itype);
e_widget_button_icon_set(ob, oi);
e_widget_frametable_object_append(ot, ob, 0, 0, 1, 3, 0, 1, 0, 1);
if (itype)
{
oi = NULL;
e_widget_button_icon_set(ob, oi);
if ((!strcmp(itype, "THEME_ICON")) ||
(!strcmp(itype, "DESKTOP")) ||
(!strcmp(itype, "FILE_TYPE")))
{
e_widget_disabled_set(ob, 1);
cfdata->icon_type = 0;
}
else if (!strcmp(itype, "THUMB"))
{
cfdata->icon_type = 1;
e_widget_disabled_set(ob, 1);
}
else if (!strcmp(itype, "CUSTOM"))
cfdata->icon_type = 2;
}
e_widget_disabled_set(ob, 1);
e_widget_frametable_object_append(ot, ob, 0, 0, 1, 3, 1, 1, 1, 1);
else
cfdata->icon_type = 0;
rg = e_widget_radio_group_new(&cfdata->icon_type);
ob = e_widget_radio_add(evas, _("Thumbnail"), 0, rg);
ob = e_widget_radio_add(evas, _("Default"), 0, rg);
evas_object_smart_callback_add(ob, "changed", _cb_type, cfdata);
e_widget_frametable_object_append(ot, ob, 1, 0, 1, 1, 1, 1, 1, 1);
ob = e_widget_radio_add(evas, _("Theme Icon"), 1, rg);
ob = e_widget_radio_add(evas, _("Thumbnail"), 1, rg);
evas_object_smart_callback_add(ob, "changed", _cb_type, cfdata);
e_widget_frametable_object_append(ot, ob, 1, 1, 1, 1, 1, 1, 1, 1);
ob = e_widget_radio_add(evas, _("Edje File"), 2, rg);
ob = e_widget_radio_add(evas, _("Custom"), 2, rg);
evas_object_smart_callback_add(ob, "changed", _cb_type, cfdata);
e_widget_frametable_object_append(ot, ob, 1, 2, 1, 1, 1, 1, 1, 1);
ob = e_widget_radio_add(evas, _("Image"), 3, rg);
evas_object_smart_callback_add(ob, "changed", _cb_type, cfdata);
e_widget_frametable_object_append(ot, ob, 2, 0, 1, 1, 1, 1, 1, 1);
ob = e_widget_radio_add(evas, _("Default"), 4, rg);
evas_object_smart_callback_add(ob, "changed", _cb_type, cfdata);
e_widget_frametable_object_append(ot, ob, 2, 1, 1, 1, 1, 1, 1, 1);
ob = e_widget_check_add(evas, _("Use this icon for files of this type"), &(cfdata->icon_mime));
e_widget_frametable_object_append(ot, ob, 0, 3, 3, 1, 1, 1, 1, 1);
ob = e_widget_check_add(evas, _("Use this icon for all files of this type"), &(cfdata->icon_mime));
e_widget_frametable_object_append(ot, ob, 0, 3, 2, 1, 1, 1, 1, 1);
e_widget_table_object_append(o, ot, 0, 1, 2, 1, 1, 1, 1, 1);
@ -298,7 +314,7 @@ _cb_type(void *data, Evas_Object *obj, void *event_info)
E_Config_Dialog_Data *cfdata;
cfdata = data;
if ((cfdata->icon_type == 2) || (cfdata->icon_type == 3))
if (cfdata->icon_type == 2)
e_widget_disabled_set(cfdata->gui.icon_wid, 0);
else
e_widget_disabled_set(cfdata->gui.icon_wid, 1);