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
100
src/bin/e_bg.c
100
src/bin/e_bg.c
|
@ -5,10 +5,13 @@
|
|||
|
||||
/* local subsystem functions */
|
||||
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 */
|
||||
static int _e_bg_reg_files = 0;
|
||||
|
||||
EAPI int E_EVENT_BG_UPDATE = 0;
|
||||
|
||||
/* externally accessible functions */
|
||||
EAPI int
|
||||
e_bg_init(void)
|
||||
|
@ -26,6 +29,7 @@ e_bg_init(void)
|
|||
e_filereg_register(cfbg->file);
|
||||
}
|
||||
|
||||
E_EVENT_BG_UPDATE = ecore_event_type_new();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -48,16 +52,18 @@ e_bg_shutdown(void)
|
|||
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;
|
||||
int ok;
|
||||
int current_spec;
|
||||
const char *bgfile = "";
|
||||
|
||||
ok = 0;
|
||||
current_spec = 0; /* how specific the setting is - we want the least general one that applies */
|
||||
E_Config_Desktop_Background *bg = NULL;
|
||||
int current_spec = 0; /* how specific the setting is - we want the least general one that applies */
|
||||
|
||||
/* look for desk specific background. */
|
||||
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"))
|
||||
{
|
||||
bgfile = cfbg->file;
|
||||
bg = cfbg;
|
||||
current_spec = spec;
|
||||
ok = 1;
|
||||
}
|
||||
}
|
||||
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 */
|
||||
if (!ok)
|
||||
if (cfbg)
|
||||
bgfile = cfbg->file;
|
||||
else
|
||||
{
|
||||
entries = edje_file_collection_list(e_config->desktop_default_background);
|
||||
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;
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
return bgfile;
|
||||
}
|
||||
|
||||
|
@ -207,25 +228,35 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
|
|||
EAPI void
|
||||
e_bg_default_set(char * file)
|
||||
{
|
||||
if (e_config->desktop_default_background)
|
||||
{
|
||||
e_filereg_deregister(e_config->desktop_default_background);
|
||||
evas_stringshare_del(e_config->desktop_default_background);
|
||||
}
|
||||
E_Event_Bg_Update *ev;
|
||||
|
||||
if (file)
|
||||
{
|
||||
e_filereg_register(file);
|
||||
e_config->desktop_default_background = evas_stringshare_add(file);
|
||||
}
|
||||
else
|
||||
e_config->desktop_default_background = NULL;
|
||||
if (e_config->desktop_default_background)
|
||||
{
|
||||
e_filereg_deregister(e_config->desktop_default_background);
|
||||
evas_stringshare_del(e_config->desktop_default_background);
|
||||
}
|
||||
|
||||
if (file)
|
||||
{
|
||||
e_filereg_register(file);
|
||||
e_config->desktop_default_background = evas_stringshare_add(file);
|
||||
}
|
||||
else
|
||||
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
|
||||
e_bg_add(int container, int zone, int desk_x, int desk_y, char *file)
|
||||
{
|
||||
E_Config_Desktop_Background *cfbg;
|
||||
E_Event_Bg_Update *ev;
|
||||
|
||||
e_bg_del(container, zone, desk_x, desk_y);
|
||||
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->file = evas_stringshare_add(file);
|
||||
e_config->desktop_backgrounds = evas_list_append(e_config->desktop_backgrounds, cfbg);
|
||||
|
||||
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
|
||||
e_bg_del(int container, int zone, int desk_x, int desk_y)
|
||||
{
|
||||
Evas_List *l;
|
||||
E_Event_Bg_Update *ev;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -309,3 +356,8 @@ _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *sou
|
|||
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;
|
||||
|
||||
typedef struct _E_Event_Bg_Update E_Event_Bg_Update;
|
||||
#else
|
||||
#ifndef 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_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 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_del(int container, int zone, int desk_x, int desk_y);
|
||||
EAPI void e_bg_default_set(char *file);
|
||||
EAPI void e_bg_update(void);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -22,6 +22,7 @@ typedef struct _E_Config_Dialog_Data E_Config_Dialog_Data;
|
|||
struct _E_Config_Dialog_View
|
||||
{
|
||||
int override_auto_apply;
|
||||
int basic_only;
|
||||
|
||||
void *(*create_cfdata) (E_Config_Dialog *cfd);
|
||||
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 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
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
|
@ -23,9 +34,10 @@ struct _E_Config_Dialog_Data
|
|||
Evas_Object *o_personal;
|
||||
Evas_Object *o_system;
|
||||
int fmdir;
|
||||
|
||||
|
||||
int use_theme_bg;
|
||||
char *bg;
|
||||
|
||||
/* advanced */
|
||||
int all_this_desk_screen;
|
||||
/* dialogs */
|
||||
|
@ -35,24 +47,49 @@ struct _E_Config_Dialog_Data
|
|||
|
||||
EAPI E_Config_Dialog *
|
||||
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_View *v;
|
||||
E_Config_Wallpaper *cw;
|
||||
E_Container *con;
|
||||
|
||||
if (e_config_dialog_find("E", "_config_wallpaper_dialog")) return NULL;
|
||||
v = E_NEW(E_Config_Dialog_View, 1);
|
||||
|
||||
cw = E_NEW(E_Config_Wallpaper, 1);
|
||||
|
||||
v->create_cfdata = _create_data;
|
||||
v->free_cfdata = _free_data;
|
||||
v->basic.apply_cfdata = _basic_apply_data;
|
||||
v->basic.create_widgets = _basic_create_widgets;
|
||||
v->advanced.apply_cfdata = _advanced_apply_data;
|
||||
v->advanced.create_widgets = _advanced_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.create_widgets = _advanced_create_widgets;
|
||||
}
|
||||
|
||||
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,
|
||||
_("Wallpaper Settings"),
|
||||
"E", "_config_wallpaper_dialog",
|
||||
"enlightenment/background", 0, v, NULL);
|
||||
"enlightenment/background", 0, v, cw);
|
||||
return cfd;
|
||||
}
|
||||
|
||||
|
@ -318,45 +355,52 @@ _cb_gradient(void *data1, void *data2)
|
|||
static void
|
||||
_fill_data(E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
E_Zone *z;
|
||||
E_Desk *d;
|
||||
Evas_List *l;
|
||||
char path[4096];
|
||||
|
||||
if (e_config->desktop_default_background)
|
||||
cfdata->bg = strdup(e_config->desktop_default_background);
|
||||
|
||||
z = e_zone_current_get(cfdata->cfd->con);
|
||||
if (!z) return;
|
||||
d = e_desk_current_get(z);
|
||||
if (!d) return;
|
||||
for (l = e_config->desktop_backgrounds; l; l = l->next)
|
||||
E_Config_Wallpaper *cw;
|
||||
const E_Config_Desktop_Background *cfbg;
|
||||
|
||||
cw = cfdata->cfd->data;
|
||||
|
||||
if (cw->specific_config)
|
||||
{
|
||||
E_Config_Desktop_Background *cfbg;
|
||||
|
||||
cfbg = l->data;
|
||||
if (((cfbg->container == z->container->num) ||
|
||||
(cfbg->container < 0)) &&
|
||||
((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)))
|
||||
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);
|
||||
|
||||
cfbg = e_bg_config_get(c->num, z->num, d->x, d->y);
|
||||
/* if we have a config for this bg, use it. */
|
||||
if (cfbg)
|
||||
{
|
||||
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);
|
||||
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)
|
||||
{
|
||||
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->dia_gradient) e_int_config_wallpaper_gradient_del(cfdata->dia_gradient);
|
||||
E_FREE(cfdata->bg);
|
||||
E_FREE(cfd->data);
|
||||
free(cfdata);
|
||||
}
|
||||
|
||||
|
@ -509,19 +554,33 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
static int
|
||||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
while (e_config->desktop_backgrounds)
|
||||
E_Config_Wallpaper *cw;
|
||||
|
||||
cw = cfd->data;
|
||||
if (cw->specific_config)
|
||||
{
|
||||
E_Config_Desktop_Background *cfbg;
|
||||
cfbg = e_config->desktop_backgrounds->data;
|
||||
e_bg_del(cfbg->container, cfbg->zone, cfbg->desk_x, cfbg->desk_y);
|
||||
/* 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);
|
||||
}
|
||||
if ((cfdata->use_theme_bg) || (!cfdata->bg))
|
||||
e_bg_default_set(NULL);
|
||||
else
|
||||
e_bg_default_set(cfdata->bg);
|
||||
|
||||
cfdata->all_this_desk_screen = 0;
|
||||
{
|
||||
/* set the default and nuke individual configs */
|
||||
while (e_config->desktop_backgrounds)
|
||||
{
|
||||
E_Config_Desktop_Background *cfbg;
|
||||
cfbg = e_config->desktop_backgrounds->data;
|
||||
e_bg_del(cfbg->container, cfbg->zone, cfbg->desk_x, cfbg->desk_y);
|
||||
}
|
||||
if ((cfdata->use_theme_bg) || (!cfdata->bg))
|
||||
e_bg_default_set(NULL);
|
||||
else
|
||||
e_bg_default_set(cfdata->bg);
|
||||
|
||||
cfdata->all_this_desk_screen = 0;
|
||||
}
|
||||
|
||||
|
||||
e_bg_update();
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
|
@ -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);
|
||||
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);
|
||||
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);
|
||||
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)) ||
|
||||
(e_util_container_zone_number_get(1, 0))))
|
||||
e_widget_disabled_set(o, 1);
|
||||
|
@ -683,7 +742,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (cfdata->all_this_desk_screen == 0)
|
||||
if (cfdata->all_this_desk_screen == E_CONFIG_WALLPAPER_ALL)
|
||||
{
|
||||
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);
|
||||
}
|
||||
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, -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);
|
||||
|
||||
}
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#ifdef E_TYPEDEFS
|
||||
typedef struct _E_Config_Wallpaper E_Config_Wallpaper;
|
||||
#else
|
||||
#ifndef 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_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_import_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_List *desks;
|
||||
|
||||
Ecore_Event_Handler *update_handler;
|
||||
|
||||
int w, h;
|
||||
int cur_x, cur_y; /* currently drawn */
|
||||
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
|
||||
{
|
||||
Evas_Object *thumb;
|
||||
int container, zone;
|
||||
int x, y;
|
||||
};
|
||||
|
||||
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
|
||||
_e_wid_del_hook(Evas_Object *obj)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
Evas_List *l;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
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);
|
||||
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));
|
||||
e_widget_data_set(obj, dd);
|
||||
dd->container = zone->container->num;
|
||||
dd->zone = zone->num;
|
||||
dd->x = x;
|
||||
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);
|
||||
e_widget_sub_object_add(obj, 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);
|
||||
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);
|
||||
dd->thumb = o;
|
||||
|
||||
|
||||
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);
|
||||
|
||||
wd->update_handler = ecore_event_handler_add(E_EVENT_BG_UPDATE, _e_wid_cb_bg_update, wd);
|
||||
|
||||
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