|
From: Enlightenment C. <no...@cv...> - 2007-04-17 15:46:58
|
Enlightenment CVS committal
Author : raster
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_fm.c e_fm.h e_fwin.c
Log Message:
in theory handle custom themes for everything now (fm2-wise)
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v
retrieving revision 1.146
retrieving revision 1.147
diff -u -3 -r1.146 -r1.147
--- e_fm.c 16 Apr 2007 09:44:40 -0000 1.146
+++ e_fm.c 17 Apr 2007 15:46:50 -0000 1.147
@@ -74,6 +74,7 @@
unsigned char listing : 1;
E_Fm2_Config *config;
+ const char *custom_theme;
struct {
Evas_Object *obj, *obj2;
@@ -293,6 +294,8 @@
static void _e_fm2_cb_dbus_method_add_match(void *data, Ecore_DBus_Method_Return *reply);
static void _e_fm2_cb_dbus_method_error(void *data, const char *error);
+static int _e_fm2_theme_edje_object_set(E_Fm2_Smart_Data *sd, Evas_Object *o, const char *category, const char *group);
+
static void _e_fm2_client_spawn(void);
static E_Fm2_Client *_e_fm2_client_get(void);
static void _e_fm2_client_monitor_add(int id, const char *path);
@@ -498,6 +501,22 @@
}
EAPI void
+e_fm2_custom_theme_set(Evas_Object *obj, const char *path)
+{
+ E_Fm2_Smart_Data *sd;
+
+ sd = evas_object_smart_data_get(obj);
+ if (!sd) return; // safety
+ if (!evas_object_type_get(obj)) return; // safety
+ if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
+ if (sd->custom_theme) evas_stringshare_del(sd->custom_theme);
+ if (path)
+ sd->custom_theme = evas_stringshare_add(path);
+ else
+ sd->custom_theme = NULL;
+}
+
+EAPI void
e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path)
{
E_Fm2_Smart_Data *sd;
@@ -907,7 +926,7 @@
{
oic = edje_object_add(evas);
if (!edje_object_file_set(oic, ici->icon, "icon"))
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
@@ -930,7 +949,7 @@
if (S_ISDIR(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/folder");
}
else
@@ -959,7 +978,7 @@
if (!icon)
{
oic = edje_object_add(evas);
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
@@ -992,10 +1011,10 @@
else if (!strncmp(icon, "e/icons/fileman/mime/", 21))
{
oic = edje_object_add(evas);
- if (!e_theme_edje_object_set(oic,
+ if (!_e_fm2_theme_edje_object_set(ic->sd, oic,
"base/theme/fileman",
icon))
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "THEME";
}
@@ -1006,7 +1025,7 @@
{
oic = edje_object_add(evas);
if (!edje_object_file_set(oic, icon, "icon"))
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
}
else
@@ -1083,7 +1102,7 @@
if (oic == NULL)
{
oic = edje_object_add(evas);
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
@@ -1095,42 +1114,42 @@
else if (S_ISCHR(ici->statinfo.st_mode))
{
oic = edje_object_add(evas);
- e_theme_edje_object_set(oic, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, 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_fm2_theme_edje_object_set(ic->sd, 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_fm2_theme_edje_object_set(ic->sd, 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_fm2_theme_edje_object_set(ic->sd, 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_fm2_theme_edje_object_set(ic->sd, 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_fm2_theme_edje_object_set(ic->sd, oic, "base/theme/fileman",
"e/icons/fileman/file");
if (type_ret) *type_ret = "FILE_TYPE";
}
@@ -2349,7 +2368,7 @@
if (!obj)
{
obj = edje_object_add(evas_object_evas_get(ic->sd->obj));
- e_theme_edje_object_set(obj, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, obj, "base/theme/fileman",
"e/fileman/icon/variable");
ic->sd->tmp.obj = obj;
}
@@ -2370,10 +2389,10 @@
{
obj = edje_object_add(evas_object_evas_get(ic->sd->obj));
if (ic->sd->config->icon.fixed.w)
- e_theme_edje_object_set(obj, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, obj, "base/theme/fileman",
"e/fileman/list/fixed");
else
- e_theme_edje_object_set(obj, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, obj, "base/theme/fileman",
"e/fileman/list/variable");
ic->sd->tmp.obj = obj;
}
@@ -2456,29 +2475,29 @@
if (ic->sd->config->icon.fixed.w)
{
if (ic->odd)
- e_theme_edje_object_set(ic->obj, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/widgets",
"e/fileman/list_odd/fixed");
else
- e_theme_edje_object_set(ic->obj, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/widgets",
"e/fileman/list/fixed");
}
else
{
if (ic->odd)
- e_theme_edje_object_set(ic->obj, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/widgets",
"e/fileman/list_odd/variable");
else
- e_theme_edje_object_set(ic->obj, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/widgets",
"e/fileman/list/variable");
}
}
else
{
if (ic->sd->config->icon.fixed.w)
- e_theme_edje_object_set(ic->obj, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/fileman",
"e/fileman/icon/fixed");
else
- e_theme_edje_object_set(ic->obj, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, ic->obj, "base/theme/fileman",
"e/fileman/icon/variable");
}
_e_fm2_icon_label_set(ic, ic->obj);
@@ -3820,29 +3839,29 @@
if (ic->sd->config->icon.fixed.w)
{
if (ic->odd)
- e_theme_edje_object_set(o, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/widgets",
"e/fileman/list_odd/fixed");
else
- e_theme_edje_object_set(o, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/widgets",
"e/fileman/list/fixed");
}
else
{
if (ic->odd)
- e_theme_edje_object_set(o, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/widgets",
"e/fileman/list_odd/variable");
else
- e_theme_edje_object_set(o, "base/theme/widgets",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/widgets",
"e/fileman/list/variable");
}
}
else
{
if (ic->sd->config->icon.fixed.w)
- e_theme_edje_object_set(o, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/fileman",
"e/fileman/icon/fixed");
else
- e_theme_edje_object_set(o, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(ic->sd, o, "base/theme/fileman",
"e/fileman/icon/variable");
}
_e_fm2_icon_label_set(ic, o);
@@ -4347,21 +4366,21 @@
sd->drop = edje_object_add(evas_object_evas_get(obj));
evas_object_clip_set(sd->drop, sd->clip);
- e_theme_edje_object_set(sd->drop, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(sd, sd->drop, "base/theme/fileman",
"e/fileman/list/drop_between");
evas_object_smart_member_add(sd->drop, obj);
evas_object_show(sd->drop);
sd->drop_in = edje_object_add(evas_object_evas_get(obj));
evas_object_clip_set(sd->drop_in, sd->clip);
- e_theme_edje_object_set(sd->drop_in, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(sd, sd->drop_in, "base/theme/fileman",
"e/fileman/list/drop_in");
evas_object_smart_member_add(sd->drop_in, obj);
evas_object_show(sd->drop_in);
sd->overlay = edje_object_add(evas_object_evas_get(obj));
evas_object_clip_set(sd->overlay, sd->clip);
- e_theme_edje_object_set(sd->overlay, "base/theme/fileman",
+ _e_fm2_theme_edje_object_set(sd, sd->overlay, "base/theme/fileman",
"e/fileman/overlay");
evas_object_smart_member_add(sd->overlay, obj);
evas_object_show(sd->overlay);
@@ -4399,6 +4418,7 @@
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);
+ if (sd->custom_theme) evas_stringshare_del(sd->custom_theme);
if (sd->dev) evas_stringshare_del(sd->dev);
if (sd->path) evas_stringshare_del(sd->path);
if (sd->realpath)
@@ -5851,4 +5871,23 @@
_e_fm2_cb_dbus_method_error(void *data, const char *error)
{
printf("E FM: DBus Error: %s\n", error);
+}
+
+static int
+_e_fm2_theme_edje_object_set(E_Fm2_Smart_Data *sd, Evas_Object *o, const char *category, const char *group)
+{
+ if (sd->custom_theme)
+ {
+ /* FIXME: need a way of caching what elements are and are not in the custom theme */
+ if (edje_object_file_set(o, sd->custom_theme, group)) return 1;
+ }
+ if (sd->custom_theme)
+ {
+ if (!ecore_file_exists(sd->custom_theme))
+ {
+ evas_stringshare_del(sd->custom_theme);
+ sd->custom_theme = NULL;
+ }
+ }
+ return e_theme_edje_object_set(o, category, group);
}
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- e_fm.h 2 Mar 2007 17:00:20 -0000 1.39
+++ e_fm.h 17 Apr 2007 15:46:51 -0000 1.40
@@ -151,6 +151,7 @@
EAPI int e_fm2_shutdown(void);
EAPI Evas_Object *e_fm2_add(Evas *evas);
EAPI void e_fm2_path_set(Evas_Object *obj, const char *dev, const char *path);
+EAPI void e_fm2_custom_theme_set(Evas_Object *obj, const char *path);
EAPI void e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path);
EAPI void e_fm2_refresh(Evas_Object *obj);
EAPI const char *e_fm2_real_path_get(Evas_Object *obj);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_fwin.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- e_fwin.c 16 Apr 2007 15:23:11 -0000 1.36
+++ e_fwin.c 17 Apr 2007 15:46:51 -0000 1.37
@@ -280,6 +280,12 @@
"e/fileman/scrollframe/default");
e_scrollframe_child_pos_set(fwin->scrollframe_obj, 0, 0);
}
+ snprintf(buf, sizeof(buf), "%s/.directory-theme.edj",
+ e_fm2_real_path_get(fwin->fm_obj));
+ if (ecore_file_exists(buf))
+ e_fm2_custom_theme_set(obj, buf);
+ else
+ e_fm2_custom_theme_set(obj, NULL);
}
static void
|