Allow setting bg of desktops from within virtual desktop dialog.
For now, left click on the small desktop. We'll probably add a menu on click, with the ability to set the desktop name or set bg. SVN revision: 26700
This commit is contained in:
parent
73a150fbf8
commit
80478f40d8
|
@ -5,10 +5,13 @@
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static void _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
|
static void _e_bg_event_bg_update_free(void *data, void *event);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static int _e_bg_reg_files = 0;
|
static int _e_bg_reg_files = 0;
|
||||||
|
|
||||||
|
EAPI int E_EVENT_BG_UPDATE = 0;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
EAPI int
|
EAPI int
|
||||||
e_bg_init(void)
|
e_bg_init(void)
|
||||||
|
@ -26,6 +29,7 @@ e_bg_init(void)
|
||||||
e_filereg_register(cfbg->file);
|
e_filereg_register(cfbg->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
E_EVENT_BG_UPDATE = ecore_event_type_new();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,16 +52,18 @@ e_bg_shutdown(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI const char *
|
/**
|
||||||
e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y)
|
* Find the configuration for a given desktop background
|
||||||
|
* Use -1 as a wild card for each parameter.
|
||||||
|
* The most specific match will be returned
|
||||||
|
*/
|
||||||
|
EAPI const E_Config_Desktop_Background *
|
||||||
|
e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y)
|
||||||
{
|
{
|
||||||
Evas_List *l, *ll, *entries;
|
Evas_List *l, *ll, *entries;
|
||||||
int ok;
|
|
||||||
int current_spec;
|
|
||||||
const char *bgfile = "";
|
|
||||||
|
|
||||||
ok = 0;
|
E_Config_Desktop_Background *bg = NULL;
|
||||||
current_spec = 0; /* how specific the setting is - we want the least general one that applies */
|
int current_spec = 0; /* how specific the setting is - we want the least general one that applies */
|
||||||
|
|
||||||
/* look for desk specific background. */
|
/* look for desk specific background. */
|
||||||
if (container_num >= 0 || zone_num >= 0 || desk_x >= 0 || desk_y >= 0)
|
if (container_num >= 0 || zone_num >= 0 || desk_x >= 0 || desk_y >= 0)
|
||||||
|
@ -88,24 +94,38 @@ e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y)
|
||||||
{
|
{
|
||||||
if (!strcmp(ll->data, "e/desktop/background"))
|
if (!strcmp(ll->data, "e/desktop/background"))
|
||||||
{
|
{
|
||||||
bgfile = cfbg->file;
|
bg = cfbg;
|
||||||
current_spec = spec;
|
current_spec = spec;
|
||||||
ok = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
edje_file_collection_list_free(entries);
|
edje_file_collection_list_free(entries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI const char *
|
||||||
|
e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y)
|
||||||
|
{
|
||||||
|
const E_Config_Desktop_Background *cfbg;
|
||||||
|
Evas_List *l, *entries;
|
||||||
|
const char *bgfile = "";
|
||||||
|
int ok = 0;
|
||||||
|
|
||||||
|
cfbg = e_bg_config_get(container_num, zone_num, desk_x, desk_y);
|
||||||
|
|
||||||
/* fall back to default */
|
/* fall back to default */
|
||||||
if (!ok)
|
if (cfbg)
|
||||||
|
bgfile = cfbg->file;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
entries = edje_file_collection_list(e_config->desktop_default_background);
|
entries = edje_file_collection_list(e_config->desktop_default_background);
|
||||||
if (entries)
|
if (entries)
|
||||||
{
|
{
|
||||||
for (ll = entries; ll; ll = ll->next)
|
for (l = entries; l; l = l->next)
|
||||||
{
|
{
|
||||||
if (!strcmp(ll->data, "e/desktop/background"))
|
if (!strcmp(l->data, "e/desktop/background"))
|
||||||
{
|
{
|
||||||
bgfile = e_config->desktop_default_background;
|
bgfile = e_config->desktop_default_background;
|
||||||
ok = 1;
|
ok = 1;
|
||||||
|
@ -119,6 +139,7 @@ e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y)
|
||||||
bgfile = e_theme_edje_file_get("base/theme/background", "e/desktop/background");
|
bgfile = e_theme_edje_file_get("base/theme/background", "e/desktop/background");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bgfile;
|
return bgfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,6 +228,8 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
|
||||||
EAPI void
|
EAPI void
|
||||||
e_bg_default_set(char * file)
|
e_bg_default_set(char * file)
|
||||||
{
|
{
|
||||||
|
E_Event_Bg_Update *ev;
|
||||||
|
|
||||||
if (e_config->desktop_default_background)
|
if (e_config->desktop_default_background)
|
||||||
{
|
{
|
||||||
e_filereg_deregister(e_config->desktop_default_background);
|
e_filereg_deregister(e_config->desktop_default_background);
|
||||||
|
@ -220,12 +243,20 @@ e_bg_default_set(char * file)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
e_config->desktop_default_background = NULL;
|
e_config->desktop_default_background = NULL;
|
||||||
|
|
||||||
|
ev = E_NEW(E_Event_Bg_Update, 1);
|
||||||
|
ev->container = -1;
|
||||||
|
ev->zone = -1;
|
||||||
|
ev->desk_x = -1;
|
||||||
|
ev->desk_y = -1;
|
||||||
|
ecore_event_add(E_EVENT_BG_UPDATE, ev, _e_bg_event_bg_update_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_bg_add(int container, int zone, int desk_x, int desk_y, char *file)
|
e_bg_add(int container, int zone, int desk_x, int desk_y, char *file)
|
||||||
{
|
{
|
||||||
E_Config_Desktop_Background *cfbg;
|
E_Config_Desktop_Background *cfbg;
|
||||||
|
E_Event_Bg_Update *ev;
|
||||||
|
|
||||||
e_bg_del(container, zone, desk_x, desk_y);
|
e_bg_del(container, zone, desk_x, desk_y);
|
||||||
cfbg = E_NEW(E_Config_Desktop_Background, 1);
|
cfbg = E_NEW(E_Config_Desktop_Background, 1);
|
||||||
|
@ -235,13 +266,22 @@ e_bg_add(int container, int zone, int desk_x, int desk_y, char *file)
|
||||||
cfbg->desk_y = desk_y;
|
cfbg->desk_y = desk_y;
|
||||||
cfbg->file = evas_stringshare_add(file);
|
cfbg->file = evas_stringshare_add(file);
|
||||||
e_config->desktop_backgrounds = evas_list_append(e_config->desktop_backgrounds, cfbg);
|
e_config->desktop_backgrounds = evas_list_append(e_config->desktop_backgrounds, cfbg);
|
||||||
|
|
||||||
e_filereg_register(cfbg->file);
|
e_filereg_register(cfbg->file);
|
||||||
|
|
||||||
|
ev = E_NEW(E_Event_Bg_Update, 1);
|
||||||
|
ev->container = container;
|
||||||
|
ev->zone = zone;
|
||||||
|
ev->desk_x = desk_x;
|
||||||
|
ev->desk_y = desk_y;
|
||||||
|
ecore_event_add(E_EVENT_BG_UPDATE, ev, _e_bg_event_bg_update_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_bg_del(int container, int zone, int desk_x, int desk_y)
|
e_bg_del(int container, int zone, int desk_x, int desk_y)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
|
E_Event_Bg_Update *ev;
|
||||||
|
|
||||||
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
||||||
{
|
{
|
||||||
|
@ -258,6 +298,13 @@ e_bg_del(int container, int zone, int desk_x, int desk_y)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ev = E_NEW(E_Event_Bg_Update, 1);
|
||||||
|
ev->container = container;
|
||||||
|
ev->zone = zone;
|
||||||
|
ev->desk_x = desk_x;
|
||||||
|
ev->desk_y = desk_y;
|
||||||
|
ecore_event_add(E_EVENT_BG_UPDATE, ev, _e_bg_event_bg_update_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -309,3 +356,8 @@ _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *sou
|
||||||
evas_object_show(zone->bg_object);
|
evas_object_show(zone->bg_object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_bg_event_bg_update_free(void *data, void *event)
|
||||||
|
{
|
||||||
|
free(event);
|
||||||
|
}
|
||||||
|
|
|
@ -10,19 +10,30 @@ typedef enum {
|
||||||
E_BG_TRANSITION_CHANGE
|
E_BG_TRANSITION_CHANGE
|
||||||
} E_Bg_Transition;
|
} E_Bg_Transition;
|
||||||
|
|
||||||
|
typedef struct _E_Event_Bg_Update E_Event_Bg_Update;
|
||||||
#else
|
#else
|
||||||
#ifndef E_BG_H
|
#ifndef E_BG_H
|
||||||
#define E_BG_H
|
#define E_BG_H
|
||||||
|
|
||||||
|
extern EAPI int E_EVENT_BG_UPDATE;
|
||||||
|
|
||||||
|
struct _E_Event_Bg_Update
|
||||||
|
{
|
||||||
|
int container;
|
||||||
|
int zone;
|
||||||
|
int desk_x;
|
||||||
|
int desk_y;
|
||||||
|
};
|
||||||
|
|
||||||
EAPI int e_bg_init(void);
|
EAPI int e_bg_init(void);
|
||||||
EAPI int e_bg_shutdown(void);
|
EAPI int e_bg_shutdown(void);
|
||||||
|
|
||||||
|
EAPI const E_Config_Desktop_Background *e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y);
|
||||||
EAPI const char *e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y);
|
EAPI const char *e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y);
|
||||||
EAPI void e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition);
|
EAPI void e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition);
|
||||||
EAPI void e_bg_add(int container, int zone, int desk_x, int desk_y, char *file);
|
EAPI void e_bg_add(int container, int zone, int desk_x, int desk_y, char *file);
|
||||||
EAPI void e_bg_del(int container, int zone, int desk_x, int desk_y);
|
EAPI void e_bg_del(int container, int zone, int desk_x, int desk_y);
|
||||||
EAPI void e_bg_default_set(char *file);
|
EAPI void e_bg_default_set(char *file);
|
||||||
EAPI void e_bg_update(void);
|
EAPI void e_bg_update(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,6 +22,7 @@ typedef struct _E_Config_Dialog_Data E_Config_Dialog_Data;
|
||||||
struct _E_Config_Dialog_View
|
struct _E_Config_Dialog_View
|
||||||
{
|
{
|
||||||
int override_auto_apply;
|
int override_auto_apply;
|
||||||
|
int basic_only;
|
||||||
|
|
||||||
void *(*create_cfdata) (E_Config_Dialog *cfd);
|
void *(*create_cfdata) (E_Config_Dialog *cfd);
|
||||||
void (*free_cfdata) (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
void (*free_cfdata) (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||||
|
|
|
@ -12,6 +12,17 @@ static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *eva
|
||||||
static int _advanced_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
static int _advanced_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||||
static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
||||||
|
|
||||||
|
#define E_CONFIG_WALLPAPER_ALL 0
|
||||||
|
#define E_CONFIG_WALLPAPER_DESK 1
|
||||||
|
#define E_CONFIG_WALLPAPER_SCREEN 2
|
||||||
|
|
||||||
|
struct _E_Config_Wallpaper
|
||||||
|
{
|
||||||
|
int specific_config;
|
||||||
|
int con_num, zone_num;
|
||||||
|
int desk_x, desk_y;
|
||||||
|
};
|
||||||
|
|
||||||
struct _E_Config_Dialog_Data
|
struct _E_Config_Dialog_Data
|
||||||
{
|
{
|
||||||
E_Config_Dialog *cfd;
|
E_Config_Dialog *cfd;
|
||||||
|
@ -26,6 +37,7 @@ struct _E_Config_Dialog_Data
|
||||||
|
|
||||||
int use_theme_bg;
|
int use_theme_bg;
|
||||||
char *bg;
|
char *bg;
|
||||||
|
|
||||||
/* advanced */
|
/* advanced */
|
||||||
int all_this_desk_screen;
|
int all_this_desk_screen;
|
||||||
/* dialogs */
|
/* dialogs */
|
||||||
|
@ -35,24 +47,49 @@ struct _E_Config_Dialog_Data
|
||||||
|
|
||||||
EAPI E_Config_Dialog *
|
EAPI E_Config_Dialog *
|
||||||
e_int_config_wallpaper(E_Container *con)
|
e_int_config_wallpaper(E_Container *con)
|
||||||
|
{
|
||||||
|
E_Zone *zone;
|
||||||
|
return e_int_config_wallpaper_desk(-1, -1, -1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI E_Config_Dialog *
|
||||||
|
e_int_config_wallpaper_desk(int con_num, int zone_num, int desk_x, int desk_y)
|
||||||
{
|
{
|
||||||
E_Config_Dialog *cfd;
|
E_Config_Dialog *cfd;
|
||||||
E_Config_Dialog_View *v;
|
E_Config_Dialog_View *v;
|
||||||
|
E_Config_Wallpaper *cw;
|
||||||
|
E_Container *con;
|
||||||
|
|
||||||
if (e_config_dialog_find("E", "_config_wallpaper_dialog")) return NULL;
|
if (e_config_dialog_find("E", "_config_wallpaper_dialog")) return NULL;
|
||||||
v = E_NEW(E_Config_Dialog_View, 1);
|
v = E_NEW(E_Config_Dialog_View, 1);
|
||||||
|
cw = E_NEW(E_Config_Wallpaper, 1);
|
||||||
|
|
||||||
v->create_cfdata = _create_data;
|
v->create_cfdata = _create_data;
|
||||||
v->free_cfdata = _free_data;
|
v->free_cfdata = _free_data;
|
||||||
v->basic.apply_cfdata = _basic_apply_data;
|
v->basic.apply_cfdata = _basic_apply_data;
|
||||||
v->basic.create_widgets = _basic_create_widgets;
|
v->basic.create_widgets = _basic_create_widgets;
|
||||||
|
|
||||||
|
if (!(con_num == -1 && zone_num == -1 && desk_x == -1 && desk_y == -1))
|
||||||
|
cw->specific_config = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
v->advanced.apply_cfdata = _advanced_apply_data;
|
v->advanced.apply_cfdata = _advanced_apply_data;
|
||||||
v->advanced.create_widgets = _advanced_create_widgets;
|
v->advanced.create_widgets = _advanced_create_widgets;
|
||||||
|
}
|
||||||
|
|
||||||
v->override_auto_apply = 1;
|
v->override_auto_apply = 1;
|
||||||
|
|
||||||
|
cw->con_num = con_num;
|
||||||
|
cw->zone_num = zone_num;
|
||||||
|
cw->desk_x = desk_x;
|
||||||
|
cw->desk_y = desk_y;
|
||||||
|
|
||||||
|
con = e_container_current_get(e_manager_current_get());
|
||||||
|
|
||||||
cfd = e_config_dialog_new(con,
|
cfd = e_config_dialog_new(con,
|
||||||
_("Wallpaper Settings"),
|
_("Wallpaper Settings"),
|
||||||
"E", "_config_wallpaper_dialog",
|
"E", "_config_wallpaper_dialog",
|
||||||
"enlightenment/background", 0, v, NULL);
|
"enlightenment/background", 0, v, cw);
|
||||||
return cfd;
|
return cfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,45 +355,52 @@ _cb_gradient(void *data1, void *data2)
|
||||||
static void
|
static void
|
||||||
_fill_data(E_Config_Dialog_Data *cfdata)
|
_fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
E_Zone *z;
|
|
||||||
E_Desk *d;
|
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
char path[4096];
|
char path[4096];
|
||||||
|
E_Config_Wallpaper *cw;
|
||||||
|
const E_Config_Desktop_Background *cfbg;
|
||||||
|
|
||||||
if (e_config->desktop_default_background)
|
cw = cfdata->cfd->data;
|
||||||
cfdata->bg = strdup(e_config->desktop_default_background);
|
|
||||||
|
|
||||||
z = e_zone_current_get(cfdata->cfd->con);
|
if (cw->specific_config)
|
||||||
if (!z) return;
|
{
|
||||||
|
const char *bg;
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* get current desk. advanced mode allows selecting all, screen or desk */
|
||||||
|
E_Container *c;
|
||||||
|
E_Zone *z;
|
||||||
|
E_Desk *d;
|
||||||
|
|
||||||
|
c = e_container_current_get(e_manager_current_get());
|
||||||
|
z = e_zone_current_get(c);
|
||||||
d = e_desk_current_get(z);
|
d = e_desk_current_get(z);
|
||||||
if (!d) return;
|
|
||||||
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
|
||||||
{
|
|
||||||
E_Config_Desktop_Background *cfbg;
|
|
||||||
|
|
||||||
cfbg = l->data;
|
cfbg = e_bg_config_get(c->num, z->num, d->x, d->y);
|
||||||
if (((cfbg->container == z->container->num) ||
|
/* if we have a config for this bg, use it. */
|
||||||
(cfbg->container < 0)) &&
|
if (cfbg)
|
||||||
((cfbg->zone == z->num) ||
|
|
||||||
(cfbg->zone < 0)) &&
|
|
||||||
((cfbg->desk_x == d->x) ||
|
|
||||||
(cfbg->desk_x < 0)) &&
|
|
||||||
((cfbg->desk_y == d->y) ||
|
|
||||||
(cfbg->desk_y < 0)))
|
|
||||||
{
|
{
|
||||||
|
if (cfbg->container >= 0 && cfbg->zone >= 0)
|
||||||
|
{
|
||||||
|
if (cfbg->desk_x >= 0 && cfbg->desk_y >= 0)
|
||||||
|
cfdata->all_this_desk_screen = E_CONFIG_WALLPAPER_DESK;
|
||||||
|
else
|
||||||
|
cfdata->all_this_desk_screen = E_CONFIG_WALLPAPER_SCREEN;
|
||||||
|
}
|
||||||
E_FREE(cfdata->bg);
|
E_FREE(cfdata->bg);
|
||||||
cfdata->bg = strdup(cfbg->file);
|
cfdata->bg = strdup(cfbg->file);
|
||||||
if ((cfbg->container >= 0) ||
|
|
||||||
(cfbg->zone >= 0))
|
|
||||||
cfdata->all_this_desk_screen = 2;
|
|
||||||
if ((cfbg->desk_x >= 0) ||
|
|
||||||
(cfbg->desk_y >= 0))
|
|
||||||
cfdata->all_this_desk_screen = 1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cfdata->bg) cfdata->use_theme_bg = 1;
|
if (!cfdata->bg && e_config->desktop_default_background)
|
||||||
|
cfdata->bg = strdup(e_config->desktop_default_background);
|
||||||
|
else
|
||||||
|
cfdata->use_theme_bg = 1;
|
||||||
|
|
||||||
if (cfdata->bg)
|
if (cfdata->bg)
|
||||||
{
|
{
|
||||||
snprintf(path, sizeof(path), "%s/data/backgrounds", e_prefix_data_get());
|
snprintf(path, sizeof(path), "%s/data/backgrounds", e_prefix_data_get());
|
||||||
|
@ -383,6 +427,7 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
if (cfdata->win_import) e_int_config_wallpaper_del(cfdata->win_import);
|
if (cfdata->win_import) e_int_config_wallpaper_del(cfdata->win_import);
|
||||||
if (cfdata->dia_gradient) e_int_config_wallpaper_gradient_del(cfdata->dia_gradient);
|
if (cfdata->dia_gradient) e_int_config_wallpaper_gradient_del(cfdata->dia_gradient);
|
||||||
E_FREE(cfdata->bg);
|
E_FREE(cfdata->bg);
|
||||||
|
E_FREE(cfd->data);
|
||||||
free(cfdata);
|
free(cfdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,6 +554,18 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
||||||
static int
|
static int
|
||||||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
|
E_Config_Wallpaper *cw;
|
||||||
|
|
||||||
|
cw = cfd->data;
|
||||||
|
if (cw->specific_config)
|
||||||
|
{
|
||||||
|
/* update a specific config */
|
||||||
|
e_bg_del(cw->con_num, cw->zone_num, cw->desk_x, cw->desk_y);
|
||||||
|
e_bg_add(cw->con_num, cw->zone_num, cw->desk_x, cw->desk_y, cfdata->bg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* set the default and nuke individual configs */
|
||||||
while (e_config->desktop_backgrounds)
|
while (e_config->desktop_backgrounds)
|
||||||
{
|
{
|
||||||
E_Config_Desktop_Background *cfbg;
|
E_Config_Desktop_Background *cfbg;
|
||||||
|
@ -521,6 +578,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
e_bg_default_set(cfdata->bg);
|
e_bg_default_set(cfdata->bg);
|
||||||
|
|
||||||
cfdata->all_this_desk_screen = 0;
|
cfdata->all_this_desk_screen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
e_bg_update();
|
e_bg_update();
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
@ -642,11 +701,11 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
||||||
e_widget_framelist_content_align_set(ol, 0.0, 0.0);
|
e_widget_framelist_content_align_set(ol, 0.0, 0.0);
|
||||||
rg = e_widget_radio_group_new(&(cfdata->all_this_desk_screen));
|
rg = e_widget_radio_group_new(&(cfdata->all_this_desk_screen));
|
||||||
|
|
||||||
o = e_widget_radio_add(evas, _("All Desktops"), 0, rg);
|
o = e_widget_radio_add(evas, _("All Desktops"), E_CONFIG_WALLPAPER_ALL, rg);
|
||||||
e_widget_framelist_object_append(ol, o);
|
e_widget_framelist_object_append(ol, o);
|
||||||
o = e_widget_radio_add(evas, _("This Desktop"), 1, rg);
|
o = e_widget_radio_add(evas, _("This Desktop"), E_CONFIG_WALLPAPER_DESK, rg);
|
||||||
e_widget_framelist_object_append(ol, o);
|
e_widget_framelist_object_append(ol, o);
|
||||||
o = e_widget_radio_add(evas, _("This Screen"), 2, rg);
|
o = e_widget_radio_add(evas, _("This Screen"), E_CONFIG_WALLPAPER_SCREEN, rg);
|
||||||
if (!((e_util_container_zone_number_get(0, 1)) ||
|
if (!((e_util_container_zone_number_get(0, 1)) ||
|
||||||
(e_util_container_zone_number_get(1, 0))))
|
(e_util_container_zone_number_get(1, 0))))
|
||||||
e_widget_disabled_set(o, 1);
|
e_widget_disabled_set(o, 1);
|
||||||
|
@ -683,7 +742,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cfdata->all_this_desk_screen == 0)
|
if (cfdata->all_this_desk_screen == E_CONFIG_WALLPAPER_ALL)
|
||||||
{
|
{
|
||||||
while (e_config->desktop_backgrounds)
|
while (e_config->desktop_backgrounds)
|
||||||
{
|
{
|
||||||
|
@ -693,7 +752,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
}
|
}
|
||||||
e_bg_default_set(cfdata->bg);
|
e_bg_default_set(cfdata->bg);
|
||||||
}
|
}
|
||||||
else if (cfdata->all_this_desk_screen == 1)
|
else if (cfdata->all_this_desk_screen == E_CONFIG_WALLPAPER_DESK)
|
||||||
{
|
{
|
||||||
e_bg_del(z->container->num, z->num, d->x, d->y);
|
e_bg_del(z->container->num, z->num, d->x, d->y);
|
||||||
e_bg_del(z->container->num, -1, d->x, d->y);
|
e_bg_del(z->container->num, -1, d->x, d->y);
|
||||||
|
@ -702,7 +761,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
e_bg_add(z->container->num, z->num, d->x, d->y, cfdata->bg);
|
e_bg_add(z->container->num, z->num, d->x, d->y, cfdata->bg);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (cfdata->all_this_desk_screen == 2)
|
else if (cfdata->all_this_desk_screen == E_CONFIG_WALLPAPER_SCREEN)
|
||||||
{
|
{
|
||||||
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||||
*/
|
*/
|
||||||
#ifdef E_TYPEDEFS
|
#ifdef E_TYPEDEFS
|
||||||
|
typedef struct _E_Config_Wallpaper E_Config_Wallpaper;
|
||||||
#else
|
#else
|
||||||
#ifndef E_INT_CONFIG_WALLPAPER_H
|
#ifndef E_INT_CONFIG_WALLPAPER_H
|
||||||
#define E_INT_CONFIG_WALLPAPER_H
|
#define E_INT_CONFIG_WALLPAPER_H
|
||||||
|
|
||||||
EAPI E_Config_Dialog *e_int_config_wallpaper(E_Container *con);
|
EAPI E_Config_Dialog *e_int_config_wallpaper(E_Container *con);
|
||||||
|
EAPI E_Config_Dialog *e_int_config_wallpaper_desk(int con_num, int zone_num, int desk_x, int desk_y);
|
||||||
EAPI void e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file);
|
EAPI void e_int_config_wallpaper_update(E_Config_Dialog *dia, char *file);
|
||||||
EAPI void e_int_config_wallpaper_import_done(E_Config_Dialog *dia);
|
EAPI void e_int_config_wallpaper_import_done(E_Config_Dialog *dia);
|
||||||
EAPI void e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia);
|
EAPI void e_int_config_wallpaper_gradient_done(E_Config_Dialog *dia);
|
||||||
|
|
|
@ -15,6 +15,8 @@ struct _E_Widget_Data
|
||||||
Evas_Object *table;
|
Evas_Object *table;
|
||||||
Evas_List *desks;
|
Evas_List *desks;
|
||||||
|
|
||||||
|
Ecore_Event_Handler *update_handler;
|
||||||
|
|
||||||
int w, h;
|
int w, h;
|
||||||
int cur_x, cur_y; /* currently drawn */
|
int cur_x, cur_y; /* currently drawn */
|
||||||
int desk_count_x, desk_count_y;
|
int desk_count_x, desk_count_y;
|
||||||
|
@ -24,19 +26,32 @@ typedef struct _E_Widget_Desk_Data E_Widget_Desk_Data;
|
||||||
struct _E_Widget_Desk_Data
|
struct _E_Widget_Desk_Data
|
||||||
{
|
{
|
||||||
Evas_Object *thumb;
|
Evas_Object *thumb;
|
||||||
|
int container, zone;
|
||||||
int x, y;
|
int x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void _e_wid_reconfigure(E_Widget_Data *wd);
|
static void _e_wid_reconfigure(E_Widget_Data *wd);
|
||||||
|
static void _e_wid_desk_cb_menu(void *data, Evas_Object *obj, const char *signal, const char *source);
|
||||||
|
static void _e_wid_cb_bg_update(void *data, int type, void *event);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_wid_del_hook(Evas_Object *obj)
|
_e_wid_del_hook(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
E_Widget_Data *wd;
|
E_Widget_Data *wd;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
wd = e_widget_data_get(obj);
|
wd = e_widget_data_get(obj);
|
||||||
if (!wd) return;
|
if (!wd) return;
|
||||||
|
|
||||||
|
if (wd->update_handler) ecore_event_handler_del(wd->update_handler);
|
||||||
|
for (l = wd->desks; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *o;
|
||||||
|
E_Widget_Desk_Data *dd;
|
||||||
|
o = l->data;
|
||||||
|
dd = e_widget_data_get(o);
|
||||||
|
e_thumb_icon_end(o);
|
||||||
|
}
|
||||||
evas_list_free(wd->desks);
|
evas_list_free(wd->desks);
|
||||||
free(wd);
|
free(wd);
|
||||||
}
|
}
|
||||||
|
@ -81,6 +96,8 @@ e_widget_deskpreview_desk_add(Evas *evas, E_Zone *zone, int x, int y, int tw, in
|
||||||
|
|
||||||
dd = calloc(1, sizeof(E_Widget_Desk_Data));
|
dd = calloc(1, sizeof(E_Widget_Desk_Data));
|
||||||
e_widget_data_set(obj, dd);
|
e_widget_data_set(obj, dd);
|
||||||
|
dd->container = zone->container->num;
|
||||||
|
dd->zone = zone->num;
|
||||||
dd->x = x;
|
dd->x = x;
|
||||||
dd->y = y;
|
dd->y = y;
|
||||||
|
|
||||||
|
@ -92,6 +109,7 @@ e_widget_deskpreview_desk_add(Evas *evas, E_Zone *zone, int x, int y, int tw, in
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
e_widget_sub_object_add(obj, o);
|
e_widget_sub_object_add(obj, o);
|
||||||
overlay = o;
|
overlay = o;
|
||||||
|
edje_object_signal_callback_add(o, "mouse,down,1", "e.event.menu", _e_wid_desk_cb_menu, dd);
|
||||||
|
|
||||||
o = e_thumb_icon_add(evas);
|
o = e_thumb_icon_add(evas);
|
||||||
e_icon_fill_inside_set(o, 0);
|
e_icon_fill_inside_set(o, 0);
|
||||||
|
@ -103,6 +121,7 @@ e_widget_deskpreview_desk_add(Evas *evas, E_Zone *zone, int x, int y, int tw, in
|
||||||
e_widget_sub_object_add(obj, o);
|
e_widget_sub_object_add(obj, o);
|
||||||
dd->thumb = o;
|
dd->thumb = o;
|
||||||
|
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +249,51 @@ e_widget_desk_preview_add(Evas *evas, int nx, int ny)
|
||||||
|
|
||||||
e_widget_desk_preview_num_desks_set(obj, nx, ny);
|
e_widget_desk_preview_num_desks_set(obj, nx, ny);
|
||||||
|
|
||||||
|
wd->update_handler = ecore_event_handler_add(E_EVENT_BG_UPDATE, _e_wid_cb_bg_update, wd);
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_wid_desk_cb_menu(void *data, Evas_Object *obj, const char *signal, const char *source)
|
||||||
|
{
|
||||||
|
E_Widget_Desk_Data *dd;
|
||||||
|
|
||||||
|
dd = data;
|
||||||
|
/* XXX change this to display a menu with the option to set the desktop name or change the desktop bg */
|
||||||
|
e_int_config_wallpaper_desk(dd->container, dd->zone, dd->x, dd->y);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_wid_cb_bg_update(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
E_Event_Bg_Update *ev;
|
||||||
|
E_Widget_Data *wd;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
if (type != E_EVENT_BG_UPDATE) return;
|
||||||
|
|
||||||
|
wd = data;
|
||||||
|
ev = event;
|
||||||
|
|
||||||
|
for(l = wd->desks; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *o;
|
||||||
|
E_Widget_Desk_Data *dd;
|
||||||
|
o = l->data;
|
||||||
|
dd = e_widget_data_get(o);
|
||||||
|
|
||||||
|
if (!dd)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (((ev->container < 0) || (dd->container == ev->container)) &&
|
||||||
|
((ev->zone < 0) || (dd->zone == ev->zone)) &&
|
||||||
|
((ev->desk_x < 0) || (dd->x == ev->desk_x)) &&
|
||||||
|
((ev->desk_y < 0) || (dd->y == ev->desk_y)))
|
||||||
|
{
|
||||||
|
const char *bgfile = e_bg_file_get(dd->container, dd->zone, dd->x, dd->y);
|
||||||
|
e_thumb_icon_file_set(dd->thumb, bgfile, "e/desktop/background");
|
||||||
|
e_thumb_icon_rethumb(dd->thumb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue