Enlightenment CVS committal
Author : atmosphere
Project : e17
Module : apps/entrance
Dir : e17/apps/entrance/src/client
Modified Files:
entrance_config.c entrance_config.h entrance_session.c
entrance_user.c entrance_x_session.c entrance_x_session.h
main.c
Log Message:
o added entrance_config_save(const char *file)
o modularized the x session abstraction, this makes things much cleaner with
how the config system interacts with it.
o modified entrance_config_print so it's more edbish with its output
o Entrance_User's have a default icon if none is specified
o some namespace cleanups too
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- entrance_config.c 7 Mar 2004 12:51:59 -0000 1.22
+++ entrance_config.c 10 Mar 2004 22:53:51 -0000 1.23
@@ -1,6 +1,7 @@
#include "entrance.h"
#include "entrance_config.h"
#include "entrance_user.h"
+#include "entrance_x_session.h"
/**
@file entrance_config.c
@@ -31,6 +32,14 @@
static void
entrance_config_populate(Entrance_Config * e, E_DB_File * db)
{
+ Entrance_User *eu = NULL;
+ char *user = NULL;
+ char *icon = NULL;
+ char *session = NULL;
+
+ char *title = NULL;
+ Entrance_X_Session *exs;
+
char *str;
int i = 0, num_session = 0, num_user;
char buf[PATH_MAX];
@@ -80,11 +89,6 @@
e->halt = 0;
if (e_db_int_get(db, "/entrance/user/count", &num_user))
{
- Entrance_User *eu = NULL;
- char *user = NULL;
- char *icon = NULL;
- char *session = NULL;
-
for (i = 0; i < num_user; i++)
{
snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
@@ -98,7 +102,7 @@
if ((eu = entrance_user_new(user, icon, session)))
{
e->users.hash = evas_hash_add(e->users.hash, user, eu);
- e->users.keys = evas_list_append(e->users.keys, user);
+ e->users.keys = evas_list_append(e->users.keys, eu->name);
}
else
{
@@ -120,22 +124,21 @@
/* session hash and font list */
if (e_db_int_get(db, "/entrance/session/count", &num_session))
{
- char *key = NULL;
- char *icon = NULL;
- char *value = NULL;
-
for (i = 0; i < num_session; i++)
{
snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
- key = e_db_str_get(db, buf);
+ title = e_db_str_get(db, buf);
snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
- value = e_db_str_get(db, buf);
+ session = e_db_str_get(db, buf);
snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
icon = e_db_str_get(db, buf);
- e->sessions.hash = evas_hash_add(e->sessions.hash, key, value);
- e->sessions.icons = evas_hash_add(e->sessions.icons, key, icon);
- e->sessions.keys = evas_list_append(e->sessions.keys, key);
+ if ((exs = entrance_x_session_new(title, icon, session)))
+ {
+ e->sessions.keys = evas_list_append(e->sessions.keys, title);
+ e->sessions.hash =
+ evas_hash_add(e->sessions.hash, exs->name, exs);
+ }
}
}
/*
@@ -220,59 +223,164 @@
entrance_config_print(Entrance_Config * e)
{
int i = 0;
- char *str = NULL;
+ char buf[PATH_MAX];
Entrance_User *eu;
+ Entrance_X_Session *exs;
Evas_List *l = NULL;
- char *strings[] = { "Theme Edje %s\n",
- "Pointer Image %s\n", "Date Format %s\n", "Time Format %s\n",
- "Greeting Before %s\n", "Greeting After %s\n"
+ char *strings[] = { "/entrance/theme",
+ "/entrance/pointer", "/entrance/date_format", "/entrance/time_format",
+ "/entrance/greeting/before", "/entrance/greeting/after"
};
char *values[] = { e->theme, e->pointer, e->date.string,
e->time.string, e->before.string, e->after.string
};
int ssize = sizeof(strings) / sizeof(char *);
- char *intstrings[] = { "Use Evas GL %d\n", "Allow reboot %d\n",
- "Allow Shutdown %d\n",
- "Remember Users who login %d\n",
- "Number of users to remember %d\n",
- "Authentication Mode %d\n"
+ char *intstrings[] = { "/entrance/engine", "/entrance/system/reboot",
+ "/entrance/system/halt", "/entrance/users/remember",
+ "/entrance/users/remember_n", "/entrance/auth"
};
int intvalues[] = { e->engine, e->reboot, e->halt, e->users.remember,
e->users.remember_n, e->auth
};
int intsize = sizeof(intstrings) / sizeof(int);
- char *userstrings[] = { "\nUsername %s\n", "XSession %s\n",
- "Icon file %s\n"
+ for (i = 0; i < ssize; i++)
+ {
+ printf("%s %s\n", strings[i], values[i]);
+ }
+ for (i = 0; i < intsize; i++)
+ {
+ printf("%s %d\n", intstrings[i], intvalues[i]);
+ }
+ for (i = 0, l = e->users.keys; l; l = l->next, i++)
+ {
+ if ((eu = evas_hash_find(e->users.hash, (char *) l->data)))
+ {
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
+ printf("%s %s\n", buf, eu->name);
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+ printf("%s %s\n", buf, eu->session);
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+ printf("%s %s\n", buf, eu->icon);
+ }
+ else
+ i--;
+ }
+ snprintf(buf, PATH_MAX, "/entrance/user/count");
+ printf("%s %d\n", buf, i);
+ for (i = 0, l = e->sessions.keys; l; l = l->next, i++)
+ {
+ if (l->data)
+ {
+ if ((exs = evas_hash_find(e->sessions.hash, (char *) l->data)))
+ {
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
+ printf("%s %s\n", buf, exs->name);
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
+ printf("%s %s\n", buf, exs->session);
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
+ printf("%s %s\n", buf, exs->icon);
+ }
+ }
+ }
+ snprintf(buf, PATH_MAX, "/entrance/session/count");
+ printf("%s %d\n", buf, i);
+}
+
+void
+entrance_config_edb_save(Entrance_Config * e, E_DB_File * db)
+{
+ int i = 0;
+ char buf[PATH_MAX];
+ Entrance_User *eu;
+ Entrance_X_Session *exs;
+ Evas_List *l = NULL;
+ char *strings[] = { "/entrance/theme",
+ "/entrance/pointer", "/entrance/date_format", "/entrance/time_format",
+ "/entrance/greeting/before", "/entrance/greeting/after"
};
+ char *values[] = { e->theme, e->pointer, e->date.string,
+ e->time.string, e->before.string, e->after.string
+ };
+ int ssize = sizeof(strings) / sizeof(char *);
+
+ char *intstrings[] = { "/entrance/engine", "/entrance/system/reboot",
+ "/entrance/system/halt", "/entrance/users/remember",
+ "/entrance/users/remember_n", "/entrance/auth"
+ };
+ int intvalues[] = { e->engine, e->reboot, e->halt, e->users.remember,
+ e->users.remember_n, e->auth
+ };
+ int intsize = sizeof(intstrings) / sizeof(int);
for (i = 0; i < ssize; i++)
{
- printf(strings[i], values[i]);
+ e_db_str_set(db, strings[i], values[i]);
}
for (i = 0; i < intsize; i++)
{
- printf(intstrings[i], intvalues[i]);
+ e_db_int_set(db, intstrings[i], intvalues[i]);
}
- for (l = e->users.keys; l; l = l->next)
+ for (i = 0, l = e->users.keys; l; l = l->next, i++)
{
if ((eu = evas_hash_find(e->users.hash, (char *) l->data)))
{
- printf(userstrings[0], eu->name);
- printf(userstrings[1], eu->session);
- printf(userstrings[2], eu->icon);
-
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
+ e_db_str_set(db, buf, eu->name);
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+ e_db_str_set(db, buf, eu->session);
+ snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+ e_db_str_set(db, buf, eu->icon);
}
+ else
+ i--;
}
- for (l = e->sessions.keys; l; l = l->next)
+ snprintf(buf, PATH_MAX, "/entrance/user/count");
+ e_db_int_set(db, buf, i);
+ for (i = 0, l = e->sessions.keys; l; l = l->next, i++)
{
- printf("\n%s\n", (char *) l->data);
- if ((str = evas_hash_find(e->sessions.icons, (char *) l->data)))
- printf("Session Icon File: %s\n", str);
- if ((str = evas_hash_find(e->sessions.hash, (char *) l->data)))
- printf("XSession exec string %s\n", str);
+ if (l->data)
+ {
+ if ((exs = evas_hash_find(e->sessions.hash, (char *) l->data)))
+ {
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
+ e_db_str_set(db, buf, exs->name);
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
+ e_db_str_set(db, buf, exs->session);
+ snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
+ e_db_str_set(db, buf, exs->icon);
+ }
+ }
+ }
+ snprintf(buf, PATH_MAX, "/entrance/session/count");
+ e_db_int_set(db, buf, i);
+}
+
+int
+entrance_config_save(Entrance_Config * e, const char *file)
+{
+ if (file)
+ {
+ char buf[PATH_MAX];
+ E_DB_File *db = NULL;
+
+ snprintf(buf, PATH_MAX, "%s.tmp.db", file);
+ if ((db = e_db_open(buf)))
+ {
+ entrance_config_edb_save(e, db);
+ e_db_close(db);
+ e_db_flush();
+ return (rename(buf, file));
+ }
+#if 0
+ else
+ {
+ entrance_config_print(e);
+ }
+#endif
}
+ return (1);
}
/**
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- entrance_config.h 7 Mar 2004 03:51:33 -0000 1.13
+++ entrance_config.h 10 Mar 2004 22:53:51 -0000 1.14
@@ -99,7 +99,6 @@
struct
{
Evas_Hash *hash;
- Evas_Hash *icons;
Evas_List *keys;
} sessions;
};
@@ -111,5 +110,6 @@
void entrance_config_free(Entrance_Config * e);
void entrance_config_prepend_recent_user(Entrance_Config * e, char *str);
void entrance_config_user_list_write(Entrance_Config * e);
+int entrance_config_save(Entrance_Config * e, const char *file);
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -3 -r1.40 -r1.41
--- entrance_session.c 7 Mar 2004 12:48:17 -0000 1.40
+++ entrance_session.c 10 Mar 2004 22:53:51 -0000 1.41
@@ -27,8 +27,6 @@
static void entrance_session_xsession_load(Entrance_Session * e,
const char *key);
-Evas_Object *entrance_session_xsession_edje_load(Entrance_Session * e,
- const char *key);
/**
* entrance_session_new: allocate a new Entrance_Session
* @param config - parse this config file instead of the normal system one
@@ -368,12 +366,15 @@
{
if (e && e->edje)
{
- char *str = NULL;
+ char buf[PATH_MAX];
+ Entrance_X_Session *exs = NULL;
Evas_Object *o = NULL, *old_o = NULL;
- if ((o = entrance_session_xsession_edje_load(e, key)))
+ if ((exs = evas_hash_find(e->config->sessions.hash, key)))
{
- if ((str = evas_hash_find(e->config->sessions.hash, key)))
+ snprintf(buf, PATH_MAX, PACKAGE_DATA_DIR "/themes/%s",
+ e->config->theme);
+ if ((o = entrance_x_session_edje_get(exs, e->edje, buf)))
{
if (e->session)
free(e->session);
@@ -448,7 +449,9 @@
void
entrance_session_list_add(Entrance_Session * e)
{
+ char buf[PATH_MAX];
Evas_List *l = NULL;
+ Entrance_X_Session *exs = NULL;
const char *key = NULL;
Evas_Coord w, h;
Evas_Object *edje = NULL;
@@ -476,12 +479,17 @@
e_container_direction_set(container, 1);
}
+ snprintf(buf, PATH_MAX, PACKAGE_DATA_DIR "/themes/%s",
+ e->config->theme);
for (l = e->config->sessions.keys; l; l = l->next)
{
key = (const char *) l->data;
- if ((edje = entrance_session_xsession_edje_load(e, key)))
+ if ((exs = evas_hash_find(e->config->sessions.hash, key)))
{
- e_container_element_append(container, edje);
+ if ((edje = entrance_x_session_edje_get(exs, e->edje, buf)))
+ {
+ e_container_element_append(container, edje);
+ }
}
}
edje_object_part_swallow(e->edje, "EntranceSessionList", container);
@@ -561,6 +569,7 @@
return (result);
}
+#if 0
/**
* given the key, try loading an instance
* of the "Session" group from the current theme. printf on failure. :(
@@ -587,7 +596,7 @@
icon = (char *) evas_hash_find(e->config->sessions.icons, key);
return (entrance_x_session_xsession_load(e->edje, buf, icon, key));
}
-
+#endif
/**
* _entrance_session_user_list_fix : update the user's list with the current
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_user.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- entrance_user.c 8 Mar 2004 16:59:00 -0000 1.7
+++ entrance_user.c 10 Mar 2004 22:53:51 -0000 1.8
@@ -39,7 +39,10 @@
{
memset(e, 0, sizeof(Entrance_User));
e->name = user;
- e->icon = icon;
+ if (icon)
+ e->icon = icon;
+ else
+ e->icon = strdup("default.eet");
e->session = session;
}
return (e);
@@ -128,7 +131,7 @@
}
else
{
- fprintf(stderr, "Failed on: %s(%s)\n", e->name, e->icon);
+ fprintf(stderr, "Failed on: %s(%s)\n", e->name, file);
evas_object_del(o);
o = NULL;
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_x_session.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- entrance_x_session.c 8 Mar 2004 16:59:00 -0000 1.3
+++ entrance_x_session.c 10 Mar 2004 22:53:51 -0000 1.4
@@ -8,6 +8,40 @@
extern void session_item_unselected_cb(void *data, Evas_Object * o,
const char *emission,
const char *source);
+Entrance_X_Session *
+entrance_x_session_new(char *name, char *icon, char *session)
+{
+ Entrance_X_Session *e = NULL;
+
+ if ((e = malloc(sizeof(Entrance_X_Session))))
+ {
+ memset(e, 0, sizeof(Entrance_X_Session));
+ e->name = name;
+ if (icon)
+ e->icon = icon;
+ else
+ e->icon = strdup("default.png");
+ e->session = session;
+ }
+ return (e);
+}
+
+void
+entrance_x_session_free(Entrance_X_Session * e)
+{
+ if (e)
+ {
+ if (e->name)
+ free(e->name);
+ if (e->icon)
+ free(e->icon);
+ if (e->session)
+ free(e->session);
+ free(e);
+ }
+
+}
+
/**
* given the filename, create a new evas object(edje or image) with the
* contents of file. file can either bea valid edje eet or anything your
@@ -17,7 +51,7 @@
* @param o - the entrance session you're working with
* @param file - the file in $pkgdatadir/images/sessions/ we want to load
*/
-Evas_Object *
+static Evas_Object *
entrance_x_session_icon_load(Evas_Object * o, const char *file)
{
Evas_Object *result = NULL;
@@ -53,15 +87,14 @@
}
Evas_Object *
-entrance_x_session_xsession_load(Evas_Object * o, const char *themefile,
- const char *icon, const char *name)
+entrance_x_session_edje_get(Entrance_X_Session * e, Evas_Object * o,
+ const char *themefile)
{
- char buf[PATH_MAX];
+ Evas_Coord w, h;
Evas_Object *oo = NULL;
Evas_Object *edje = NULL;
- Evas_Coord w, h;
- if (!o || !themefile || !icon || !name)
+ if (!o || !themefile || !e)
return (NULL);
edje = edje_object_add(evas_object_evas_get(o));
@@ -77,34 +110,26 @@
if (edje_object_part_exists(edje, "EntranceSessionIcon"))
{
- if ((oo = entrance_x_session_icon_load(o, icon)))
+ if ((oo = entrance_x_session_icon_load(o, e->icon)))
{
- if (!strcmp(evas_object_type_get(oo), "image"))
- {
- Evas_Coord w, h;
-
- edje_object_part_geometry_get(edje, "EntranceSessionIcon",
- NULL, NULL, &w, &h);
- evas_object_image_fill_set(oo, 0.0, 0.0, w, h);
- }
edje_object_part_swallow(edje, "EntranceSessionIcon", oo);
}
}
if (edje_object_part_exists(edje, "EntranceSessionTitle"))
{
- edje_object_part_text_set(edje, "EntranceSessionTitle", name);
+ edje_object_part_text_set(edje, "EntranceSessionTitle", e->name);
}
edje_object_signal_callback_add(edje, "SessionSelected", "",
session_item_selected_cb,
- (char *) name);
+ (Entrance_X_Session *) e);
edje_object_signal_callback_add(edje, "SessionUnSelected", "",
session_item_selected_cb,
- (char *) name);
+ (Entrance_X_Session *) e);
evas_object_show(edje);
}
else
{
- fprintf(stderr, "Failed on: %s\n", name);
+ fprintf(stderr, "Failed on: %s\n", themefile);
evas_object_del(edje);
edje = NULL;
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_x_session.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- entrance_x_session.h 7 Mar 2004 12:48:17 -0000 1.2
+++ entrance_x_session.h 10 Mar 2004 22:53:51 -0000 1.3
@@ -1,14 +1,30 @@
#ifndef ENTRANCE_X_SESSION_H
#define ENTRANCE_X_SESSION_H
/**
- * @file entrance_user.h
+ * @file entrance_x_session.h
* @brief Struct Definitions and shared function declarations
*/
#include <Evas.h>
-Evas_Object *entrance_x_session_xsession_load(Evas_Object * o,
- const char *themefile,
- const char *icon,
- const char *name);
+typedef struct _Entrance_X_Session Entrance_X_Session;
+
+/**
+ * @brief This contains all of the information we keep about X Sessions
+ */
+struct _Entrance_X_Session
+{
+ char *name;
+ char *icon;
+ char *session;
+ Evas_Object *edje;
+};
+
+Entrance_X_Session *entrance_x_session_new(char *name, char *icon,
+ char *session);
+void entrance_x_session_free(Entrance_X_Session * e);
+
+Evas_Object *entrance_x_session_edje_get(Entrance_X_Session * e,
+ Evas_Object * o,
+ const char *themefile);
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/main.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- main.c 8 Mar 2004 18:37:18 -0000 1.41
+++ main.c 10 Mar 2004 22:53:52 -0000 1.42
@@ -12,6 +12,7 @@
#include <Esmart/container.h>
#include "entrance.h"
#include "entrance_session.h"
+#include "entrance_x_session.h"
#include "EvasTextEntry.h"
#define WINW 800
@@ -313,7 +314,9 @@
{
if (session && data)
{
- entrance_session_xsession_set(session, (char *) data);
+ Entrance_X_Session *exs = (Entrance_X_Session *) data;
+
+ entrance_session_xsession_set(session, exs->name);
}
}
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs