entrance: many improvment

* improve pam login
* fix some profile mistake when login an user
* use EINA_UNUSED
* code refactoring
* remove session login command
devs/bu5hm4n/develop
Michael Bouchaud 9 years ago
parent 91415dbc1d
commit 539a5d93a2
  1. 7
      data/entrance.conf
  2. 16
      data/themes/default/default.edc
  3. 203
      src/bin/entrance_conf.c
  4. 14
      src/bin/entrance_connect.c
  5. 2
      src/bin/entrance_connect.h
  6. 36
      src/bin/entrance_fill.c
  7. 13
      src/bin/entrance_fill.h
  8. 60
      src/bin/entrance_gui.c
  9. 1
      src/bin/entrance_gui.h
  10. 52
      src/bin/entrance_login.c
  11. 2
      src/bin/entrance_login.h
  12. 6
      src/bin/entrance_test.c
  13. 9
      src/daemon/entrance.c
  14. 8
      src/daemon/entrance_action.c
  15. 3
      src/daemon/entrance_config.c
  16. 1
      src/daemon/entrance_config.h
  17. 47
      src/daemon/entrance_history.c
  18. 21
      src/daemon/entrance_history.h
  19. 12
      src/daemon/entrance_pam.c
  20. 20
      src/daemon/entrance_server.c
  21. 33
      src/daemon/entrance_session.c
  22. 1
      src/daemon/entrance_session.h
  23. 6
      src/daemon/entrance_test.c
  24. 2
      src/daemon/entrance_xserver.c
  25. 78
      src/event/entrance_event.c
  26. 34
      src/event/entrance_event.h

@ -14,8 +14,6 @@ group "Entrance_Config" struct {
/* Commands executed when starting a session */
value "session_start" string: "/usr/bin/sessreg -a -l :0.0";
/* Command executed when login. Warning xsession must be set to 0 */
value "session_login" string: "/bin/bash -login";
/* Commands executed when exiting a session */
value "session_stop" string: "/usr/bin/sessreg -d -l :0.0";
@ -35,8 +33,8 @@ group "Entrance_Config" struct {
/* Enable numlock TODO support it */
value "numlock" uchar: 1;
/** Bool to determine if entrance must login user with the session_login command
* or use xdg desktop and determine the command to use
/** Bool to determine if entrance could use the xdg desktop files and
* determine the command to use
* 1 = desktop_file_cmd, 0 = session_login */
value "xsessions" uchar: 1;
@ -47,7 +45,6 @@ group "Entrance_Config" struct {
/* The name of the user to use when autologin are enabled */
value "userlogin" string: "myusername";
/* Lock file */
value "lockfile" string: "/var/run/entrance.pid";

@ -413,9 +413,6 @@ collections {
group { name: "entrance/conf/login";
parts {
alias: "entrance.login" "login:entrance.login";
alias: "entrance.password" "login:entrance.password";
alias: "entrance.xsessions" "login:entrance.xsessions";
part { name: "base";
type: RECT;
description { state: "default" 0.0;
@ -439,8 +436,8 @@ collections {
visible: 0;
}
}
part { name: "login";
type: GROUP;
part { name: "entrance.login";
type: SWALLOW;
description { state: "default" 0.0;
visible: 1;
}
@ -449,6 +446,15 @@ collections {
}
}
}
programs {
program { name: "conf_enabled";
signal: "entrance,conf_user,enabled";
source: "";
action: STATE_SET "hidden" 0.0;
target: "hover";
target: "entrance.login";
}
}
}
group { name: "entrance/user";

@ -22,13 +22,19 @@ typedef struct Entrance_Int_Conf_
struct
{
const char *user;
Entrance_Login *orig;
struct
{
Evas_Object *preview;
const char *path;
const char *group;
} bg;
struct
{
const char *path;
const char *group;
} image;
const char *lsess;
Eina_Bool remember_session : 1;
} user;
@ -47,8 +53,12 @@ static char *_entrance_conf_bg_text_get(void *data, Evas_Object *obj, const char
static Evas_Object *_entrance_conf_bg_content_get(void *data, Evas_Object *obj, const char *part);
static Eina_Bool _entrance_conf_bg_state_get(void *data, Evas_Object *obj, const char *part);
static void _entrance_conf_bg_sel(void *data, Evas_Object *obj, void *event_info);
static Eina_Bool _entrance_conf_bg_fill_cb(void *data, Elm_Object_Item *it);
static void _entrance_conf_user_bg_sel(void *data, Evas_Object *obj, void *event_info);
static void _entrance_conf_changed();
static void _entrance_conf_apply();
static Evas_Object *_entrance_conf_user_build(Evas_Object *obj);
static void _entrance_conf_user_build_cb(Evas_Object *t, const char *user);
static Entrance_Fill *_entrance_background_fill = NULL;
static Entrance_Int_Conf *_entrance_int_conf = NULL;
@ -101,7 +111,6 @@ _entrance_conf_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
{
Entrance_Conf_Background *cbg;
cbg = elm_object_item_data_get(event_info);
fprintf(stderr, "%s %s\n", cbg->path, cbg->group);
if (!elm_layout_file_set(_entrance_int_conf->bg.preview,
cbg->path, cbg->group))
{
@ -113,6 +122,43 @@ _entrance_conf_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
_entrance_conf_changed();
}
static Eina_Bool
_entrance_conf_bg_fill_cb(void *data, Elm_Object_Item *it)
{
Entrance_Conf_Background *cbg;
const char *bg_path, *bg_group;
cbg = data;
entrance_gui_background_get(&bg_path, &bg_group);
if ((cbg->path)
&& (cbg->group)
&& (bg_path)
&& (bg_group)
&& (!strcmp(cbg->path, bg_path))
&& (!strcmp(cbg->group, bg_group)))
{
elm_genlist_item_selected_set(it, EINA_TRUE);
return EINA_TRUE;
}
return EINA_FALSE;
}
static void
_entrance_conf_user_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Entrance_Conf_Background *cbg;
cbg = elm_object_item_data_get(event_info);
if (!elm_layout_file_set(_entrance_int_conf->user.bg.preview,
cbg->path, cbg->group))
{
PT("Error on loading ");
fprintf(stderr, "%s %s\n", cbg->path, cbg->group);
}
_entrance_int_conf->user.bg.path = cbg->path;
_entrance_int_conf->user.bg.group = cbg->group;
_entrance_conf_changed();
}
/* vkbd */
static void
_entrance_conf_vkbd_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
@ -144,7 +190,7 @@ _entrance_conf_ok_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event
}
static void
_entrance_conf_apply_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
_entrance_conf_apply_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
_entrance_conf_apply();
_entrance_conf_changed();
@ -187,7 +233,6 @@ _entrance_conf_backgrounds_get(Evas_Object *obj, const char *user)
entrance_gui_stringlist_free(list);
evas_object_del(o);
//TODO parse share/entrance/background
it = eina_file_ls(PACKAGE_DATA_DIR"/backgrounds");
EINA_ITERATOR_FOREACH(it, str)
{
@ -200,6 +245,7 @@ _entrance_conf_backgrounds_get(Evas_Object *obj, const char *user)
snprintf(buf, sizeof(buf),
"entrance/background/%s", str);
cbg->path = str;
/* TODO use entrance/desktop/background or e/desktop/background */
cbg->group = eina_stringshare_add("e/desktop/background");
{
char *name, *p;
@ -232,6 +278,15 @@ _entrance_conf_apply()
conf.bg.group = _entrance_int_conf->bg.group;
conf.vkbd_enabled = _entrance_int_conf->vkbd_enabled;
if (_entrance_int_conf->scale != elm_config_scale_get())
{
elm_config_scale_set(_entrance_int_conf->scale);
elm_config_all_flush();
}
if (_entrance_int_conf->theme != entrance_gui_theme_name_get())
{
entrance_gui_theme_name_set(_entrance_int_conf->theme);
}
entrance_gui_conf_set(&conf);
entrance_connect_conf_send(&conf);
}
@ -240,7 +295,7 @@ _entrance_conf_apply()
static Evas_Object *
_entrance_conf_build(Evas_Object *obj)
{
Evas_Object *t, *bx, *hbx, *o;
Evas_Object *t, *bx, *hbx, *o, *gl;
Eina_List *l;
int j = 0;
@ -262,22 +317,18 @@ _entrance_conf_build(Evas_Object *obj)
elm_table_pack(t, hbx, 0, j, 2, 3);
evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
o = elm_genlist_add(hbx);
elm_scroller_bounce_set(o, EINA_FALSE, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
l = _entrance_conf_backgrounds_get(o, NULL);
entrance_fill(o, _entrance_background_fill,
l, _entrance_conf_bg_sel, o);
eina_list_free(l);
elm_box_pack_end(hbx, o);
evas_object_show(o);
gl = elm_genlist_add(hbx);
elm_scroller_bounce_set(gl, EINA_FALSE, EINA_TRUE);
evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(hbx, gl);
evas_object_show(gl);
bx = elm_box_add(hbx);
elm_box_pack_end(hbx, bx);
evas_object_show(bx);
o = elm_layout_add(hbx);
elm_box_pack_end(bx, o);
_entrance_int_conf->bg.preview = o;
elm_box_pack_end(bx, o);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(o);
@ -288,6 +339,10 @@ _entrance_conf_build(Evas_Object *obj)
evas_object_show(o);
evas_object_show(hbx);
j += 3;
l = _entrance_conf_backgrounds_get(gl, NULL);
entrance_fill(gl, _entrance_background_fill,
l, _entrance_conf_bg_fill_cb, _entrance_conf_bg_sel, o);
eina_list_free(l);
/* Touch Screen */
o = elm_label_add(t);
@ -360,20 +415,48 @@ _entrance_conf_build(Evas_Object *obj)
return t;
}
static void
_entrance_conf_user_auth(void *data, const char *user, Eina_Bool granted)
{
Evas_Object *t;
if (granted)
{
t = elm_object_part_content_get(data, "entrance.conf");
_entrance_conf_user_build_cb(t, user);
elm_object_signal_emit(data, "entrance,conf_user,enabled", "");
}
}
static Evas_Object *
_entrance_conf_user_build(Evas_Object *obj)
{
Evas_Object *t, *bx, *o, *ly;
int j = 0;
Evas_Object *t, *o, *ly;
ly = entrance_gui_theme_get(obj, "entrance/conf/login");
evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(ly);
o = entrance_login_add(ly, _entrance_conf_user_auth, ly);
elm_object_part_content_set(ly, "entrance.login", o);
evas_object_show(o);
t = elm_table_add(obj);
elm_object_part_content_set(ly, "entrance.conf", t);
evas_object_size_hint_weight_set(t, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_table_padding_set(t, 5 , 5);
return ly;
}
static void
_entrance_conf_user_build_cb(Evas_Object *t, const char *user)
{
Evas_Object *o, *bx, *hbx;
Entrance_Login *eu;
Eina_List *l;
const Eina_List *users, *ll;
int j = 0;
/* Background */
o = elm_label_add(t);
elm_object_text_set(o, "Background");
@ -382,14 +465,39 @@ _entrance_conf_user_build(Evas_Object *obj)
elm_table_pack(t, o, 0, j, 1, 1);
evas_object_show(o);
++j;
o = elm_gengrid_add(t);
hbx = elm_box_add(t);
elm_box_horizontal_set(hbx, EINA_TRUE);
elm_table_pack(t, hbx, 0, j, 2, 1);
++j;
evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
o = elm_genlist_add(hbx);
elm_scroller_bounce_set(o, EINA_FALSE, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_table_pack(t, o, 0, j, 2, 3);
elm_gengrid_item_size_set(o, 80, 50);
elm_gengrid_align_set(o, 0.0, 0.0);
l = _entrance_conf_backgrounds_get(o, user);
entrance_fill(o, _entrance_background_fill,
l, NULL, _entrance_conf_user_bg_sel, o);
eina_list_free(l);
elm_box_pack_end(hbx, o);
evas_object_show(o);
j += 3;
bx = elm_box_add(hbx);
elm_box_pack_end(hbx, bx);
evas_object_show(bx);
o = elm_layout_add(hbx);
_entrance_int_conf->user.bg.preview = o;
elm_box_pack_end(bx, o);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(o);
o = evas_object_rectangle_add(hbx);
evas_object_color_set(o, 0, 0, 0, 0);
evas_object_size_hint_min_set(o, 256, 0);
elm_box_pack_end(bx, o);
evas_object_show(o);
evas_object_show(hbx);
/* Icon */
/* Session to autoselect */
o = elm_label_add(t);
@ -422,7 +530,20 @@ _entrance_conf_user_build(Evas_Object *obj)
evas_object_show(t);
return ly;
users = entrance_gui_users_get();
EINA_LIST_FOREACH(users, ll, eu)
{
if (!strcmp(eu->login, user))
{
_entrance_int_conf->user.orig = eu;
_entrance_int_conf->user.bg.path = eu->bg.path;
_entrance_int_conf->user.bg.group = eu->bg.group;
_entrance_int_conf->user.image.path = eu->image.path;
_entrance_int_conf->user.image.group = eu->image.group;
break;
}
}
}
static void
@ -444,12 +565,20 @@ _entrance_conf_changed(void)
const char *bg_group;
entrance_gui_background_get(&bg_path, &bg_group);
if ((_entrance_int_conf->theme != entrance_gui_theme_name_get())
if (((_entrance_int_conf->theme != entrance_gui_theme_name_get())
|| (_entrance_int_conf->bg.path != bg_path)
|| (_entrance_int_conf->bg.group != bg_group)
|| (_entrance_int_conf->scale != elm_config_scale_get())
|| (_entrance_int_conf->elm_profile != elm_config_profile_get())
|| (_entrance_int_conf->vkbd_enabled != entrance_gui_vkbd_enabled_get()))
|| ((_entrance_int_conf->user.orig) &&
((_entrance_int_conf->user.orig->bg.path != _entrance_int_conf->user.bg.path)
|| (_entrance_int_conf->user.orig->bg.group != _entrance_int_conf->user.bg.group)
|| (_entrance_int_conf->user.orig->image.path != _entrance_int_conf->user.image.path)
|| (_entrance_int_conf->user.orig->image.path != _entrance_int_conf->user.image.group)
|| (_entrance_int_conf->user.orig->remember_session != _entrance_int_conf->user.remember_session)
|| (_entrance_int_conf->user.orig->lsess != _entrance_int_conf->user.lsess))))
{
elm_object_disabled_set(_entrance_int_conf->gui.btn_ok, EINA_FALSE);
elm_object_disabled_set(_entrance_int_conf->gui.btn_apply, EINA_FALSE);
@ -523,16 +652,6 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
elm_box_pack_end(bx, nf);
evas_object_show(nf);
o = _entrance_conf_build(nf);
it = elm_naviframe_item_simple_push(nf, o);
itc = elm_segment_control_item_add(sc, NULL, "General");
elm_object_item_data_set(itc, it);
o = _entrance_conf_user_build(nf);
itu = elm_naviframe_item_simple_push(nf, o);
ituc = elm_segment_control_item_add(sc, NULL, "User");
elm_object_item_data_set(ituc, itu);
/* Ok Apply Close */
hbx = elm_box_add(bx);
elm_box_horizontal_set(hbx, EINA_TRUE);
@ -570,6 +689,20 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
elm_box_pack_end(hbx, o);
evas_object_show(o);
/* Build configuration panel */
/* main */
o = _entrance_conf_build(nf);
it = elm_naviframe_item_simple_push(nf, o);
itc = elm_segment_control_item_add(sc, NULL, "General");
elm_object_item_data_set(itc, it);
/* user */
o = _entrance_conf_user_build(nf);
itu = elm_naviframe_item_simple_push(nf, o);
ituc = elm_segment_control_item_add(sc, NULL, "User");
elm_object_item_data_set(ituc, itu);
elm_segment_control_item_selected_set(itc, EINA_TRUE);
{

@ -10,20 +10,21 @@ typedef struct
static Eina_Bool _entrance_connect_add(void *data, int type, void *event);
static Eina_Bool _entrance_connect_del(void *data, int type, void *event);
static Eina_Bool _entrance_connect_data(void *data, int type, void *event);
static void _entrance_connect_auth(const char *login, Eina_Bool granted);
static Ecore_Con_Server *_entrance_connect;
static Eina_List *_handlers = NULL;
static Eina_List *_auth_list = NULL;
static Eina_Bool
_entrance_connect_add(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_entrance_connect_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
PT("connected\n");
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_entrance_connect_del(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_entrance_connect_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
PT("disconnected\n");
_entrance_connect = NULL;
@ -32,7 +33,7 @@ _entrance_connect_del(void *data __UNUSED__, int type __UNUSED__, void *event __
}
static Eina_Bool
_entrance_connect_data(void *data __UNUSED__, int type __UNUSED__, void *event)
_entrance_connect_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Ecore_Con_Event_Server_Data *ev;
ev = event;
@ -43,7 +44,7 @@ _entrance_connect_data(void *data __UNUSED__, int type __UNUSED__, void *event)
}
static void
_entrance_connect_auth(Eina_Bool granted)
_entrance_connect_auth(const char *login, Eina_Bool granted)
{
Entrance_Connect_Auth *auth;
Eina_List *l, *ll;
@ -51,7 +52,7 @@ _entrance_connect_auth(Eina_Bool granted)
EINA_LIST_FOREACH_SAFE(_auth_list, l, ll, auth)
{
if (auth->func)
auth->func(auth->data, granted);
auth->func(auth->data, login, granted);
}
}
@ -68,7 +69,8 @@ _entrance_connect_read_cb(const void *data, size_t size EINA_UNUSED, void *user_
PT("Auth granted :)\n");
else
PT("Auth error :(\n");
_entrance_connect_auth(eev->event.status.granted);
_entrance_connect_auth(eev->event.status.login,
eev->event.status.granted);
}
else if (eev->type == ENTRANCE_EVENT_MAXTRIES)
{

@ -1,7 +1,7 @@
#ifndef ENTRANCE_CONNECT_
#define ENTRANCE_CONNECT_
typedef void (*Entrance_Connect_Auth_Cb)(void *data, Eina_Bool granted);
typedef void (*Entrance_Connect_Auth_Cb)(void *data, const char *login, Eina_Bool granted);
void entrance_connect_init();
void entrance_connect_auth_send(const char *login, const char *password, const char *session, Eina_Bool open_session);

@ -5,10 +5,10 @@ struct Entrance_Fill_
const char *item_style; //maybee need to be provided by theme ?
struct
{
EntranceFillTextGetFunc text_get;
EntranceFillContentGetFunc content_get;
EntranceFillStateGetFunc state_get;
EntranceFillDelFunc del;
Entrance_Fill_Text_Get_Func text_get;
Entrance_Fill_Content_Get_Func content_get;
Entrance_Fill_State_Get_Func state_get;
Entrance_Fill_Del_Func del;
Evas_Smart_Cb sel;
void *data;
} func;
@ -18,7 +18,7 @@ struct Entrance_Fill_
///////////////// LIST ///////////////////////////////
static void
_entrance_fill_list(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func, void *data)
_entrance_fill_list(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data)
{
Eina_List *l;
void *content;
@ -31,13 +31,15 @@ _entrance_fill_list(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Ev
NULL, func, data);
if (it)
elm_object_item_data_set(it, content);
if (fill_cb)
fill_cb(content, it);
}
elm_list_go(obj);
}
///////////////// GENLIST /////////////////////////////
static void
_entrance_fill_genlist(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func, void *data)
_entrance_fill_genlist(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data)
{
Eina_List *l;
Elm_Genlist_Item_Class *glc;
@ -64,12 +66,14 @@ _entrance_fill_genlist(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents,
content, NULL, ELM_GENLIST_ITEM_NONE,
func, data);
elm_object_item_data_set(it, content);
if (fill_cb)
fill_cb(content, it);
}
}
///////////////// GENGRID /////////////////////////////
static void
_entrance_fill_gengrid(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func, void *data)
_entrance_fill_gengrid(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data)
{
Eina_List *l;
Elm_Gengrid_Item_Class *ggc;
@ -94,6 +98,8 @@ _entrance_fill_gengrid(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents,
it = elm_gengrid_item_append(obj, ggc,
content, func, data);
elm_object_item_data_set(it, content);
if (fill_cb)
fill_cb(content, it);
}
}
@ -110,7 +116,7 @@ _entrance_fill_hoversell_func_cb(void *data EINA_UNUSED, Evas_Object *obj, void
}
static void
_entrance_fill_hoversell(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func, void *data)
_entrance_fill_hoversell(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data)
{
Eina_List *l;
void *content;
@ -130,6 +136,8 @@ _entrance_fill_hoversell(Evas_Object *obj, Entrance_Fill *ef, Eina_List *content
_entrance_fill_hoversell_func_cb, NULL);
elm_object_item_data_set(it, content);
evas_object_data_set(elm_object_item_widget_get(it), "fill_data", ef);
if (fill_cb)
fill_cb(content, it);
if (ic)
{
free(ic);
@ -145,7 +153,7 @@ _entrance_fill_hoversell(Evas_Object *obj, Entrance_Fill *ef, Eina_List *content
///////////////// MAIN /////////////////////////////
Entrance_Fill *
entrance_fill_new(const char *item_style, EntranceFillTextGetFunc text_get, EntranceFillContentGetFunc content_get, EntranceFillStateGetFunc state_get, EntranceFillDelFunc del_func)
entrance_fill_new(const char *item_style, Entrance_Fill_Text_Get_Func text_get, Entrance_Fill_Content_Get_Func content_get, Entrance_Fill_State_Get_Func state_get, Entrance_Fill_Del_Func del_func)
{
Entrance_Fill *ef;
ef = calloc(1, sizeof(Entrance_Fill));
@ -165,20 +173,20 @@ entrance_fill_del(Entrance_Fill *ef)
}
void
entrance_fill(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func, void *data)
entrance_fill(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data)
{
const char *type;
if (!obj) return;
if ((type = elm_object_widget_type_get(obj)))
{
if (!strcmp(type, "elm_list"))
_entrance_fill_list(obj, ef, contents, func, data);
_entrance_fill_list(obj, ef, contents, fill_cb, func, data);
else if (!strcmp(type, "elm_genlist"))
_entrance_fill_genlist(obj, ef, contents, func, data);
_entrance_fill_genlist(obj, ef, contents, fill_cb, func, data);
else if (!strcmp(type, "elm_gengrid"))
_entrance_fill_gengrid(obj, ef, contents, func, data);
_entrance_fill_gengrid(obj, ef, contents, fill_cb, func, data);
else if (!strcmp(type, "elm_hoversel"))
_entrance_fill_hoversell(obj, ef, contents, func, data);
_entrance_fill_hoversell(obj, ef, contents, fill_cb, func, data);
else
{
PT("Unknow object type to fill ");

@ -3,13 +3,14 @@
typedef struct Entrance_Fill_ Entrance_Fill;
typedef char *(*EntranceFillTextGetFunc) (void *data, Evas_Object *obj, const char *part);
typedef Evas_Object *(*EntranceFillContentGetFunc) (void *data, Evas_Object *obj, const char *part);
typedef Eina_Bool (*EntranceFillStateGetFunc) (void *data, Evas_Object *obj, const char *part);
typedef void (*EntranceFillDelFunc) (void *data, Evas_Object *obj);
typedef char *(*Entrance_Fill_Text_Get_Func) (void *data, Evas_Object *obj, const char *part);
typedef Evas_Object *(*Entrance_Fill_Content_Get_Func) (void *data, Evas_Object *obj, const char *part);
typedef Eina_Bool (*Entrance_Fill_State_Get_Func) (void *data, Evas_Object *obj, const char *part);
typedef void (*Entrance_Fill_Del_Func) (void *data, Evas_Object *obj);
typedef Eina_Bool (*Entrance_Fill_Cb_Func) (void *data, Elm_Object_Item *it);
Entrance_Fill *entrance_fill_new(const char *item_style, EntranceFillTextGetFunc label_get, EntranceFillContentGetFunc content_get, EntranceFillStateGetFunc state_get, EntranceFillDelFunc del_func);
void entrance_fill(Evas_Object *obj, Entrance_Fill *egf, Eina_List *contents, Evas_Smart_Cb func, void *data);
Entrance_Fill *entrance_fill_new(const char *item_style, Entrance_Fill_Text_Get_Func label_get, Entrance_Fill_Content_Get_Func content_get, Entrance_Fill_State_Get_Func state_get, Entrance_Fill_Del_Func del_func);
void entrance_fill(Evas_Object *obj, Entrance_Fill *egf, Eina_List *contents, Entrance_Fill_Cb_Func fill_cb, Evas_Smart_Cb func, void *data);
void entrance_fill_del(Entrance_Fill *ef);

@ -14,7 +14,7 @@ static void _entrance_gui_user_del(void *data, Evas_Object *obj);
static void _entrance_gui_actions_populate();
static void _entrance_gui_conf_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void _entrance_gui_update(void);
static void _entrance_gui_auth_cb(void *data, Eina_Bool granted);
static void _entrance_gui_auth_cb(void *data, const char *user, Eina_Bool granted);
/*
@ -295,7 +295,8 @@ entrance_gui_users_set(Eina_List *users)
{
ol = ENTRANCE_GUI_GET(screen->edj, "entrance.users");
if (!ol) continue;
entrance_fill(ol, ef, users, _entrance_gui_user_sel_cb, screen->login);
entrance_fill(ol, ef, users, NULL,
_entrance_gui_user_sel_cb, screen->login);
elm_object_signal_emit(screen->edj,
"entrance,users,enabled", "");
}
@ -353,6 +354,12 @@ entrance_gui_conf_set(const Entrance_Conf_Gui_Event *conf)
_entrance_gui_update();
}
void
entrance_gui_theme_name_set(const char *theme)
{
/* TODO */
}
const char *
entrance_gui_theme_name_get(void)
{
@ -384,12 +391,12 @@ entrance_gui_vkbd_enabled_get(void)
}
/*
static void
_entrance_gui_login_activated_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
_entrance_gui_login_activated_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
char *txt;
Eina_List *l, *ll;
Entrance_Xsession *xsess;
Entrance_User_Event *eu = NULL;
Entrance_Login *eu = NULL;
Entrance_Screen *screen;
PT("login activated\n");
@ -423,7 +430,7 @@ _entrance_gui_login_activated_cb(void *data __UNUSED__, Evas_Object *obj, void *
}
static void
_entrance_gui_shutdown(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_entrance_gui_shutdown(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
elm_exit();
PT("shutdown cb\n");
@ -431,7 +438,7 @@ _entrance_gui_shutdown(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void
static void
_entrance_gui_focus(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_entrance_gui_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eina_List *l;
Entrance_Screen *screen;
@ -442,7 +449,7 @@ _entrance_gui_focus(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *ev
}
static void
_entrance_gui_login_cancel_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *src __UNUSED__)
_entrance_gui_login_cancel_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
Evas_Object *o;
Entrance_Screen *screen;
@ -461,7 +468,7 @@ _entrance_gui_login_cancel_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__
}
static Eina_Bool
_entrance_gui_login_timeout(void *data __UNUSED__)
_entrance_gui_login_timeout(void *data EINA_UNUSED)
{
Evas_Object *popup, *o, *bx;
Entrance_Screen *screen;
@ -531,20 +538,20 @@ _entrance_gui_login(Entrance_Screen *screen)
}
static void
_entrance_gui_login_request_cb(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *src __UNUSED__)
_entrance_gui_login_request_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
_entrance_gui_login(data);
}
static void
_entrance_gui_password_activated_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_entrance_gui_password_activated_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
PT("password activated\n");
_entrance_gui_login(data);
}
static void
_entrance_gui_xsessions_clicked_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
_entrance_gui_xsessions_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Evas_Object *icon;
Eina_List *l;
@ -632,7 +639,7 @@ _entrance_gui_sessions_populate()
}
static Eina_Bool
_entrance_gui_auth_enable(void *data __UNUSED__)
_entrance_gui_auth_enable(void *data EINA_UNUSED)
{
Evas_Object *o;
Eina_List *l;
@ -677,12 +684,17 @@ _entrance_gui_update(void)
}
if (!bg)
{
const char *path;
const char *group;
if (_gui->bg.group)
bg = entrance_gui_theme_get(screen->transition,
_gui->bg.group);
else
bg = entrance_gui_theme_get(screen->transition,
"entrance/background/default");
edje_object_file_get(elm_layout_edje_get(bg), &path, &group);
eina_stringshare_replace(&_gui->bg.path, path);
eina_stringshare_replace(&_gui->bg.group, group);
}
elm_object_part_content_set(screen->transition,
"entrance.wallpaper.default", bg);
@ -743,27 +755,27 @@ _entrance_gui_user_icon_random_get(Evas_Object *obj)
}
static void
_entrance_gui_user_sel_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
_entrance_gui_user_sel_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Entrance_User_Event *eu;
Entrance_Login *eu;
eu = elm_object_item_data_get(event_info);
entrance_login_login_set(data, eu->login);
entrance_login_session_set(data, eu->lsess);
}
static char *
_entrance_gui_user_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
_entrance_gui_user_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
{
Entrance_User_Event *eu;
Entrance_Login *eu;
eu = data;
return strdup(eu->login);
}
static Evas_Object *
_entrance_gui_user_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
_entrance_gui_user_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part)
{
Evas_Object *ic = NULL;
Entrance_User_Event *eu;
Entrance_Login *eu;
eu = data;
if (eu && !strcmp(part, "elm.swallow.icon"))
@ -798,13 +810,13 @@ _entrance_gui_user_content_get(void *data __UNUSED__, Evas_Object *obj, const ch
}
static Eina_Bool
_entrance_gui_user_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
_entrance_gui_user_state_get(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
{
return EINA_FALSE;
}
static void
_entrance_gui_user_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
_entrance_gui_user_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
{
}
@ -813,7 +825,7 @@ _entrance_gui_user_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
///////////////////////////////////////////////////
static char *
_entrance_gui_action_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
_entrance_gui_action_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
{
Entrance_Action *ea;
ea = data;
@ -821,7 +833,7 @@ _entrance_gui_action_text_get(void *data, Evas_Object *obj __UNUSED__, const cha
}
static void
_entrance_gui_action_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_entrance_gui_action_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Entrance_Action *ea;
ea = data;
@ -841,7 +853,7 @@ _entrance_gui_actions_populate()
ef = entrance_fill_new(NULL, _entrance_gui_action_text_get,
NULL, NULL, NULL);
o = ENTRANCE_GUI_GET(screen->edj, "entrance.actions");
entrance_fill(o, ef, _gui->actions,
entrance_fill(o, ef, _gui->actions, NULL,
_entrance_gui_action_clicked_cb, screen);
edje_object_signal_emit(elm_layout_edje_get(screen->edj),
"entrance,action,enabled", "");
@ -850,7 +862,7 @@ _entrance_gui_actions_populate()
////////////////////////////////////////////////////////////////////////////////
static void
_entrance_gui_auth_cb(void *data, Eina_Bool granted)
_entrance_gui_auth_cb(void *data, const char *user EINA_UNUSED, Eina_Bool granted)
{
Eina_List *l;
Entrance_Screen *screen;

@ -20,6 +20,7 @@ void entrance_gui_conf_set(const Entrance_Conf_Gui_Event *conf);
Eina_List *entrance_gui_stringlist_get(const char *name);
void entrance_gui_stringlist_free(Eina_List *list);
const char *entrance_gui_theme_name_get(void);
void entrance_gui_theme_name_set(const char *theme);
void entrance_gui_background_get(const char **path, const char **group);
Eina_Bool entrance_gui_vkbd_enabled_get(void);
const char *entrance_gui_theme_path_get(void);

@ -2,7 +2,7 @@
#define ENTRANCE_PASSWD_LEN 256
typedef struct Entrance_Login_ Entrance_Login;
typedef struct Entrance_Gui_Login_ Entrance_Gui_Login;
static void _login_reset(Evas_Object *widget);
static void _login_backspace(Evas_Object *widget);
@ -19,11 +19,11 @@ static void _login_password_focused_cb(void *data, Evas_Object *obj, void *event
static void _login_password_unfocused_cb(void *data, Evas_Object *obj, void *event);
static void _login_login_activated_cb(void *data, Evas_Object *obj, void *event);
static char *_login_xsession_text_get(void *data, Evas_Object *obj, const char *part);
static void _login_auth_cb(void *data, Eina_Bool granted);
static void _login_auth_cb(void *data, const char *user, Eina_Bool granted);
static Entrance_Fill *_login_fill;
struct Entrance_Login_
struct Entrance_Gui_Login_
{
Ecore_Event_Handler *handler;
char passwd[ENTRANCE_PASSWD_LEN];
@ -41,7 +41,7 @@ struct Entrance_Login_
};
#define LOGIN_GET(widget) \
Entrance_Login *login; \
Entrance_Gui_Login *login; \
login = evas_object_data_get(widget, "entrance"); \
if (!login) return
@ -146,11 +146,13 @@ _login_password_catch(Evas_Object *widget, Eina_Bool catch)
{
if (catch)
{
PT("catch password\n");
login->handler = ecore_event_handler_add(
ECORE_EVENT_KEY_DOWN, _login_key_down_cb, widget);
}
else
{
PT("uncatch password\n");
ecore_event_handler_del(login->handler);
login->handler = NULL;
}
@ -166,11 +168,10 @@ _login_key_down_cb(void *data, int type EINA_UNUSED, void *event)
ev = event;
elm_object_signal_emit(data,
"entrance,auth,changed", "");
elm_object_signal_emit(elm_object_part_content_get(data,
"entrance.password"),
"entrance,auth,changed", "");
elm_object_signal_emit(data, "entrance,auth,changed", "");
elm_object_signal_emit(
elm_object_part_content_get(data, "entrance.password"),
"entrance,auth,changed", "");
if (!strcmp(ev->key, "KP_Enter"))
{
@ -199,12 +200,19 @@ _login_key_down_cb(void *data, int type EINA_UNUSED, void *event)
else
_login_delete(data);
}
else if (!strcmp(ev->key, "Tab"))
else if ((!strcmp(ev->key, "Tab"))
|| (!strcmp(ev->key, "ISO_Left_Tab")))
{
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)
elm_object_focus_next(data, ELM_FOCUS_PREVIOUS);
{
PT("focus previous\n");
elm_object_focus_next(data, ELM_FOCUS_PREVIOUS);
}
else
elm_object_focus_next(data, ELM_FOCUS_NEXT);
{
PT("focus next\n");
elm_object_focus_next(data, ELM_FOCUS_NEXT);
}
}
else if ((!strcmp(ev->key, "u"))
&& (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL))
@ -302,13 +310,13 @@ _login_xsession_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event
}
static void
_login_auth_cb(void *data, Eina_Bool granted)
_login_auth_cb(void *data, const char *user, Eina_Bool granted)
{
LOGIN_GET(data);
if (login->wait)
{
if (login->func.login)
login->func.login(login->func.data, granted);
login->func.login(login->func.data, user, granted);
login->wait = EINA_FALSE;
entrance_connect_auth_cb_del(login->auth);
login->auth = NULL;
@ -360,10 +368,10 @@ Evas_Object *
entrance_login_add(Evas_Object *obj, Entrance_Login_Cb login_cb, void *data)
{
Evas_Object *o, *h, *p;
Entrance_Login *login;
Entrance_Gui_Login *login;
/* layout */
login = calloc(1, sizeof(Entrance_Login));
login = calloc(1, sizeof(Entrance_Gui_Login));
login->func.login = login_cb;
login->func.data = data;
o = entrance_gui_theme_get(obj, "entrance/login");
@ -409,7 +417,7 @@ entrance_login_xsessions_populate(Evas_Object *widget, Eina_List *xsessions)
LOGIN_GET(widget);
o = elm_object_part_content_get(widget, "entrance.xsessions");
entrance_fill(o, _login_fill, xsessions,
entrance_fill(o, _login_fill, xsessions, NULL,
_login_xsession_clicked_cb, widget);
login->session = eina_list_data_get(xsessions);
_login_xsession_update(widget);
@ -454,9 +462,17 @@ entrance_login_session_set(Evas_Object *widget, const char *name)
void
entrance_login_open_session_set(Evas_Object *widget, Eina_Bool open_session)
{
Evas_Object *o;
LOGIN_GET(widget);
open_session = !!open_session;
if (login->open_session != open_session)
login->open_session = open_session;
{
login->open_session = open_session;
o = elm_object_part_content_get(widget, "entrance.xsessions");
if (login->open_session)
evas_object_show(o);
else
evas_object_hide(o);
}
}

@ -1,7 +1,7 @@
#ifndef ENTRANCE_LOGIN_H
#define ENTRANCE_LOGIN_H
typedef void (*Entrance_Login_Cb) (void *data, Eina_Bool granted);
typedef void (*Entrance_Login_Cb) (void *data, const char *user, Eina_Bool granted);
void entrance_login_init(void);
void entrance_login_shutdown(void);

@ -19,14 +19,14 @@ _theme_get(Evas_Object *win, const char *group)
}
static void
_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *sig, const char *src)
_signal(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig, const char *src)
{
printf("Event: %s - %s \n", sig, src);
}
static void
_shutdown(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_shutdown(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
printf("Quit\n");
elm_exit();
@ -34,7 +34,7 @@ _shutdown(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info _
int
elm_main (int argc __UNUSED__, char **argv __UNUSED__)
elm_main (int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *o, *win;
win = elm_win_add(NULL, "theme_test", ELM_WIN_BASIC);

@ -36,7 +36,7 @@ _signal_cb(int sig)
}
static void
_signal_log(int sig __UNUSED__)
_signal_log(int sig EINA_UNUSED)
{
PT("reopen the log file\n");
entrance_close_log();
@ -169,7 +169,7 @@ _entrance_main(const char *dname)
}
static Eina_Bool
_entrance_client_del(void *data __UNUSED__, int type __UNUSED__, void *event)
_entrance_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Ecore_Exe_Event_Del *ev;
@ -304,9 +304,6 @@ main (int argc, char ** argv)
entrance_user = getenv("ENTRANCE_USER");
#ifdef HAVE_PAM
entrance_pam_init(PACKAGE, dname, entrance_user);
#endif
if (entrance_user)
{
char *quit;
@ -364,7 +361,7 @@ main (int argc, char ** argv)
entrance_pam_item_set(ENTRANCE_PAM_ITEM_USER, entrance_config->userlogin);
#endif
PT("login user\n");
entrance_session_login(entrance_config->command.session_login, EINA_FALSE);
entrance_session_login(NULL, EINA_FALSE);
sleep(30);
xcb_disconnect(disp);
}

@ -93,7 +93,7 @@ entrance_action_run(int action)
}
static void
_entrance_action_suspend(void *data __UNUSED__)
_entrance_action_suspend(void *data EINA_UNUSED)
{
PT("Suspend");
_action_exe = NULL;
@ -101,21 +101,21 @@ _entrance_action_suspend(void *data __UNUSED__)
}
static void
_entrance_action_shutdown(void *data __UNUSED__)
_entrance_action_shutdown(void *data EINA_UNUSED)
{
PT("Shutdown");
_action_exe = ecore_exe_run(entrance_config->command.shutdown, NULL);
}
static void
_entrance_action_reboot(void *data __UNUSED__)
_entrance_action_reboot(void *data EINA_UNUSED)
{
PT("Reboot\n");
_action_exe = ecore_exe_run(entrance_config->command.reboot, NULL);
}
static Eina_Bool
_entrance_action_exe_event_del_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
_entrance_action_exe_event_del_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Ecore_Exe_Event_Del *ev;
Eina_Bool ret = ECORE_CALLBACK_PASS_ON;

@ -19,7 +19,6 @@ _defaults_set(Entrance_Config *config)
config->command.xauth_path = eina_stringshare_add("/usr/bin/xauth");
config->command.xauth_file = eina_stringshare_add("/var/run/entrance.auth");
config->command.session_start = eina_stringshare_add("/usr/bin/sessreg -a -l :0.0" );
config->command.session_login = eina_stringshare_add("exec /bin/bash -login /etc/X11/xinit/xinitrc");
config->command.session_stop = eina_stringshare_add("/usr/bin/sessreg -d -l :0.0");
config->command.shutdown = eina_stringshare_add("/usr/bin/shutdown -h now");
config->command.reboot = eina_stringshare_add("/usr/bin/shutdown -r now");
@ -124,7 +123,6 @@ _config_free(Entrance_Config *config)
eina_stringshare_del(config->command.xauth_path);
eina_stringshare_del(config->command.xauth_file);
eina_stringshare_del(config->command.session_start);
eina_stringshare_del(config->command.session_login);
eina_stringshare_del(config->command.session_stop);
eina_stringshare_del(config->command.shutdown);
eina_stringshare_del(config->command.reboot);
@ -153,7 +151,6 @@ entrance_config_init()
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "xauth_path", command.xauth_path, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "xauth_file", command.xauth_file, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "session_start", command.session_start, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "session_login", command.session_login, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "session_stop", command.session_stop, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "shutdown", command.shutdown, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Entrance_Config, "reboot", command.reboot, EET_T_STRING);

@ -15,7 +15,6 @@ struct _Entrance_Config
const char *xauth_path;
const char *xauth_file;
const char *session_start;
const char *session_login;
const char *session_stop;