add a preview widget (includes a livethumb for live downscaling - notice

previews of animated bgs's... animate now). fixed problems with image widget
withleaks and other stuff... also desklok tries to abord if grabs fail and
agressively tries to disable existing grabs


SVN revision: 20987
This commit is contained in:
Carsten Haitzler 2006-03-04 04:11:51 +00:00
parent aa78af7f12
commit b089c7d1e3
13 changed files with 390 additions and 138 deletions

View File

@ -62,5 +62,6 @@ collections {
#include "default_desklock.edc"
#include "default_textblock.edc"
#include "default_shelf.edc"
#include "default_preview.edc"
}

View File

@ -0,0 +1,82 @@
images {
image: "e17_ibar_bg_v.png" COMP;
image: "e17_ibar_over_v.png" COMP;
}
group {
name: "widgets/preview";
parts {
part {
name: "bg";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
to: "item";
offset: -3 -3;
}
rel2 {
to: "item";
offset: 2 2;
}
image {
normal: "e17_ibar_bg_v.png";
border: 7 7 7 7;
}
fill {
smooth : 0;
}
}
}
part {
name: "clipper";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
to: "item";
}
rel2 {
to: "item";
}
}
}
part {
name: "item";
clip_to: "clipper";
type: SWALLOW;
mouse_events: 0;
description {
state: "default" 0.0;
color: 0 0 0 0;
rel1 {
offset: 2 2;
}
rel2 {
offset: -3 -3;
}
}
}
part {
name: "conf_over";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
to: "bg";
}
rel2 {
to: "bg";
}
image {
normal: "e17_ibar_over_v.png";
border: 13 13 13 13;
}
fill {
smooth : 0;
}
}
}
}
}

View File

@ -146,7 +146,8 @@ e_widget_textblock.h \
e_apps_error.h \
e_stolen.h \
e_gadcon.h \
e_shelf.h
e_shelf.h \
e_widget_preview.h
enlightenment_src = \
e_user.c \
@ -275,6 +276,7 @@ e_apps_error.c \
e_stolen.c \
e_gadcon.c \
e_shelf.c \
e_widget_preview.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \

View File

@ -19,6 +19,7 @@ struct _E_Desklock_Data
Evas_List *elock_wnd_list;
Ecore_X_Window elock_wnd;
Evas_List *handlers;
Ecore_X_Window elock_grab_break_wnd;
char passwd[PASSWD_LEN];
};
@ -65,22 +66,63 @@ e_desklock_show(void)
return 0;
}
if (!edd)
edd = E_NEW(E_Desklock_Data, 1);
if (!edd) return 0;
edd->elock_wnd = ecore_x_window_input_new(e_manager_current_get()->root,
0, 0, 1, 1);
ecore_x_window_show(edd->elock_wnd);
managers = e_manager_list();
if (!e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd))
{
edd = E_NEW(E_Desklock_Data, 1);
if (!edd) return 0;
edd->elock_wnd_list = NULL;
edd->elock_wnd = 0;
edd->handlers = NULL;
edd->passwd[0] = 0;
for (l = managers; l; l = l->next)
{
E_Manager *man;
Ecore_X_Window *windows;
int wnum;
man = l->data;
windows = ecore_x_window_children_get(man->root, &wnum);
if (windows)
{
int i;
for (i = 0; i < wnum; i++)
{
Ecore_X_Window_Attributes att;
ecore_x_window_attributes_get(windows[i], &att);
if (att.visible)
{
ecore_x_window_hide(windows[i]);
if (e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd))
{
edd->elock_grab_break_wnd = windows[i];
free(windows);
goto works;
}
ecore_x_window_show(windows[i]);
}
}
free(windows);
}
}
/* everything failed - cant lock */
e_util_dialog_show(_("Lock Failed"),
_("Locking the desktop failed because some application<br>"
"has grabbed either they keyboard or the mouse or both<br>"
"and their grab is unable to be broken."));
ecore_x_window_del(edd->elock_wnd);
free(edd);
edd = NULL;
return 0;
}
works:
last_active_zone = current_zone =
e_zone_current_get(e_container_current_get(e_manager_current_get()));
zone_counter = 0;
total_zone_num = _e_desklock_zone_num_get();
managers = e_manager_list();
for (l = managers; l; l = l->next)
{
E_Manager *man;
@ -94,16 +136,8 @@ e_desklock_show(void)
for (l3 = con->zones; l3; l3 = l3->next)
{
E_Zone *zone;
zone = l3->data;
if (!edd->elock_wnd)
{
edd->elock_wnd = ecore_x_window_input_new(zone->container->win, 0, 0, 1, 1);
ecore_x_window_show(edd->elock_wnd);
e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd);
}
edp = E_NEW(E_Desklock_Popup_Data, 1);
if (edp)
{
@ -112,6 +146,7 @@ e_desklock_show(void)
ecore_x_current_time_get(), NULL);
e_popup_layer_set(edp->popup_wnd, ELOCK_POPUP_LAYER);
ecore_evas_raise(edp->popup_wnd->ecore_evas);
evas_event_freeze(edp->popup_wnd->evas);
edp->bg_object = edje_object_add(edp->popup_wnd->evas);
@ -222,7 +257,9 @@ e_desklock_hide(void)
E_Desklock_Popup_Data *edp;
if (!edd) return;
if (edd->elock_grab_break_wnd)
ecore_x_window_show(edd->elock_grab_break_wnd);
while (edd->elock_wnd_list)
{
edp = edd->elock_wnd_list->data;

View File

@ -26,7 +26,7 @@ e_grabinput_shutdown(void)
return 1;
}
EAPI void
EAPI int
e_grabinput_get(Ecore_X_Window mouse_win, int confine_mouse, Ecore_X_Window key_win)
{
if (grab_mouse_win)
@ -42,15 +42,29 @@ e_grabinput_get(Ecore_X_Window mouse_win, int confine_mouse, Ecore_X_Window key_
}
if (mouse_win)
{
int ret = 0;
if (confine_mouse)
ecore_x_pointer_confine_grab(mouse_win);
ret = ecore_x_pointer_confine_grab(mouse_win);
else
ecore_x_pointer_grab(mouse_win);
ret = ecore_x_pointer_grab(mouse_win);
if (!ret) return 0;
grab_mouse_win = mouse_win;
}
if (key_win)
{
ecore_x_keyboard_grab(key_win);
int ret = 0;
ret = ecore_x_keyboard_grab(key_win);
if (!ret)
{
if (grab_mouse_win)
{
ecore_x_pointer_ungrab();
grab_mouse_win = 0;
}
return 0;
}
grab_key_win = key_win;
}
}

View File

@ -17,7 +17,7 @@ typedef enum _E_Focus_Method
EAPI int e_grabinput_init(void);
EAPI int e_grabinput_shutdown(void);
EAPI void e_grabinput_get(Ecore_X_Window mouse_win, int confine_mouse, Ecore_X_Window key_win);
EAPI int e_grabinput_get(Ecore_X_Window mouse_win, int confine_mouse, Ecore_X_Window key_win);
EAPI void e_grabinput_release(Ecore_X_Window mouse_win, Ecore_X_Window key_win);
EAPI void e_grabinput_focus(Ecore_X_Window win, E_Focus_Method method);
EAPI double e_grabinput_last_focus_time_get(void);

View File

@ -127,3 +127,4 @@
#include "e_gadcon.h"
#include "e_shelf.h"
#include "e_tlist.h"
#include "e_widget_preview.h"

View File

@ -3,7 +3,6 @@
*/
#include "e.h"
//#include <Ecore_X.h>
#define BG_SET_DEFAULT_DESK 0
#define BG_SET_THIS_DESK 1
@ -117,10 +116,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
o = e_widget_button_add(evas, _("Select Another Image..."), NULL, _bg_config_dialog_cb_import, cfd, NULL);
e_widget_table_object_append(ot, o, 0, 2, 1, 1, 1, 0, 0, 0);
of = e_widget_framelist_add(evas, _("Background Preview"), 0);
e_widget_min_size_set(of, 320, 240);
e_widget_table_object_append(ot, of, 1, 0, 1, 2, 1, 1, 1, 1);
e_widget_framelist_object_append(of, im);
e_widget_table_object_append(ot, im, 1, 0, 1, 2, 1, 1, 1, 1);
if (_bg_file_monitor)
{
@ -183,10 +179,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
o = e_widget_button_add(evas, _("Select Another Image"), NULL, _bg_config_dialog_cb_import, cfd, NULL);
e_widget_table_object_append(ot, o, 0, 3, 1, 1, 1, 0, 0, 0);
of = e_widget_framelist_add(evas, _("Background Preview"), 0);
e_widget_min_size_set(of, 320, 240);
e_widget_table_object_append(ot, of, 1, 0, 1, 2, 1, 1, 1, 1);
e_widget_framelist_object_append(of, im);
e_widget_table_object_append(ot, im, 1, 0, 1, 2, 1, 1, 1, 1);
rg = e_widget_radio_group_new(&(cfdata->bg_method));
of = e_widget_framelist_add(evas, _("Set Background For"), 0);
@ -300,20 +293,23 @@ _load_bgs(E_Config_Dialog *cfd, Evas_Object *il)
c = strdup(f);
if (edje_object_file_set(o, f, "desktop/background"))
{
Evas_Object *o = NULL;
Evas_Object *ic = NULL;
if (!e_thumb_exists(c))
o = e_thumb_generate_begin(c, 48, 48, cfd->dia->win->evas, &o, NULL, NULL);
ic = e_thumb_generate_begin(c, 48, 48, cfd->dia->win->evas, &ic, NULL, NULL);
else
o = e_thumb_evas_object_get(c, cfd->dia->win->evas, 48, 48, 1);
ic = e_thumb_evas_object_get(c, cfd->dia->win->evas, 48, 48, 1);
e_widget_ilist_append(il, o, "Theme Background", _ilist_cb_bg_selected, cfd, "");
e_widget_ilist_append(il, ic, "Theme Background", _ilist_cb_bg_selected, cfd, "");
}
if (!e_config->desktop_default_background)
e_widget_ilist_selected_set(il, 0);
im = e_widget_image_add_from_object(cfd->dia->win->evas, bg_obj, 320, 240);
e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfd->dia->win->evas, 320, 240, 1));
im = e_widget_preview_add(cfd->dia->win->evas, 320, 240);
e_widget_preview_edje_set(im, f, "desktop/background");
evas_object_del(bg_obj);
// im = e_widget_preview_add_from_object(cfd->dia->win->evas, bg_obj, 320, 240);
// e_widget_preview_object_set(im, e_thumb_evas_object_get(c, cfd->dia->win->evas, 320, 240, 1));
evas_object_del(o);
ecore_evas_free(eebuf);
@ -350,13 +346,12 @@ _load_bgs(E_Config_Dialog *cfd, Evas_Object *il)
if ((e_config->desktop_default_background) &&
(!strcmp(e_config->desktop_default_background, full_path)))
{
Evas_Object *o = NULL;
e_widget_ilist_selected_set(il, i);
o = edje_object_add(cfd->dia->win->evas);
edje_object_file_set(o, e_config->desktop_default_background, "desktop/background");
im = e_widget_image_add_from_object(cfd->dia->win->evas, o, 320, 240);
e_widget_image_object_set(im, e_thumb_evas_object_get(full_path, cfd->dia->win->evas, 320, 240, 1));
im = e_widget_preview_add(cfd->dia->win->evas, 320, 240);
e_widget_preview_edje_set(im, e_config->desktop_default_background, "desktop/background");
// im = e_widget_preview_add_from_object(cfd->dia->win->evas, o, 320, 240);
// e_widget_preview_object_set(im, e_thumb_evas_object_get(full_path, cfd->dia->win->evas, 320, 240, 1));
}
i++;
}
@ -385,12 +380,15 @@ _ilist_cb_bg_selected(void *data)
if (!(cfdata->bg[0]))
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
e_widget_image_object_set(cfd->data, e_thumb_evas_object_get(strdup(theme), evas, 320, 240, 1));
e_widget_preview_edje_set(cfd->data, theme, "desktop/background");
// e_widget_preview_object_set(cfd->data, e_thumb_evas_object_get(strdup(theme), evas, 320, 240, 1));
}
else
{
e_widget_image_object_set(cfd->data, e_thumb_evas_object_get(cfdata->bg, evas, 320, 240, 1));
e_widget_preview_edje_set(cfd->data, cfdata->bg, "desktop/background");
// e_widget_preview_object_set(cfd->data, e_thumb_evas_object_get(cfdata->bg, evas, 320, 240, 1));
}
if (cfdata->current_bg)

View File

@ -341,11 +341,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
/* end: bkg list */
/* start: Desk Lock Window Preview */
ot1 = e_widget_frametable_add(evas, _("Desk Lock Window Preview"), 0);
{
e_widget_frametable_object_append(ot1, cfdata->preview_image, 0, 1, 1, 1, 1, 1, 1, 1);
}
e_widget_table_object_append(ot, ot1, 1, 0, 1, 1, 1, 1, 1, 1);
e_widget_table_object_append(ot, cfdata->preview_image, 1, 0, 1, 1, 1, 1, 1, 1);
/* end: Desk Lock Window Preview */
/* start: login box options */
@ -506,7 +503,7 @@ _e_desklock_zone_num_get()
static void
_load_bgs(E_Config_Dialog_Data *cfdata)
{
Evas_Object *bg_obj, *o, *ic, *im;
Evas_Object *o, *ic, *im;
Ecore_Evas *eebuf;
Evas *evasbuf;
Evas_List *bg_dirs, *bg;
@ -516,9 +513,6 @@ _load_bgs(E_Config_Dialog_Data *cfdata)
if (!cfdata || !cfdata->gui.bg_list)
return;
bg_obj = edje_object_add(cfdata->evas);
eebuf = ecore_evas_buffer_new(1, 1);
evasbuf = ecore_evas_get(eebuf);
@ -529,25 +523,25 @@ _load_bgs(E_Config_Dialog_Data *cfdata)
if (edje_object_file_set(o, f1, "desklock/background"))
{
Evas_Object *o = NULL;
if (!e_thumb_exists(c))
o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &o, NULL, NULL);
ic = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &ic, NULL, NULL);
else
o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
ic = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme DeskLock Background",
e_widget_ilist_append(cfdata->gui.bg_list, ic, "Theme DeskLock Background",
_ibg_list_cb_bg_selected, cfdata, DEF_DESKLOCK_BACKGROUND);
}
if (!e_config->desklock_background ||
!strcmp(e_config->desklock_background, DEF_DESKLOCK_BACKGROUND))
if ((!e_config->desklock_background) ||
(!strcmp(e_config->desklock_background, DEF_DESKLOCK_BACKGROUND)))
e_widget_ilist_selected_set(cfdata->gui.bg_list, 0);
im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
BG_PREVIEW_H, 1));
im = e_widget_preview_add(cfdata->evas, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_preview_edje_set(im, c, "desktop/background");
// im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
// e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
// BG_PREVIEW_H, 1));
evas_object_del(o);
ecore_evas_free(eebuf);
@ -565,26 +559,25 @@ _load_bgs(E_Config_Dialog_Data *cfdata)
c = strdup(f);
if (edje_object_file_set(o, f, "desktop/background"))
{
Evas_Object *o = NULL;
if (!e_thumb_exists(c))
o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &o, NULL, NULL);
ic = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &ic, NULL, NULL);
else
o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
ic = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme Background", _ibg_list_cb_bg_selected,
e_widget_ilist_append(cfdata->gui.bg_list, ic, "Theme Background", _ibg_list_cb_bg_selected,
cfdata, DEF_THEME_BACKGROUND);
}
if (e_config->desklock_background &&
strcmp(e_config->desklock_background, DEF_THEME_BACKGROUND) == 0)
if ((e_config->desklock_background) &&
(!strcmp(e_config->desklock_background, DEF_THEME_BACKGROUND)))
{
e_widget_ilist_selected_set(cfdata->gui.bg_list, 1);
im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
BG_PREVIEW_H, 1));
e_widget_ilist_selected_set(cfdata->gui.bg_list, 1);
im = e_widget_preview_add(cfdata->evas, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_preview_edje_set(im, c, "desktop/background");
// im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
// e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
// BG_PREVIEW_H, 1));
}
evas_object_del(o);
@ -626,17 +619,13 @@ _load_bgs(E_Config_Dialog_Data *cfdata)
if ((e_config->desklock_background) &&
(!strcmp(e_config->desklock_background, full_path)))
{
Evas_Object *o = NULL;
e_widget_ilist_selected_set(cfdata->gui.bg_list, i);
o = edje_object_add(cfdata->evas);
edje_object_file_set(o, e_config->desktop_default_background,
"desktop/background");
im = e_widget_image_add_from_object(cfdata->evas, o, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(full_path, cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H,
1));
e_widget_ilist_selected_set(cfdata->gui.bg_list, i);
im = e_widget_preview_add(cfdata->evas, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_preview_edje_set(im, full_path, "desktop/background");
// im = e_widget_image_add_from_object(cfdata->evas, o, BG_PREVIEW_W, BG_PREVIEW_H);
// e_widget_image_object_set(im, e_thumb_evas_object_get(full_path, cfdata->evas,
// BG_PREVIEW_W, BG_PREVIEW_H,
// 1));
}
i++;
}
@ -654,43 +643,50 @@ _load_bgs(E_Config_Dialog_Data *cfdata)
static void
_ibg_list_cb_bg_selected(void *data)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (cfdata->cur_bg[0])
{
if (strcmp(cfdata->cur_bg, DEF_DESKLOCK_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else if (strcmp(cfdata->cur_bg, DEF_THEME_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else
{
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(cfdata->cur_bg, cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
}
else
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (cfdata->cur_bg[0])
{
if (strcmp(cfdata->cur_bg, DEF_DESKLOCK_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_preview_edje_set(cfdata->preview_image, theme, "desktop/background");
// e_widget_image_object_set(cfdata->preview_image,
// e_thumb_evas_object_get(strdup(theme), cfdata->evas,
// BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else if (strcmp(cfdata->cur_bg, DEF_THEME_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
e_widget_preview_edje_set(cfdata->preview_image, theme, "desktop/background");
// e_widget_image_object_set(cfdata->preview_image,
// e_thumb_evas_object_get(strdup(theme), cfdata->evas,
// BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else
{
e_widget_preview_edje_set(cfdata->preview_image, cfdata->cur_bg, "desktop/background");
// e_widget_image_object_set(cfdata->preview_image,
// e_thumb_evas_object_get(cfdata->cur_bg, cfdata->evas,
// BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
}
else
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_preview_edje_set(cfdata->preview_image, theme, "desktop/background");
// e_widget_image_object_set(cfdata->preview_image,
// e_thumb_evas_object_get(strdup(theme), cfdata->evas,
// BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
}
static void

View File

@ -103,7 +103,8 @@ _e_config_theme_cb_standard(void *data)
const char *tmp;
d = data;
e_widget_image_object_set(d->cfd->data, e_thumb_evas_object_get(d->file, d->cfd->dia->win->evas, 160, 120, 1));
e_widget_preview_edje_set(d->cfd->data, d->file, "desktop/background");
// e_widget_image_object_set(d->cfd->data, e_thumb_evas_object_get(d->file, d->cfd->dia->win->evas, 160, 120, 1));
cfdata = d->cfd->cfdata;
if (cfdata->current_theme)
@ -197,8 +198,10 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
if (!(strcmp(themefile, cfdata->current_theme)))
{
e_widget_ilist_selected_set(il, i);
im = e_widget_image_add_from_object(evas, theme, 320, 240);
e_widget_image_object_set(im, e_thumb_evas_object_get(fulltheme, evas, 320, 240, 1));
im = e_widget_preview_add(evas, 320, 240);
e_widget_preview_edje_set(im, fulltheme, "desktop/background");
// im = e_widget_image_add_from_object(evas, theme, 320, 240);
// e_widget_image_object_set(im, e_thumb_evas_object_get(fulltheme, evas, 320, 240, 1));
}
free(noext);
i++;
@ -214,18 +217,18 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_ilist_go(il);
e_widget_min_size_set(il, 180, 40);
e_widget_table_object_append(o, il, 0, 0, 1, 2, 1, 1, 1, 1);
fr = e_widget_framelist_add(evas, _("Preview"), 0);
if (im == NULL)
{
snprintf(fulltheme, sizeof(fulltheme), PACKAGE_DATA_DIR"/data/themes/default.edj");
theme = e_thumb_generate_begin(fulltheme, 320, 240, evas, &theme, NULL, NULL);
im = e_widget_image_add_from_object(evas, theme, 320, 240);
e_widget_image_object_set(im, e_thumb_evas_object_get(fulltheme, evas, 320, 240, 1));
im = e_widget_preview_add(evas, 320, 240);
e_widget_preview_edje_set(im, fulltheme, "desktop/background");
// theme = e_thumb_generate_begin(fulltheme, 320, 240, evas, &theme, NULL, NULL);
// im = e_widget_image_add_from_object(evas, theme, 320, 240);
// e_widget_image_object_set(im, e_thumb_evas_object_get(fulltheme, evas, 320, 240, 1));
}
cfd->data = im;
e_widget_min_size_set(fr, 320, 240);
e_widget_table_object_append(o, fr, 1, 0, 1, 2, 1, 1, 1, 1);
e_widget_framelist_object_append(fr, im);
e_widget_table_object_append(o, im, 1, 0, 1, 2, 1, 1, 1, 1);
return o;
}

View File

@ -9,6 +9,8 @@ struct _E_Widget_Data
Evas_Object *img;
};
static void _e_wid_del_hook(Evas_Object *obj);
/* local subsystem functions */
/* externally accessible functions */
@ -19,6 +21,7 @@ e_widget_image_add_from_object(Evas *evas, Evas_Object *object, int minw, int mi
E_Widget_Data *wd;
obj = e_widget_add(evas);
e_widget_del_hook_set(obj, _e_wid_del_hook);
wd = calloc(1, sizeof(E_Widget_Data));
evas_object_show(object);
@ -52,6 +55,7 @@ e_widget_image_add_from_file(Evas *evas, char *file, int minw, int minh)
wd->img = o;
evas_object_show(o);
e_widget_data_set(obj, wd);
e_widget_can_focus_set(obj, 0);
e_widget_min_size_set(obj, minw, minh);
e_widget_sub_object_add(obj, o);
@ -99,3 +103,13 @@ e_widget_image_object_set(Evas_Object *obj, Evas_Object *o)
e_icon_object_set(wd->img, o);
evas_object_show(wd->img);
}
static void
_e_wid_del_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
free(wd);
}

View File

@ -0,0 +1,90 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
typedef struct _E_Widget_Data E_Widget_Data;
struct _E_Widget_Data
{
Evas_Object *o_frame, *img, *o_thumb;
};
static void _e_wid_del_hook(Evas_Object *obj);
/* local subsystem functions */
/* externally accessible functions */
EAPI Evas_Object *
e_widget_preview_add(Evas *evas, int minw, int minh)
{
Evas_Object *obj, *o;
E_Widget_Data *wd;
Evas_Coord mw, mh;
obj = e_widget_add(evas);
e_widget_del_hook_set(obj, _e_wid_del_hook);
wd = calloc(1, sizeof(E_Widget_Data));
o = edje_object_add(evas);
wd->o_frame = o;
e_theme_edje_object_set(o, "base/theme/widgets",
"widgets/preview");
evas_object_show(o);
e_widget_sub_object_add(obj, o);
e_widget_resize_object_set(obj, o);
o = e_livethumb_add(evas);
wd->img = o;
e_livethumb_vsize_set(o, minw * 2, minh * 2);
edje_extern_object_min_size_set(o, minw, minh);
edje_extern_object_max_size_set(o, minw, minh);
evas_object_show(o);
edje_object_part_swallow(wd->o_frame, "item", o);
e_widget_data_set(obj, wd);
e_widget_can_focus_set(obj, 0);
edje_object_size_min_calc(wd->o_frame, &mw, &mh);
e_widget_min_size_set(obj, mw, mh);
e_widget_sub_object_add(obj, o);
return obj;
}
EAPI int
e_widget_preview_file_set(Evas_Object *obj, char *file, char *key)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
if (wd->o_thumb) evas_object_del(wd->o_thumb);
wd->o_thumb = e_icon_add(e_livethumb_evas_get(wd->img));
e_icon_file_key_set(wd->o_thumb, file, key);
evas_object_show(wd->o_thumb);
e_livethumb_thumb_set(wd->img, wd->o_thumb);
return 1;
}
EAPI int
e_widget_preview_edje_set(Evas_Object *obj, char *file, char *group)
{
E_Widget_Data *wd;
int ret;
wd = e_widget_data_get(obj);
if (wd->o_thumb) evas_object_del(wd->o_thumb);
wd->o_thumb = edje_object_add(e_livethumb_evas_get(wd->img));
ret = edje_object_file_set(wd->o_thumb, file, group);
evas_object_show(wd->o_thumb);
e_livethumb_thumb_set(wd->img, wd->o_thumb);
return ret;
}
static void
_e_wid_del_hook(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
free(wd);
}

View File

@ -0,0 +1,14 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
#else
#ifndef E_WIDGET_PREVIEW_H
#define E_WIDGET_PREVIEW_H
EAPI Evas_Object *e_widget_preview_add(Evas *evas, int minw, int minh);
EAPI int e_widget_preview_file_set(Evas_Object *obj, char *file, char *key);
EAPI int e_widget_preview_edje_set(Evas_Object *obj, char *file, char *group);
#endif
#endif