summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornirav <nirav@teisuu.com>2019-03-10 07:44:01 +0530
committerDandelion <nirav@teisuu.com>2019-03-10 07:44:01 +0530
commitbd7b0be8978cfd30ac72cf36021153b2a7d68051 (patch)
treea6393364162428b614b79729903d4ac24cf32b38
parentc14d6af39dbf2353134ba8c99ce95a52207a2b45 (diff)
downloadap_client-bd7b0be8978cfd30ac72cf36021153b2a7d68051.tar.gz
ap_client-bd7b0be8978cfd30ac72cf36021153b2a7d68051.zip
Add form validation and loading animation
-rw-r--r--src/main.c55
1 files changed, 52 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index abf6ba0..b29b081 100644
--- a/src/main.c
+++ b/src/main.c
@@ -13,20 +13,24 @@ static GtkWidget *window;
static GtkWidget *box;
static GtkWidget *instance_name_box, *email_box, *password_box;
static GtkWidget *submit_button;
+static GtkWidget *spinner;
static void login_callback(bool success)
{
if (!success) {
fprintf(stderr, "login_callback(): login failed\n");
+ gtk_spinner_stop(GTK_SPINNER(spinner));
return;
}
printf("login success\n");
+ gtk_spinner_stop(GTK_SPINNER(spinner));
}
static void register_callback(bool success)
{
if (!success) {
+ gtk_spinner_stop(GTK_SPINNER(spinner));
fprintf(stderr, "register_callback(): register failed\n");
return;
}
@@ -36,16 +40,19 @@ static void register_callback(bool success)
email = gtk_entry_get_text(GTK_ENTRY(email_box));
password = gtk_entry_get_text(GTK_ENTRY(password_box));
- if(login(email, password, &login_callback)) {
+ if (login(email, password, &login_callback)) {
+ gtk_spinner_stop(GTK_SPINNER(spinner));
return;
}
}
-static void submit_login_form()
+static void submit_login_form()
{
+ gtk_spinner_start(GTK_SPINNER(spinner));
const char *instance_name;
instance_name = gtk_entry_get_text(GTK_ENTRY(instance_name_box));
- if(register_app(instance_name, &register_callback)) {
+ if (register_app(instance_name, &register_callback)) {
+ gtk_spinner_stop(GTK_SPINNER(spinner));
return;
}
}
@@ -55,6 +62,28 @@ static void submit_button_clicked(GtkButton *button, gpointer user_data)
submit_login_form();
}
+static void form_on_activate(GtkEntry *entry, gpointer user_data)
+{
+ submit_login_form();
+}
+
+static bool is_form_valid()
+{
+ if (strlen(gtk_entry_get_text(GTK_ENTRY(instance_name_box))) < 1 ||
+ strlen(gtk_entry_get_text(GTK_ENTRY(email_box))) < 1 ||
+ strlen(gtk_entry_get_text(GTK_ENTRY(password_box))) < 1)
+ return false;
+ return true;
+}
+
+static void on_form_changed(GtkWidget *widget, gpointer data)
+{
+ if (is_form_valid())
+ gtk_widget_set_sensitive(GTK_WIDGET(submit_button), true);
+ else
+ gtk_widget_set_sensitive(GTK_WIDGET(submit_button), false);
+}
+
static void activate(GtkApplication *app, gpointer user_data)
{
window = gtk_application_window_new(app);
@@ -69,23 +98,43 @@ static void activate(GtkApplication *app, gpointer user_data)
instance_name_box = gtk_entry_new();
gtk_entry_set_placeholder_text(
GTK_ENTRY(instance_name_box), "Instance domain");
+ g_signal_connect(GTK_ENTRY(instance_name_box), "activate",
+ G_CALLBACK(form_on_activate), NULL);
+ g_signal_connect(G_OBJECT(instance_name_box), "changed",
+ G_CALLBACK(on_form_changed), NULL);
email_box = gtk_entry_new();
gtk_entry_set_placeholder_text(GTK_ENTRY(email_box), "Email");
+ gtk_entry_set_input_purpose(GTK_ENTRY(email_box), GTK_INPUT_PURPOSE_EMAIL);
+ g_signal_connect(GTK_ENTRY(email_box), "activate",
+ G_CALLBACK(form_on_activate), NULL);
+ g_signal_connect(G_OBJECT(email_box), "changed",
+ G_CALLBACK(on_form_changed), NULL);
password_box = gtk_entry_new();
gtk_entry_set_placeholder_text(GTK_ENTRY(password_box), "Password");
+ gtk_entry_set_input_purpose(
+ GTK_ENTRY(password_box), GTK_INPUT_PURPOSE_PASSWORD);
+ gtk_entry_set_visibility(GTK_ENTRY(password_box), false);
+ g_signal_connect(GTK_ENTRY(password_box), "activate",
+ G_CALLBACK(form_on_activate), NULL);
+ g_signal_connect(G_OBJECT(password_box), "changed",
+ G_CALLBACK(on_form_changed), NULL);
submit_button = gtk_button_new();
g_signal_connect(GTK_BUTTON(submit_button), "clicked",
G_CALLBACK(submit_button_clicked), G_OBJECT(window));
gtk_button_set_label(GTK_BUTTON(submit_button), "Submit");
+ gtk_widget_set_sensitive(GTK_WIDGET(submit_button), false);
+
+ spinner = gtk_spinner_new();
gtk_container_add(GTK_CONTAINER(window), box);
gtk_container_add(GTK_CONTAINER(box), instance_name_box);
gtk_container_add(GTK_CONTAINER(box), email_box);
gtk_container_add(GTK_CONTAINER(box), password_box);
gtk_container_add(GTK_CONTAINER(box), submit_button);
+ gtk_container_add(GTK_CONTAINER(box), spinner);
gtk_widget_show_all(window);
}