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

Reply via email to