de-uglify desklock gfx - make it ask for your passowrd if you havent set one

up (config dialog instead of lock) and make it a menu item for obvious access
:)


SVN revision: 20808
This commit is contained in:
Carsten Haitzler 2006-02-27 06:35:56 +00:00
parent 6491c0bad9
commit 62ca6a2cbc
5 changed files with 512 additions and 415 deletions

View File

@ -1,213 +1,210 @@
images { images {
image, "e17_entry_cursor.png" COMP; image: "e17_brushed.png" COMP;
image, "e17_brushed.png" COMP; image: "e17_"SM"reflection_shadow_overlay.png" LOSSY 90;
image, "e17_logo.png" COMP; image: "e17_entry_cursor.png" COMP;
image, "e17_gadman_overlay.png" COMP; image: "e17_logo.png" COMP;
image: "e17_gadman_overlay.png" COMP;
} }
group group {
{ name, "widgets/desklock/main";
name, "widgets/desklock/main"; parts
min, 640 480; {
part {
parts name: "background_image";
{ description {
part state: "default" 0.0;
{ image {
name, "background"; normal: "e17_brushed.png";
type, IMAGE; }
mouse_events, 0; fill {
size {
description relative: 0 0;
{ offset: 400 300;
state, "default" 0.0; }
}
rel1 }
{
relative, 0.0 0.0;
offset, 0 0;
}
rel2
{
relative, 1.0 1.0;
offset, -1 -1;
}
image
{
normal, "e17_brushed.png";
}
} }
} part {
part name: "reflection_shadow_overlay";
{ description {
name: "logo"; state: "default" 0.0;
mouse_events, 0; image {
description normal: "e17_"SM"reflection_shadow_overlay.png";
{ }
state, "default" 0.0; }
min, 64 64;
max, 64 64;
//align, 0.5 0.0;
rel1
{
relative, 0.45 0.5;
offset, 0 0;
}
rel2
{
relative, 0.45 0.5;
offset, 0 0;
}
image
{
normal, "e17_logo.png";
}
} }
} part
part
{
name: "text_label1";
type: TEXT;
effect: SHADOW;
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1
{ {
relative, 1.0 0.0; name: "logo";
offset, 20 0; mouse_events: 0;
to, "logo"; description
{
state: "default" 0.0;
min: 64 64;
max: 64 64;
//align: 0.5 0.0;
rel1
{
relative: 0.45 0.5;
offset: 0 0;
}
rel2
{
relative: 0.45 0.5;
offset: 0 0;
}
image
{
normal: "e17_logo.png";
}
}
} }
rel2 part
{ {
relative, 1.0 0.3; name: "label";
offset, 0 0; type: TEXT;
to, "logo"; effect: SHADOW;
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1
{
relative: 1.0 0.0;
offset: 20 0;
to: "logo";
}
rel2
{
relative: 1.0 0.3;
offset: 0 0;
to: "logo";
}
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "Please enter your unlock password";
font: "Edje-Vera-Bold";
size: 10;
align: 0.0 0.5;
min: 1 1;
}
}
} }
part
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "Please enter your password to unlock:";
font: "Edje-Vera-Bold";
size: 10;
align: 0.0 0.5;
min: 1 1;
}
}
}
part
{
name, "passwd_border";
mouse_events, 0;
description
{
state, "default" 0.0;
rel1
{ {
relative, 1.0 0.3; name: "passwd_entry_clip";
offset, 0 0; type: RECT;
to, "logo"; mouse_events: 0;
description
{
state: "default" 0.0;
visible: 1;
rel1
{
relative: 0.0 0.0;
offset: 10 10;
to: "passwd_border";
}
rel2
{
relative: 1.0 1.0;
offset: -17 -10;
to: "passwd_border";
}
}
} }
rel2 part
{ {
relative, 5.0 0.9; name: "passwd";
offset, 0 0; type: TEXT;
to, "logo"; effect: SHADOW;
clip_to: "passwd_entry_clip";
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1
{
relative: 0.0 0.0;
offset: 0 0;
to: "passwd_entry_clip";
}
rel2
{
relative: 0.0 1.0;
offset: 0 0;
to: "passwd_entry_clip";
}
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "****";
font: "Edje-Vera-Bold";
size: 16;
align: 0.0 0.5;
min: 1 1;
text_class: "desklock_passwd";
}
}
} }
image part
{ {
normal, "e17_gadman_overlay.png"; name: "cursor";
mouse_events: 0;
clip_to: "passwd_entry_clip";
description {
state: "default" 0.0;
min: 16 16;
max: 16 16;
align: 0.0 0.5;
fixed: 1 1;
rel1 {
relative: 1.0 0.0;
offset: 0 -2;
to: "passwd";
}
rel2 {
relative: 1.0 0.9;
offset: 0 0;
to: "passwd";
}
image {
normal: "e17_entry_cursor.png";
}
}
} }
} part
}
part
{
name, "passwd_entry_clip";
type, RECT;
mouse_events, 0;
description
{
state, "default" 0.0;
visible, 1;
rel1
{ {
relative, 0.0 0.0; name: "passwd_border";
offset, 10 10; mouse_events: 0;
to, "passwd_border"; description
{
state: "default" 0.0;
rel1
{
relative: 1.0 0.3;
offset: 0 0;
to: "logo";
}
rel2
{
relative: 5.0 0.9;
offset: 0 0;
to: "logo";
}
image
{
normal: "e17_gadman_overlay.png";
border: 15 15 15 15;
}
}
} }
rel2 }
{ }
relative, 1.0 1.0;
offset, -17 -10;
to, "passwd_border";
}
}
}
part
{
name, "passwd";
type, TEXT;
effect, SOFT_SHADOW;
clip_to, "passwd_entry_clip";
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1
{
relative, 0.0 0.0;
offset, 0 0;
to, "passwd_entry_clip";
}
rel2
{
relative, 0.0 1.0;
offset, 0 0;
to, "passwd_entry_clip";
}
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "****";
font: "Edje-Vera-Bold";
size: 16;
align: 0.0 0.5;
min: 1 1;
text_class: "desklock_passwd";
}
}
}
part
{
name, "cursor";
mouse_events, 0;
clip_to, "passwd_entry_clip";
description {
state: "default" 0.0;
min: 16 16;
max: 16 16;
align: 0.0 0.5;
fixed: 1 1;
rel1 {
relative: 1.0 0.0;
offset: 0 -2;
to: "passwd";
}
rel2 {
relative: 1.0 0.9;
offset: 0 0;
to: "passwd";
}
image {
normal: "e17_entry_cursor.png";
}
}
}
}
}

View File

@ -86,5 +86,56 @@ group {
} }
} }
} }
part {
name: "drag";
mouse_events: 1;
type: RECT;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 2 2;
}
rel2 {
relative: 1.0 0.0;
offset: -3 5;
}
color: 255 0 0 100;
}
}
part {
name: "resize_l";
mouse_events: 1;
type: RECT;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 2 6;
}
rel2 {
relative: 0.0 1.0;
offset: 5 -7;
}
color: 0 0 255 100;
}
}
part {
name: "resize_r";
mouse_events: 1;
type: RECT;
description {
state: "default" 0.0;
rel1 {
relative: 1.0 0.0;
offset: -6 6;
}
rel2 {
relative: 1.0 1.0;
offset: -3 -7;
}
color: 0 0 255 100;
}
}
} }
} }

View File

@ -1,27 +1,24 @@
#include "e.h" #include "e.h"
#define ELOCK_POPUP_LAYER 10000 #define ELOCK_POPUP_LAYER 10000
#define PASSWD_LEN 256 #define PASSWD_LEN 256
/**************************** private data ******************************/ /**************************** private data ******************************/
typedef struct _E_Desklock_Data E_Desklock_Data; typedef struct _E_Desklock_Data E_Desklock_Data;
typedef struct _E_Desklock_Popup_Data E_Desklock_Popup_Data; typedef struct _E_Desklock_Popup_Data E_Desklock_Popup_Data;
struct _E_Desklock_Popup_Data struct _E_Desklock_Popup_Data
{ {
E_Popup *popup_wnd; E_Popup *popup_wnd;
Evas_Object *bg_object; Evas_Object *bg_object;
}; };
struct _E_Desklock_Data struct _E_Desklock_Data
{ {
Evas_List *elock_wnd_list; Evas_List *elock_wnd_list;
Ecore_X_Window elock_wnd; Ecore_X_Window elock_wnd;
Evas_List *handlers; Evas_List *handlers;
char passwd[PASSWD_LEN]; char passwd[PASSWD_LEN];
}; };
static E_Desklock_Data *edd = NULL; static E_Desklock_Data *edd = NULL;
@ -41,211 +38,228 @@ static void _e_desklock_delete();
EAPI int EAPI int
e_desklock_show(void) e_desklock_show(void)
{ {
Evas_List *managers, *l, *l2, *l3; Evas_List *managers, *l, *l2, *l3;
//E_Zone *zone = NULL; int m = 0, c = 0, z = 0;
int m = 0, c = 0, z = 0; E_Desklock_Popup_Data *edp;
E_Desklock_Popup_Data *edp; if (!e_config->desklock_personal_passwd)
{
if (!edd) E_Zone *zone;
{
edd = E_NEW(E_Desklock_Data, 1); zone = e_util_zone_current_get(e_manager_current_get());
if (!edd) return 0; if (zone)
edd->elock_wnd_list = NULL; {
edd->elock_wnd = 0; E_Config_Dialog *cfd;
edd->handlers = NULL;
edd->passwd[0] = 0; cfd = e_int_config_desklock(zone->container);
} }
return 0;
managers = e_manager_list(); }
for (l = managers; l; l = l->next)
{ if (!edd)
E_Manager *man; {
m ++; edd = E_NEW(E_Desklock_Data, 1);
if (!edd) return 0;
man = l->data; edd->elock_wnd_list = NULL;
for (l2 = man->containers; l2; l2 = l2->next) edd->elock_wnd = 0;
{ edd->handlers = NULL;
E_Container *con; edd->passwd[0] = 0;
}
c ++;
managers = e_manager_list();
con = l2->data; for (l = managers; l; l = l->next)
for (l3 = con->zones; l3; l3 = l3->next) {
{ E_Manager *man;
E_Zone *zone;
m++;
zone = l3->data; man = l->data;
if (!edd->elock_wnd) for (l2 = man->containers; l2; l2 = l2->next)
{ {
edd->elock_wnd = ecore_x_window_input_new(zone->container->win, 0, 0, 1, 1); E_Container *con;
ecore_x_window_show(edd->elock_wnd);
e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd); c++;
}
con = l2->data;
edp = E_NEW(E_Desklock_Popup_Data, 1); for (l3 = con->zones; l3; l3 = l3->next)
if (edp) {
{ E_Zone *zone;
edp->popup_wnd = e_popup_new(zone, 0, 0, zone->w, zone->h);
evas_event_feed_mouse_move(edp->popup_wnd->evas, -1000000, -1000000, zone = l3->data;
ecore_x_current_time_get(), NULL); if (!edd->elock_wnd)
{
e_popup_layer_set(edp->popup_wnd, ELOCK_POPUP_LAYER); edd->elock_wnd = ecore_x_window_input_new(zone->container->win, 0, 0, 1, 1);
ecore_x_window_show(edd->elock_wnd);
evas_event_freeze(edp->popup_wnd->evas); e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd);
edp->bg_object = edje_object_add(edp->popup_wnd->evas); }
//FIXME: This should come from config file
e_theme_edje_object_set(edp->bg_object, "base/theme/desklock", edp = E_NEW(E_Desklock_Popup_Data, 1);
"widgets/desklock/main"); if (edp)
{
evas_object_move(edp->bg_object, 0, 0); edp->popup_wnd = e_popup_new(zone, 0, 0, zone->w, zone->h);
evas_object_resize(edp->bg_object, zone->w, zone->h); evas_event_feed_mouse_move(edp->popup_wnd->evas, -1000000, -1000000,
evas_object_show(edp->bg_object); ecore_x_current_time_get(), NULL);
e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object);
evas_event_thaw(edp->popup_wnd->evas); e_popup_layer_set(edp->popup_wnd, ELOCK_POPUP_LAYER);
e_popup_show(edp->popup_wnd); evas_event_freeze(edp->popup_wnd->evas);
edp->bg_object = edje_object_add(edp->popup_wnd->evas);
edd->elock_wnd_list = evas_list_append(edd->elock_wnd_list, edp); //FIXME: This should come from config file
} e_theme_edje_object_set(edp->bg_object,
} "base/theme/desklock",
} "widgets/desklock/main");
}
evas_object_move(edp->bg_object, 0, 0);
/* handlers */ evas_object_resize(edp->bg_object, zone->w, zone->h);
edd->handlers = evas_list_append(edd->handlers, evas_object_show(edp->bg_object);
ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, edje_object_part_text_set(edp->bg_object, "title",
_e_desklock_cb_key_down, NULL)); _("Please enter your unlock password"));
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_DOWN, e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object);
_e_desklock_cb_mouse_down, NULL)); evas_event_thaw(edp->popup_wnd->evas);
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, e_popup_show(edp->popup_wnd);
_e_desklock_cb_mouse_up, NULL));
edd->handlers = evas_list_append(edd->handlers, edd->elock_wnd_list = evas_list_append(edd->elock_wnd_list, edp);
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_WHEEL, }
_e_desklock_cb_mouse_wheel, }
NULL)); }
//elock_wnd_idler = ecore_idler_add(_e_desklock_idler, NULL); }
_e_desklock_passwd_update(); /* handlers */
return 1; edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN,
_e_desklock_cb_key_down, NULL));
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_DOWN,
_e_desklock_cb_mouse_down, NULL));
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
_e_desklock_cb_mouse_up, NULL));
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_WHEEL,
_e_desklock_cb_mouse_wheel,
NULL));
//elock_wnd_idler = ecore_idler_add(_e_desklock_idler, NULL);
_e_desklock_passwd_update();
return 1;
} }
EAPI void EAPI void
e_desklock_hide(void) e_desklock_hide(void)
{ {
E_Desklock_Popup_Data *edp; E_Desklock_Popup_Data *edp;
if (!edd) return; if (!edd) return;
while (edd->elock_wnd_list) while (edd->elock_wnd_list)
{ {
edp = edd->elock_wnd_list->data; edp = edd->elock_wnd_list->data;
if (edp) if (edp)
{ {
e_popup_hide(edp->popup_wnd); e_popup_hide(edp->popup_wnd);
evas_event_freeze(edp->popup_wnd->evas); evas_event_freeze(edp->popup_wnd->evas);
evas_object_del(edp->bg_object); evas_object_del(edp->bg_object);
evas_event_thaw(edp->popup_wnd->evas); evas_event_thaw(edp->popup_wnd->evas);
e_object_del(E_OBJECT(edp->popup_wnd)); e_object_del(E_OBJECT(edp->popup_wnd));
E_FREE(edp); E_FREE(edp);
} }
edd->elock_wnd_list = evas_list_remove_list(edd->elock_wnd_list, edd->elock_wnd_list); edd->elock_wnd_list = evas_list_remove_list(edd->elock_wnd_list, edd->elock_wnd_list);
} }
while (edd->handlers) while (edd->handlers)
{ {
ecore_event_handler_del(edd->handlers->data); ecore_event_handler_del(edd->handlers->data);
edd->handlers = evas_list_remove_list(edd->handlers, edd->handlers); edd->handlers = evas_list_remove_list(edd->handlers, edd->handlers);
} }
e_grabinput_release(edd->elock_wnd, edd->elock_wnd); e_grabinput_release(edd->elock_wnd, edd->elock_wnd);
ecore_x_window_del(edd->elock_wnd); ecore_x_window_del(edd->elock_wnd);
E_FREE(edd); E_FREE(edd);
edd = NULL; edd = NULL;
} }
static int static int
_e_desklock_cb_key_down(void *data, int type, void *event) _e_desklock_cb_key_down(void *data, int type, void *event)
{ {
Ecore_X_Event_Key_Down *ev; Ecore_X_Event_Key_Down *ev;
ev = event; ev = event;
if (ev->win != edd->elock_wnd) return 1; if (ev->win != edd->elock_wnd) return 1;
if (!strcmp(ev->keysymbol, "Escape")) if (!strcmp(ev->keysymbol, "Escape"))
; ;
else if (!strcmp(ev->keysymbol, "KP_Enter")) else if (!strcmp(ev->keysymbol, "KP_Enter"))
{ {
// here we have to go to auth // here we have to go to auth
if (strcmp(edd->passwd, e_config->desklock_personal_passwd) == 0) if (!strcmp(edd->passwd, e_config->desklock_personal_passwd))
{ {
e_desklock_hide(); e_desklock_hide();
return 1; return 1;
} }
else else
; // report about invalid password ; // report about invalid password
memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN); memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN);
_e_desklock_passwd_update(); _e_desklock_passwd_update();
} }
else if (!strcmp(ev->keysymbol, "Return")) else if (!strcmp(ev->keysymbol, "Return"))
{ {
// here we have to go to auth // here we have to go to auth
if (strcmp(edd->passwd, e_config->desklock_personal_passwd) == 0) if ((e_config->desklock_personal_passwd) &&
{ (!strcmp(edd->passwd, e_config->desklock_personal_passwd)))
e_desklock_hide(); {
return 1; e_desklock_hide();
} return 1;
else }
; // report about invalid password else
; // report about invalid password
memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN);
_e_desklock_passwd_update(); memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN);
} _e_desklock_passwd_update();
else if (!strcmp(ev->keysymbol, "BackSpace")) }
_e_desklock_backspace(); else if (!strcmp(ev->keysymbol, "BackSpace"))
else if (!strcmp(ev->keysymbol, "Delete")) _e_desklock_backspace();
_e_desklock_delete(); else if (!strcmp(ev->keysymbol, "Delete"))
else _e_desklock_delete();
{ else
// here we have to grab a password {
if (ev->key_compose) // here we have to grab a password
{ if (ev->key_compose)
if ((strlen(edd->passwd) < (PASSWD_LEN - strlen(ev->key_compose)))) {
{ if ((strlen(edd->passwd) < (PASSWD_LEN - strlen(ev->key_compose))))
strcat(edd->passwd, ev->key_compose); {
_e_desklock_passwd_update(); strcat(edd->passwd, ev->key_compose);
} _e_desklock_passwd_update();
} }
} }
}
return 1;
return 1;
} }
static int static int
_e_desklock_cb_mouse_down(void *data, int type, void *event) _e_desklock_cb_mouse_down(void *data, int type, void *event)
{ {
return 1; return 1;
} }
static int static int
_e_desklock_cb_mouse_up(void *data, int type, void *event) _e_desklock_cb_mouse_up(void *data, int type, void *event)
{ {
return 1; return 1;
} }
static int static int
_e_desklock_cb_mouse_wheel(void *data, int type, void *event) _e_desklock_cb_mouse_wheel(void *data, int type, void *event)
{ {
return 1; return 1;
} }
static int static int
_e_desklock_idler(void *data) _e_desklock_idler(void *data)
{ {
return 1; return 1;
} }
EAPI int EAPI int
@ -261,38 +275,37 @@ e_desklock_init(void)
//#undef T //#undef T
//#undef D //#undef D
return 1; return 1;
} }
EAPI int EAPI int
e_desklock_shutdown(void) e_desklock_shutdown(void)
{ {
e_desklock_hide(); e_desklock_hide();
return 1; return 1;
} }
static void static void
_e_desklock_passwd_update() _e_desklock_passwd_update()
{ {
int ii; int ii;
char passwd_hidden[PASSWD_LEN * 3]=""; char passwd_hidden[PASSWD_LEN * 3]="";
E_Desklock_Popup_Data *edp; E_Desklock_Popup_Data *edp;
Evas_List *l; Evas_List *l;
if (!edd) return; if (!edd) return;
for (ii = 0; ii < strlen(edd->passwd); ii ++) for (ii = 0; ii < strlen(edd->passwd); ii ++)
{ {
passwd_hidden[ii] = '*'; passwd_hidden[ii] = '*';
passwd_hidden[ii+1] = 0; passwd_hidden[ii+1] = 0;
} }
for (l = edd->elock_wnd_list; l; l = l->next) for (l = edd->elock_wnd_list; l; l = l->next)
{ {
edp = l->data; edp = l->data;
edje_object_part_text_set(edp->bg_object, "passwd", passwd_hidden); edje_object_part_text_set(edp->bg_object, "passwd", passwd_hidden);
} }
return;
} }
static void static void
@ -301,18 +314,19 @@ _e_desklock_backspace()
int len, val, pos; int len, val, pos;
if (!edd) return; if (!edd) return;
len = strlen(edd->passwd); len = strlen(edd->passwd);
if (len > 0) if (len > 0)
{ {
pos = evas_string_char_prev_get(edd->passwd, len, &val); pos = evas_string_char_prev_get(edd->passwd, len, &val);
if ((pos < len) && (pos >= 0)) if ((pos < len) && (pos >= 0))
{ {
edd->passwd[pos] = 0; edd->passwd[pos] = 0;
_e_desklock_passwd_update(); _e_desklock_passwd_update();
} }
} }
} }
static void static void
_e_desklock_delete() _e_desklock_delete()
{ {

View File

@ -25,6 +25,8 @@ static void _e_int_menus_main_del_hook (void *obj);
static void _e_int_menus_main_about (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_main_about (void *data, E_Menu *m, E_Menu_Item *mi);
static int _e_int_menus_main_run_defer_cb (void *data); static int _e_int_menus_main_run_defer_cb (void *data);
static void _e_int_menus_main_run (void *data, E_Menu *m, E_Menu_Item*mi); static void _e_int_menus_main_run (void *data, E_Menu *m, E_Menu_Item*mi);
static int _e_int_menus_main_lock_defer_cb (void *data);
static void _e_int_menus_main_lock (void *data, E_Menu *m, E_Menu_Item*mi);
static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_apps_scan (E_Menu *m); static void _e_int_menus_apps_scan (E_Menu *m);
@ -401,6 +403,22 @@ _e_int_menus_main_run(void *data, E_Menu *m, E_Menu_Item *mi)
ecore_idle_enterer_add(_e_int_menus_main_run_defer_cb, m->zone); ecore_idle_enterer_add(_e_int_menus_main_run_defer_cb, m->zone);
} }
/* FIXME: this is a workaround for menus' haveing a key grab ANd exebuf
* wanting one too
*/
static int
_e_int_menus_main_lock_defer_cb(void *data)
{
e_desklock_show();
return 0;
}
static void
_e_int_menus_main_lock(void *data, E_Menu *m, E_Menu_Item *mi)
{
ecore_idle_enterer_add(_e_int_menus_main_lock_defer_cb, m->zone);
}
static void static void
_e_int_menus_main_fm(void *data, E_Menu *m, E_Menu_Item *mi) _e_int_menus_main_fm(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
@ -540,6 +558,15 @@ _e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
E_Menu *root; E_Menu *root;
e_menu_pre_activate_callback_set(m, NULL, NULL); e_menu_pre_activate_callback_set(m, NULL, NULL);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Lock Screen"));
e_util_menu_item_edje_icon_set(mi, "enlightenment/lock");
e_menu_item_callback_set(mi, _e_int_menus_main_lock, NULL);
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
root = e_menu_root_get(m); root = e_menu_root_get(m);
if ((root) && (root->zone)) if ((root) && (root->zone))
{ {

View File

@ -9,6 +9,13 @@ static void _e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Conf
static Evas_List *shelves = NULL; static Evas_List *shelves = NULL;
static int shelf_id = 0; static int shelf_id = 0;
/* FIXME: shelves need to do this:
* 1. allow them to be moved, resized etc. etc.
* 2. have a configuration panel per shelf to select if its inline, layer etc.
* 3. catch all right clicks not on modules for right click context menu
* 4. a global config dialog that lists shelves u have to configure them
*/
/* externally accessible functions */ /* externally accessible functions */
EAPI int EAPI int
e_shelf_init(void) e_shelf_init(void)
@ -131,7 +138,8 @@ e_shelf_zone_new(E_Zone *zone, char *name, char *style, int popup, int layer)
snprintf(buf, sizeof(buf), "shelf/%s/base", es->style); snprintf(buf, sizeof(buf), "shelf/%s/base", es->style);
evas_object_resize(es->o_base, es->w, es->h); evas_object_resize(es->o_base, es->w, es->h);
if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf)) if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf))
e_theme_edje_object_set(es->o_base, "base/theme/shelf", "shelf/default/base"); e_theme_edje_object_set(es->o_base, "base/theme/shelf",
"shelf/default/base");
if (es->popup) if (es->popup)
{ {
evas_object_show(es->o_base); evas_object_show(es->o_base);