|
@@ -22,9 +22,12 @@
|
|
|
struct _IridiumSigninDialog
|
|
struct _IridiumSigninDialog
|
|
|
{
|
|
{
|
|
|
GtkDialog parent_instance;
|
|
GtkDialog parent_instance;
|
|
|
|
|
+ GtkWidget *sign_in_button;
|
|
|
GtkEntry *server_entry;
|
|
GtkEntry *server_entry;
|
|
|
GtkEntry *email_entry;
|
|
GtkEntry *email_entry;
|
|
|
GtkEntry *password_entry;
|
|
GtkEntry *password_entry;
|
|
|
|
|
+ GRegex *url_regex;
|
|
|
|
|
+ GRegex *email_regex;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
G_DEFINE_TYPE (IridiumSigninDialog, iridium_signin_dialog, GTK_TYPE_DIALOG)
|
|
G_DEFINE_TYPE (IridiumSigninDialog, iridium_signin_dialog, GTK_TYPE_DIALOG)
|
|
@@ -53,22 +56,105 @@ iridium_signin_dialog_get_password (IridiumSigninDialog *dialog)
|
|
|
return gtk_entry_get_text (dialog->password_entry);
|
|
return gtk_entry_get_text (dialog->password_entry);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static gboolean
|
|
|
|
|
+password_entry_valid (IridiumSigninDialog *dialog)
|
|
|
|
|
+{
|
|
|
|
|
+ return gtk_entry_get_text_length (dialog->password_entry) > 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static gboolean
|
|
|
|
|
+server_entry_valid (IridiumSigninDialog *dialog)
|
|
|
|
|
+{
|
|
|
|
|
+ return g_regex_match (dialog->url_regex, gtk_entry_get_text (dialog->server_entry), 0, NULL);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static gboolean
|
|
|
|
|
+email_entry_valid (IridiumSigninDialog *dialog)
|
|
|
|
|
+{
|
|
|
|
|
+ return g_regex_match (dialog->email_regex, gtk_entry_get_text (dialog->email_entry), 0, NULL);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static gboolean
|
|
|
|
|
+entries_valid (IridiumSigninDialog *dialog)
|
|
|
|
|
+{
|
|
|
|
|
+ return server_entry_valid (dialog) &&
|
|
|
|
|
+ email_entry_valid (dialog) &&
|
|
|
|
|
+ password_entry_valid (dialog);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+set_sign_in_button_sensitivity (IridiumSigninDialog *dialog)
|
|
|
|
|
+{
|
|
|
|
|
+ gtk_widget_set_sensitive (dialog->sign_in_button, entries_valid (dialog));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+on_server_entry_changed (IridiumSigninDialog *dialog,
|
|
|
|
|
+ gpointer user_data)
|
|
|
|
|
+{
|
|
|
|
|
+ gtk_entry_set_icon_from_icon_name (dialog->server_entry, 0,
|
|
|
|
|
+ server_entry_valid (dialog) ? NULL : "dialog-warning");
|
|
|
|
|
+
|
|
|
|
|
+ set_sign_in_button_sensitivity (dialog);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+on_email_entry_changed (IridiumSigninDialog *dialog,
|
|
|
|
|
+ gpointer user_data)
|
|
|
|
|
+{
|
|
|
|
|
+ gtk_entry_set_icon_from_icon_name (dialog->email_entry, 0,
|
|
|
|
|
+ email_entry_valid (dialog) ? NULL : "dialog-warning");
|
|
|
|
|
+
|
|
|
|
|
+ set_sign_in_button_sensitivity (dialog);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+on_password_entry_changed (IridiumSigninDialog *dialog,
|
|
|
|
|
+ gpointer user_data)
|
|
|
|
|
+{
|
|
|
|
|
+ gtk_entry_set_icon_from_icon_name (dialog->password_entry, 0,
|
|
|
|
|
+ password_entry_valid (dialog) ? NULL : "dialog-warning");
|
|
|
|
|
+
|
|
|
|
|
+ set_sign_in_button_sensitivity (dialog);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
+iridium_signin_finalize (GObject *object)
|
|
|
|
|
+{
|
|
|
|
|
+ IridiumSigninDialog *self;
|
|
|
|
|
+
|
|
|
|
|
+ self = IRIDIUM_SIGNIN_DIALOG (object);
|
|
|
|
|
+ g_regex_unref (self->url_regex);
|
|
|
|
|
+ g_regex_unref (self->email_regex);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static void
|
|
static void
|
|
|
iridium_signin_dialog_class_init (IridiumSigninDialogClass *klass)
|
|
iridium_signin_dialog_class_init (IridiumSigninDialogClass *klass)
|
|
|
{
|
|
{
|
|
|
|
|
+ GObjectClass *oclass;
|
|
|
GtkWidgetClass *widget_class;
|
|
GtkWidgetClass *widget_class;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ oclass = G_OBJECT_CLASS (klass);
|
|
|
widget_class = GTK_WIDGET_CLASS (klass);
|
|
widget_class = GTK_WIDGET_CLASS (klass);
|
|
|
|
|
|
|
|
|
|
+ oclass->finalize = iridium_signin_finalize;
|
|
|
|
|
+
|
|
|
gtk_widget_class_set_template_from_resource (widget_class, "/net/bloerg/Iridium/iridium-signin-dialog.ui");
|
|
gtk_widget_class_set_template_from_resource (widget_class, "/net/bloerg/Iridium/iridium-signin-dialog.ui");
|
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, server_entry);
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, server_entry);
|
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, email_entry);
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, email_entry);
|
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, password_entry);
|
|
gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, password_entry);
|
|
|
|
|
+ gtk_widget_class_bind_template_child (widget_class, IridiumSigninDialog, sign_in_button);
|
|
|
|
|
+
|
|
|
|
|
+ gtk_widget_class_bind_template_callback (widget_class, on_server_entry_changed);
|
|
|
|
|
+ gtk_widget_class_bind_template_callback (widget_class, on_email_entry_changed);
|
|
|
|
|
+ gtk_widget_class_bind_template_callback (widget_class, on_password_entry_changed);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
static void
|
|
|
iridium_signin_dialog_init (IridiumSigninDialog *self)
|
|
iridium_signin_dialog_init (IridiumSigninDialog *self)
|
|
|
{
|
|
{
|
|
|
gtk_widget_init_template (GTK_WIDGET (self));
|
|
gtk_widget_init_template (GTK_WIDGET (self));
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
|
|
+ self->url_regex = g_regex_new ("https?:\\/\\/[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)", 0, 0, NULL);
|
|
|
|
|
+ self->email_regex = g_regex_new (".+@.+\\..+", 0, 0, NULL);
|
|
|
|
|
+}
|