Enlightenment CVS committal
Author : atmosphere
Project : misc
Module : elogin
Dir : misc/elogin/src/client
Modified Files:
callbacks.c callbacks.h e_login_config.c e_login_config.h
e_login_session.c e_login_session.h events.c
Log Message:
patch from JeopardE<[EMAIL PROTECTED]> to add session management
thanks dude.
I think it still needs mouse callback support, but I'll try to beat him to
it =) For now select your sessions with the Up/Down arrow keys.
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/callbacks.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- callbacks.c 16 Oct 2002 02:05:12 -0000 1.6
+++ callbacks.c 10 Jan 2003 14:32:53 -0000 1.7
@@ -8,6 +8,39 @@
static void elogin_start_x(E_Login_Session e);
+void
+elogin_select_next_session(E_Login_Session e)
+{
+ elogin_select_session(e, e->session_index + 1);
+}
+
+void
+elogin_select_prev_session(E_Login_Session e)
+{
+ elogin_select_session(e, e->session_index - 1);
+}
+
+void
+elogin_select_session(E_Login_Session e, int index)
+{
+ int ix, iy;
+
+ /* Force within list bounds/wraparound */
+ if (index >= evas_list_count(e->listitems))
+ index = 0;
+ else if (index < 0)
+ index = evas_list_count(e->listitems) - 1;
+
+ /* Update bullet position */
+ ix = 300;
+ iy = 120 + (index * 30);
+ evas_object_move(e->bullet, ix, iy);
+
+ /* Update current session */
+ e->session_index = index;
+ e->session = evas_list_nth(e->config->sessions, index);
+}
+
int
elogin_return_key_cb(E_Login_Session e, char *buffer)
{
@@ -64,7 +97,11 @@
#if X_TESTING
snprintf(buf, PATH_MAX, "/usr/X11R6/bin/xterm");
#else
- snprintf(buf, PATH_MAX, "%s/.xinitrc", e->auth->pam.pw->pw_dir);
+/* snprintf(buf, PATH_MAX, "%s/.xinitrc", e->auth->pam.pw->pw_dir); */
+ if (e->session)
+ snprintf(buf, PATH_MAX, "/etc/X11/Xsession %s", e->session);
+ else
+ snprintf(buf, PATH_MAX, "/etc/X11/Xsession");
#endif
ecore_sync();
@@ -76,7 +113,9 @@
exit(1);
}
if (initgroups(e->auth->pam.pw->pw_name, e->auth->pam.pw->pw_gid))
- fprintf(stderr, "Unable to initialize group\n");
+ fprintf(stderr,
+ "Unable to initialize group (is elogin running as root?)\n");
+
if (setgid(e->auth->pam.pw->pw_gid))
fprintf(stderr, "Unable to set group id\n");
if (setuid(e->auth->pam.pw->pw_uid))
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/callbacks.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- callbacks.h 6 May 2002 17:56:07 -0000 1.1
+++ callbacks.h 10 Jan 2003 14:32:53 -0000 1.2
@@ -7,5 +7,8 @@
int _x, int _y);
int elogin_return_key_cb(E_Login_Session e, char *buffer);
+void elogin_select_next_session(E_Login_Session e);
+void elogin_select_prev_session(E_Login_Session e);
+void elogin_select_session(E_Login_Session e, int index);
#endif
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/e_login_config.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_login_config.c 24 Jul 2002 02:17:16 -0000 1.1
+++ e_login_config.c 10 Jan 2003 14:32:54 -0000 1.2
@@ -19,10 +19,30 @@
static void
e_login_config_populate(E_Login_Config e, E_DB_File * db)
{
- char *str;
+ char *str = NULL;
+ Evas_List *l = NULL;
+ int i = 0, num_session = 0;
if ((!e) || (!db))
return;
+
+ if (e_db_int_get(db, "/elogin/session/count", &num_session))
+ {
+ for(i = 0; i < num_session; i++)
+ {
+ char buf[PATH_MAX];
+ snprintf(buf, PATH_MAX, "/elogin/session/%d", i);
+ if((str = e_db_str_get(db, buf)))
+ {
+ l = evas_list_append(l, str);
+ }
+ }
+ e->sessions = l;
+ }
+ else
+ {
+ fprintf(stderr, "Warning: No sessions found, using default\n");
+ }
if ((str = e_db_str_get(db, "/elogin/bg")))
e->bg = str;
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/e_login_config.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_login_config.h 24 Jul 2002 02:17:16 -0000 1.1
+++ e_login_config.h 10 Jan 2003 14:32:54 -0000 1.2
@@ -38,6 +38,7 @@
}
place;
Evas_List users;
+ Evas_List *sessions;
};
typedef struct _E_Login_Config *E_Login_Config;
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/e_login_session.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_login_session.c 16 Oct 2002 02:05:13 -0000 1.5
+++ e_login_session.c 10 Jan 2003 14:32:54 -0000 1.6
@@ -56,7 +56,9 @@
Display *disp;
Window win, ewin;
Evas *evas;
- int iw, ih;
+ Evas_List *l;
+ Evas_Object *li;
+ int iw, ih, ix, iy;
if (!e)
exit(1);
@@ -140,6 +142,66 @@
evas_object_image_fill_set(e->pointer, 0.0, 0.0, (double) iw, (double) ih);
evas_object_layer_set(e->pointer, 2000);
evas_object_show(e->pointer);
+
+ /* Session list background image */
+ e->listbg = evas_object_image_add(evas);
+ evas_object_image_file_set(e->listbg,
+ PACKAGE_DATA_DIR "/data/images/parch.png",
+ NULL);
+ evas_object_image_size_get(e->listbg, &iw, &ih);
+ evas_object_resize(e->listbg, iw, ih);
+ evas_object_image_fill_set(e->listbg, 0.0, 0.0, (double) iw, (double) ih);
+ evas_object_layer_set(e->listbg, 1);
+ evas_object_move(e->listbg, 280.0, 40.0);
+ evas_object_show(e->listbg);
+
+ /* Session list heading */
+ e->listhead = evas_object_text_add(evas);
+ evas_object_text_font_set(e->listhead, "notepad.ttf", 21.0);
+ evas_object_text_text_set(e->listhead, "Select Session");
+ evas_object_layer_set(e->listhead, 2);
+ evas_object_color_set(e->listhead, 90, 60, 25, 255);
+ evas_object_move(e->listhead, 300.0, 80.0);
+ evas_object_show(e->listhead);
+
+ /* Build session list */
+ ix = 334;
+ iy = 120;
+
+ e->listitems = NULL;
+ for (l = e->config->sessions; l && iy <= 330; l = l->next)
+ {
+ li = evas_object_text_add(evas);
+ evas_object_text_font_set(li, "notepad.ttf", 16.0);
+ evas_object_text_text_set(li, (char *) evas_list_data(l));
+ evas_object_layer_set(li, 5);
+ evas_object_color_set(li, 0, 0, 0, 255);
+ evas_object_move(li, (double) ix, (double) iy);
+ evas_object_show(li);
+ e->listitems = evas_list_append(e->listitems, li);
+ iy += 30;
+ }
+
+ /* Bullet */
+ e->bullet = evas_object_image_add(evas);
+ evas_object_image_file_set(e->bullet,
+ PACKAGE_DATA_DIR "/data/images/bullet.png",
+ NULL);
+ evas_object_image_size_get(e->bullet, &iw, &ih);
+ evas_object_resize(e->bullet, iw, ih);
+ evas_object_image_fill_set(e->bullet, 0.0, 0.0, (double) iw, (double) ih);
+ evas_object_layer_set(e->bullet, 5);
+ evas_object_move(e->bullet, 300, 120);
+ evas_object_show(e->bullet);
+
+ /* Set default session to first in list (for now) */ ;
+ l = e->config->sessions;
+ if (l)
+ e->session = evas_list_data(l);
+ else
+ e->session = NULL;
+
+ e->session_index = 0;
e->evas = evas;
e->ewin = ewin;
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/e_login_session.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_login_session.h 16 Oct 2002 02:05:13 -0000 1.6
+++ e_login_session.h 10 Jan 2003 14:32:54 -0000 1.7
@@ -7,17 +7,19 @@
#include<stdio.h>
#include<limits.h>
#include<string.h>
+#include<unistd.h>
#include "e_login_auth.h"
#include "e_login_config.h"
-#define X_TESTING 0 /* set to 1 if you wanna run inside a window
- in X */
-
struct _E_Login_Session
{
Evas *evas; /* the evas being used in the X session */
Evas_Object *pointer; /* object for the pointer in the evas */
+ Evas_Object *listbg; /* Background for session list */
+ Evas_Object *listhead; /* Session List heading */
+ Evas_Object *bullet;
+ Evas_List *listitems; /* Items in session list */
E_Background bg; /* ebg in the evas */
E_Login_Auth auth; /* encapsulated auth shit */
E_Login_Config config; /* configuration options */
@@ -28,6 +30,8 @@
int w, h;
}
geom; /* the height/width of the evas */
+ char *session; /* The session to load */
+ int session_index;
Evas_List *users; /* recent users */
/* find a way to have plugins running */
===================================================================
RCS file: /cvsroot/enlightenment/misc/elogin/src/client/events.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- events.c 16 Oct 2002 02:05:13 -0000 1.5
+++ events.c 10 Jan 2003 14:32:54 -0000 1.6
@@ -144,6 +144,14 @@
memset(&typebuffer.buf, 0, USER_PASS_MAX);
typebuffer.index = 0;
}
+ else if (!(strcmp(e->key, "Up")))
+ {
+ elogin_select_prev_session(e_session);
+ }
+ else if (!(strcmp(e->key, "Down")))
+ {
+ elogin_select_next_session(e_session);
+ }
if (typebuffer.index >= USER_PASS_MAX)
return;
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs