const char *(*get)(void);
/** @brief Set a new value */
- void (*set)(const char *value);
+ void (*set)(struct config *c, const char *value);
/** @brief Flags
*
static const char *get_username(void) { return config->username; }
static const char *get_password(void) { return config->password ? config->password : ""; }
-static void set_hostname(const char *s) { config->connect.s[0] = (char *)s; }
-static void set_service(const char *s) { config->connect.s[1] = (char *)s; }
-static void set_username(const char *s) { config->username = s; }
-static void set_password(const char *s) { config->password = s; }
+static void set_hostname(struct config *c, const char *s) {
+ c->connect.s[0] = (char *)s;
+}
+
+static void set_service(struct config *c, const char *s) {
+ c->connect.s[1] = (char *)s;
+}
+
+static void set_username(struct config *c, const char *s) {
+ c->username = s;
+}
+
+static void set_password(struct config *c, const char *s) {
+ c->password = s;
+}
/** @brief Table used to generate the form */
static const struct login_window_item lwis[] = {
static GtkWidget *lwi_entry[NLWIS];
-static void login_update_config(void) {
+static void login_update_config(struct config *c) {
size_t n;
+ if(c->connect.n < 2) {
+ c->connect.n = 2;
+ c->connect.s = xcalloc(2, sizeof (char *));
+ }
for(n = 0; n < NLWIS; ++n)
- lwis[n].set(xstrdup(gtk_entry_get_text(GTK_ENTRY(lwi_entry[n]))));
+ lwis[n].set(c, xstrdup(gtk_entry_get_text(GTK_ENTRY(lwi_entry[n]))));
}
/** @brief Save current login details */
static void login_ok(GtkButton attribute((unused)) *button,
gpointer attribute((unused)) userdata) {
disorder_client *c;
+ struct config *tmpconfig = xmalloc(sizeof *tmpconfig);
/* Copy the new config into @ref config */
- login_update_config();
+ login_update_config(tmpconfig);
/* Attempt a login with the new details */
c = disorder_new(0);
- if(!disorder_connect(c)) {
+ if(!disorder_connect_generic(tmpconfig, c,
+ tmpconfig->username, tmpconfig->password,
+ NULL/*cookie*/)) {
/* Success; save the config and start using it */
+ login_update_config(config);
login_save_config();
logged_in();
/* Pop down login window */
G_CALLBACK(gtk_widget_destroyed), &login_window);
gtk_window_set_title(GTK_WINDOW(login_window), "Login Details");
/* Construct the form */
- table = gtk_table_new(NLWIS + 1/*rows*/, 2/*columns*/, FALSE/*homogenous*/);
+ table = gtk_table_new(NLWIS/*rows*/, 2/*columns*/, FALSE/*homogenous*/);
gtk_widget_set_style(table, tool_style);
for(n = 0; n < NLWIS; ++n) {
label = gtk_label_new(lwis[n].description);