[Goodies-commits] r6383 - in sion/trunk: . src

Enrico Troeger enrico at xfce.org
Mon Dec 29 19:16:45 CET 2008


Author: enrico
Date: 2008-12-29 18:16:45 +0000 (Mon, 29 Dec 2008)
New Revision: 6383

Modified:
   sion/trunk/ChangeLog
   sion/trunk/src/bookmarkdialog.c
   sion/trunk/src/bookmarkeditdialog.c
   sion/trunk/src/bookmarkeditdialog.h
   sion/trunk/src/common.c
   sion/trunk/src/common.h
   sion/trunk/src/window.c
   sion/trunk/src/window.h
Log:
Move sion_error_dialog() into common.c.
Implement basic input validation for the Bookmark Edit dialog.

Modified: sion/trunk/ChangeLog
===================================================================
--- sion/trunk/ChangeLog	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/ChangeLog	2008-12-29 18:16:45 UTC (rev 6383)
@@ -5,6 +5,10 @@
    Fix 'Create Bookmark' sensitiveness.
    When using 'Create Bookmark' show a dialog to edit the new bookmark
    before saving it.
+ * src/bookmarkdialog.c, src/bookmarkeditdialog.c, src/window.c,
+   src/bookmarkeditdialog.h, src/common.c, src/common.h, src/window.h:
+   Move sion_error_dialog() into common.c.
+   Implement basic input validation for the Bookmark Edit dialog.
 
 
 2008-12-28  Enrico Tröger  <enrico(at)xfce(dot)org>

Modified: sion/trunk/src/bookmarkdialog.c
===================================================================
--- sion/trunk/src/bookmarkdialog.c	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/bookmarkdialog.c	2008-12-29 18:16:45 UTC (rev 6383)
@@ -145,7 +145,7 @@
 	SionBookmarkDialogPrivate *priv = SION_BOOKMARK_DIALOG_GET_PRIVATE(dialog);
 	SionBookmark *bm = NULL;
 
-	if (gtk_dialog_run(GTK_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
+	if (sion_bookmark_edit_dialog_run(SION_BOOKMARK_EDIT_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
 	{
 		GtkTreeIter iter;
 
@@ -181,7 +181,7 @@
 	gtk_tree_model_get(GTK_TREE_MODEL(priv->store), &iter, COL_BMREF, &bm, -1);
 
 	edit_dialog = sion_bookmark_edit_dialog_new_with_bookmark(dialog, SION_BE_MODE_EDIT, bm);
-	if (gtk_dialog_run(GTK_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
+	if (sion_bookmark_edit_dialog_run(SION_BOOKMARK_EDIT_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
 	{
 		/* this fills the values of the dialog into 'bm' */
 		g_object_set(edit_dialog, "bookmark-update", bm, NULL);

Modified: sion/trunk/src/bookmarkeditdialog.c
===================================================================
--- sion/trunk/src/bookmarkeditdialog.c	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/bookmarkeditdialog.c	2008-12-29 18:16:45 UTC (rev 6383)
@@ -167,6 +167,72 @@
 }
 
 
+gint sion_bookmark_edit_dialog_run(SionBookmarkEditDialog *dialog)
+{
+	gint res;
+	gboolean error = FALSE;
+	SionBookmarkEditDialogPrivate *priv = SION_BOOKMARK_EDIT_DIALOG_GET_PRIVATE(dialog);
+	const gchar *tmp;
+
+	while (TRUE)
+	{
+		error = FALSE;
+		res = gtk_dialog_run(GTK_DIALOG(dialog));
+
+		if (res != GTK_RESPONSE_OK)
+			break;
+		// perform some error checking and don't return until entered values are sane
+		else
+		{
+			if (GTK_WIDGET_VISIBLE(priv->name_entry))
+			{	// check the name only if we are creating/editing a bookmark
+				tmp = gtk_entry_get_text(GTK_ENTRY(priv->name_entry));
+				if (! *tmp)
+				{
+					error = TRUE;
+					sion_error_dialog((gpointer)dialog,
+						_("You must enter a name for the bookmark."), NULL);
+				}
+			}
+			if (! error && gtk_widget_get_parent(priv->server_entry) != NULL)
+			{
+				tmp = gtk_entry_get_text(GTK_ENTRY(priv->server_entry));
+				if (! *tmp)
+				{
+					error = TRUE;
+					sion_error_dialog((gpointer)dialog,
+						_("You must enter a server address or name."), NULL);
+				}
+			}
+			if (! error && gtk_widget_get_parent(priv->share_entry) != NULL)
+			{
+				tmp = gtk_entry_get_text(GTK_ENTRY(priv->share_entry));
+				if (! *tmp)
+				{
+					error = TRUE;
+					sion_error_dialog((gpointer)dialog,
+						_("You must enter a share name."), NULL);
+				}
+			}
+			if (! error && gtk_widget_get_parent(priv->uri_entry) != NULL)
+			{
+				tmp = gtk_entry_get_text(GTK_ENTRY(priv->uri_entry));
+				if (! *tmp)
+				{
+					error = TRUE;
+					sion_error_dialog((gpointer)dialog,
+						_("You must enter a valid URI for the service."), NULL);
+				}
+			}
+			if (! error)
+				break;
+		}
+	}
+
+	return res;
+}
+
+
 static void sion_bookmark_edit_dialog_class_init(SionBookmarkEditDialogClass *klass)
 {
 	GtkObjectClass *gtk_object_class = (GtkObjectClass *)klass;
@@ -502,7 +568,7 @@
 
 
 /* Update the contents of the bookmark with the values from the dialog. */
-void update_bookmark(SionBookmarkEditDialog *dialog)
+static void update_bookmark(SionBookmarkEditDialog *dialog)
 {
 	SionBookmarkEditDialogPrivate *priv;
 	const gchar *tmp;
@@ -511,32 +577,33 @@
 
 	g_return_if_fail(dialog != NULL);
 
-	/// TODO do error checking, at the very least, don't allow empty bookmark names
-
 	priv = SION_BOOKMARK_EDIT_DIALOG_GET_PRIVATE(dialog);
 	g_return_if_fail(priv->bookmark_update != NULL);
+	g_return_if_fail(sion_bookmark_is_valid(priv->bookmark_update));
 
-	tmp = gtk_entry_get_text(GTK_ENTRY(priv->name_entry));
-	if (*tmp)
-		sion_bookmark_set_name(priv->bookmark_update, tmp);
-
 	if (! gtk_combo_box_get_active_iter(GTK_COMBO_BOX(priv->type_combo), &iter))
 		return;
 
 	gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(priv->type_combo)),
 			    &iter, COLUMN_INDEX, &idx, -1);
 
+	tmp = gtk_entry_get_text(GTK_ENTRY(priv->name_entry));
+	if (*tmp)	// the name might be empty if the dialog is used as a Connect dialog
+		sion_bookmark_set_name(priv->bookmark_update, tmp);
+
 	if (idx == -1)
 		idx = 0;
 	if (methods[idx].scheme == NULL)
+	{
+		sion_bookmark_set_name(priv->bookmark_update, "Custom");
 		sion_bookmark_set_uri(priv->bookmark_update, gtk_entry_get_text(GTK_ENTRY(priv->uri_entry)));
+	}
 	else
 	{
 		sion_bookmark_set_scheme(priv->bookmark_update, methods[idx].scheme);
 
 		tmp = gtk_entry_get_text(GTK_ENTRY(priv->server_entry));
-		if (*tmp)
-			sion_bookmark_set_host(priv->bookmark_update, tmp);
+		sion_bookmark_set_host(priv->bookmark_update, tmp);
 		tmp = gtk_entry_get_text(GTK_ENTRY(priv->user_entry));
 		sion_bookmark_set_user(priv->bookmark_update, tmp);
 		tmp = gtk_entry_get_text(GTK_ENTRY(priv->domain_entry));
@@ -673,8 +740,8 @@
 
 	priv->uri_entry = gtk_entry_new();
 	priv->server_entry = gtk_entry_new();
-	priv->port_spin = gtk_spin_button_new_with_range(0, 65536, 1);
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->port_spin), 0);
+	priv->port_spin = gtk_spin_button_new_with_range(0, 65535, 1);
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->port_spin), 0.0);
 	gtk_widget_set_tooltip_text(priv->port_spin, _("Set the port to 0 to use the default port."));
 	priv->user_entry = gtk_entry_new();
 	priv->domain_entry = gtk_entry_new();
@@ -688,6 +755,7 @@
 	priv->domain_label = gtk_label_new_with_mnemonic(_("_Domain:"));
 	priv->share_label = gtk_label_new_with_mnemonic(_("_Share:"));
 
+	gtk_entry_set_activates_default(GTK_ENTRY(priv->name_entry), TRUE);
 	gtk_entry_set_activates_default(GTK_ENTRY(priv->uri_entry), TRUE);
 	gtk_entry_set_activates_default(GTK_ENTRY(priv->server_entry), TRUE);
 	gtk_entry_set_activates_default(GTK_ENTRY(priv->port_spin), TRUE);
@@ -712,19 +780,18 @@
 }
 
 
-GtkWidget* sion_bookmark_edit_dialog_new(GtkWidget *parent, SionBookmarkEditDialogMode mode)
+GtkWidget *sion_bookmark_edit_dialog_new(GtkWidget *parent, SionBookmarkEditDialogMode mode)
 {
 	SionBookmarkEditDialog *dialog = g_object_new(SION_BOOKMARK_EDIT_DIALOG_TYPE,
 		"transient-for", parent,
 		"mode", mode,
 		NULL);
 
-
 	return GTK_WIDGET(dialog);
 }
 
 
-GtkWidget* sion_bookmark_edit_dialog_new_with_bookmark(GtkWidget *parent, SionBookmarkEditDialogMode mode, SionBookmark *bookmark)
+GtkWidget *sion_bookmark_edit_dialog_new_with_bookmark(GtkWidget *parent, SionBookmarkEditDialogMode mode, SionBookmark *bookmark)
 {
 	SionBookmarkEditDialog *dialog = g_object_new(SION_BOOKMARK_EDIT_DIALOG_TYPE,
 		"transient-for", parent,
@@ -732,7 +799,6 @@
 		"mode", mode,
 		NULL);
 
-
 	return GTK_WIDGET(dialog);
 }
 

Modified: sion/trunk/src/bookmarkeditdialog.h
===================================================================
--- sion/trunk/src/bookmarkeditdialog.h	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/bookmarkeditdialog.h	2008-12-29 18:16:45 UTC (rev 6383)
@@ -57,6 +57,7 @@
 GType		sion_bookmark_edit_dialog_get_type			(void);
 GtkWidget*	sion_bookmark_edit_dialog_new				(GtkWidget *parent, SionBookmarkEditDialogMode mode);
 GtkWidget*	sion_bookmark_edit_dialog_new_with_bookmark	(GtkWidget *parent, SionBookmarkEditDialogMode, SionBookmark *bookmark);
+gint		sion_bookmark_edit_dialog_run				(SionBookmarkEditDialog *dialog);
 
 G_END_DECLS
 

Modified: sion/trunk/src/common.c
===================================================================
--- sion/trunk/src/common.c	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/common.c	2008-12-29 18:16:45 UTC (rev 6383)
@@ -26,6 +26,8 @@
 
 #include "common.h"
 #include "main.h"
+#include "settings.h"
+#include "window.h"
 
 
 const gchar *sion_find_icon_name(const gchar *request, const gchar *fallback)
@@ -122,6 +124,21 @@
 }
 
 
+void sion_error_dialog(gpointer *parent, const gchar *text, const gchar *secondary)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT,
+                                  GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", text);
+	if (secondary != NULL)
+		gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", secondary);
+	gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
+	gtk_window_set_icon_name(GTK_WINDOW(dialog), sion_window_get_icon_name());
+	gtk_dialog_run(GTK_DIALOG(dialog));
+	gtk_widget_destroy(dialog);
+}
+
+
 /* Can open URLs and email addresses using xdg/exo/gnome-open */
 void sion_show_uri(const gchar *uri)
 {

Modified: sion/trunk/src/common.h
===================================================================
--- sion/trunk/src/common.h	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/common.h	2008-12-29 18:16:45 UTC (rev 6383)
@@ -60,4 +60,6 @@
 
 guint sion_get_default_port(const gchar *scheme);
 
+void sion_error_dialog(gpointer *parent, const gchar *text, const gchar *secondary);
+
 #endif /* __COMMON_H__ */

Modified: sion/trunk/src/window.c
===================================================================
--- sion/trunk/src/window.c	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/window.c	2008-12-29 18:16:45 UTC (rev 6383)
@@ -177,20 +177,6 @@
 }
 
 
-void sion_window_error_dialog(GtkWindow *parent, const gchar *text, const gchar *secondary)
-{
-	GtkWidget *dialog;
-
-	dialog = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT,
-                                  GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", text);
-	gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", secondary);
-	gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
-	gtk_window_set_icon_name(GTK_WINDOW(dialog), sion_window_get_icon_name());
-	gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
-}
-
-
 const gchar *sion_window_get_icon_name(void)
 {
 	static const gchar *icon_name = NULL;
@@ -296,20 +282,20 @@
 	if (! handled)
 	{
 		SionBookmark *bm = NULL;
-		GtkWidget *edit_dialog;
+		GtkWidget *dialog;
 
-		edit_dialog = sion_bookmark_edit_dialog_new(GTK_WIDGET(window), SION_BE_MODE_CONNECT);
-		if (gtk_dialog_run(GTK_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
+		dialog = sion_bookmark_edit_dialog_new(GTK_WIDGET(window), SION_BE_MODE_CONNECT);
+		if (sion_bookmark_edit_dialog_run(SION_BOOKMARK_EDIT_DIALOG(dialog)) == GTK_RESPONSE_OK)
 		{
 			bm = sion_bookmark_new();
 			/* this fills the values of the dialog into 'bm' */
-			g_object_set(edit_dialog, "bookmark-update", bm, NULL);
+			g_object_set(dialog, "bookmark-update", bm, NULL);
 
 			mount_from_bookmark(window, bm);
 
 			g_object_unref(bm);
 		}
-		gtk_widget_destroy(edit_dialog);
+		gtk_widget_destroy(dialog);
 	}
 }
 
@@ -591,7 +577,7 @@
 static void mount_operation_failed(SionBackendGVFS *backend, const gchar *message,
 								   const gchar *error_message, SionWindow *window)
 {
-	sion_window_error_dialog(GTK_WINDOW(window), message, error_message);
+	sion_error_dialog((gpointer) window, message, error_message);
 }
 
 
@@ -757,7 +743,8 @@
 					// not cancelled
 					edit_dialog = sion_bookmark_edit_dialog_new_with_bookmark(
 						GTK_WIDGET(window), SION_BE_MODE_EDIT, bm);
-					if (gtk_dialog_run(GTK_DIALOG(edit_dialog)) == GTK_RESPONSE_OK)
+					if (sion_bookmark_edit_dialog_run(SION_BOOKMARK_EDIT_DIALOG(edit_dialog)) ==
+						GTK_RESPONSE_OK)
 					{
 						// this fills the values of the dialog into 'bm'
 						g_object_set(edit_dialog, "bookmark-update", bm, NULL);

Modified: sion/trunk/src/window.h
===================================================================
--- sion/trunk/src/window.h	2008-12-29 18:16:17 UTC (rev 6382)
+++ sion/trunk/src/window.h	2008-12-29 18:16:45 UTC (rev 6383)
@@ -48,7 +48,6 @@
 GType		sion_window_get_type			(void);
 GtkWidget*	sion_window_new					(SionSettings *settings);
 
-void		sion_window_error_dialog		(GtkWindow *parent, const gchar *text, const gchar *secondary);
 void		sion_window_update_bookmarks	(SionWindow *window);
 
 




More information about the Goodies-commits mailing list