From 4caf3a4b7b1f07a1f1e0eafbea588801f6930f78 Mon Sep 17 00:00:00 2001 From: Julian Sparber Date: Sun, 18 Feb 2018 16:31:06 +0100 Subject: [PATCH] validated user input and disable button if the local device name is not correct --- src/teleport-window.c | 53 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/src/teleport-window.c b/src/teleport-window.c index 8010727..468dade 100644 --- a/src/teleport-window.c +++ b/src/teleport-window.c @@ -17,6 +17,7 @@ */ #include +#include #include "teleport-app.h" #include "teleport-window.h" @@ -59,6 +60,25 @@ change_download_directory_cb (GtkWidget *widget, g_free(newDownloadDir); } +static gboolean +valid_device_name (const gchar *name) { + if (strlen (name) == 0) + return FALSE; + return TRUE; +} + +static gchar * +get_new_name (GtkWidget *widget) { + return g_strstrip (g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)))); +} + +static void +on_new_device_name (GtkWidget *widget, + gpointer data) { + g_autofree gchar * name = get_new_name (widget); + gtk_widget_set_sensitive (GTK_WIDGET (data), valid_device_name (name)); +} + static void update_download_directory (GSettings *settings, gchar *key, @@ -73,9 +93,22 @@ static void on_click_this_device_settings_button (GtkWidget *widget, gpointer user_data) { TeleportWindowPrivate *priv = (TeleportWindowPrivate *) user_data; - g_settings_set_string (teleport_app_get_settings (), - "device-name", - gtk_entry_get_text (GTK_ENTRY (priv->this_device_settings_entry))); + g_autofree gchar * name = get_new_name (priv->this_device_settings_entry); + if (valid_device_name (name)) { + g_settings_set_string (teleport_app_get_settings (), + "device-name", + name); + gtk_popover_popdown (GTK_POPOVER (gtk_menu_button_get_popover (GTK_MENU_BUTTON (priv->this_device_settings_button)))); + } +} + +static void +on_show_popover (GtkPopover *widget, + gpointer data) { + TeleportWindowPrivate *priv = (TeleportWindowPrivate *) data; + gtk_entry_set_text(GTK_ENTRY (priv->this_device_settings_entry), + g_settings_get_string(teleport_app_get_settings (), + "device-name")); } static void @@ -100,7 +133,7 @@ teleport_window_init (TeleportWindow *win) g_settings_bind (settings, "device-name", priv->this_device_name_label, "label", - G_SETTINGS_BIND_DEFAULT); + G_SETTINGS_BIND_GET); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (downloadDir), g_settings_get_string(settings, @@ -130,6 +163,12 @@ teleport_window_init (TeleportWindow *win) g_signal_connect (priv->this_device_settings_entry, "activate", G_CALLBACK (on_click_this_device_settings_button), priv); + g_signal_connect (priv->this_device_settings_entry, + "changed", G_CALLBACK (on_new_device_name), gtk_builder_get_object (builder, "this_device_settings_button")); + + g_signal_connect (menu, + "show", G_CALLBACK (on_show_popover), priv); + g_object_unref (builder); } @@ -179,12 +218,6 @@ update_remote_device_list_remove(TeleportWindow *win, static void teleport_window_dispose (GObject *object) { - TeleportWindow *win; - TeleportWindowPrivate *priv; - - win = TELEPORT_WINDOW (object); - priv = teleport_window_get_instance_private (win); - G_OBJECT_CLASS (teleport_window_parent_class)->dispose (object); }