changeset 8502:48112dfe1179

[gaim-migrate @ 9238] -Don't let people create "empty" away messages containing only html -Fix a 20 byte memleak when closing a Create Away Message dialog with cancel or the window manager "X" committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 25 Mar 2004 06:44:52 +0000
parents 9f1678878dc8
children 4c3ec649fd7d
files src/dialogs.c
diffstat 1 files changed, 22 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/dialogs.c	Thu Mar 25 05:11:24 2004 +0000
+++ b/src/dialogs.c	Thu Mar 25 06:44:52 2004 +0000
@@ -118,7 +118,6 @@
 	gtk_widget_destroy(dest);
 }
 
-
 void destroy_all_dialogs()
 {
 	while (dialogwindows)
@@ -647,6 +646,17 @@
 /*  The dialog for new away messages                                      */
 /*------------------------------------------------------------------------*/
 
+static void away_mess_destroy(GtkWidget *widget, struct create_away *ca)
+{
+	destroy_dialog(NULL, ca->window);
+	g_free(ca);
+}
+
+static void away_mess_destroy_ca(GtkWidget *widget, GdkEvent *event, struct create_away *ca)
+{
+	away_mess_destroy(NULL, ca);
+}
+
 static struct away_message *save_away_message(struct create_away *ca)
 {
 	struct away_message *am;
@@ -675,7 +685,7 @@
 
 int check_away_mess(struct create_away *ca, int type)
 {
-	char *msg;
+	gchar *msg;
 	if ((strlen(gtk_entry_get_text(GTK_ENTRY(ca->entry))) == 0) && (type == 1)) {
 		/* We shouldn't allow a blank title */
 		gaim_notify_error(NULL, NULL,
@@ -686,9 +696,9 @@
 		return 0;
 	}
 
-	msg = gtk_imhtml_get_markup(GTK_IMHTML(ca->text));
+	msg = gtk_imhtml_get_text(GTK_IMHTML(ca->text));
 
-	if (!msg && (type <= 1)) {
+	if ((type <= 1) && ((msg == NULL) || (*msg == '\0'))) {
 		/* We shouldn't allow a blank message */
 		gaim_notify_error(NULL, NULL,
 						  _("You cannot create an empty away message"), NULL);
@@ -706,8 +716,8 @@
 		return;
 
 	save_away_message(ca);
-	destroy_dialog(NULL, ca->window);
-	g_free(ca);
+
+	away_mess_destroy(NULL, ca);
 }
 
 void use_away_mess(GtkWidget *widget, struct create_away *ca)
@@ -726,17 +736,17 @@
 
 	do_away_message(NULL, &am);
 
-	destroy_dialog(NULL, ca->window);
-	g_free(ca);
+	away_mess_destroy(NULL, ca);
 }
 
 void su_away_mess(GtkWidget *widget, struct create_away *ca)
 {
 	if (!check_away_mess(ca, 1))
 		return;
+
 	do_away_message(NULL, save_away_message(ca));
-	destroy_dialog(NULL, ca->window);
-	g_free(ca);
+
+	away_mess_destroy(NULL, ca);
 }
 
 void create_away_mess(GtkWidget *widget, void *dummy)
@@ -755,7 +765,7 @@
 	gtk_window_set_role(GTK_WINDOW(ca->window), "away_mess");
 	gtk_window_set_title(GTK_WINDOW(ca->window), _("New away message"));
 	g_signal_connect(G_OBJECT(ca->window), "delete_event",
-			   G_CALLBACK(destroy_dialog), ca->window);
+			   G_CALLBACK(away_mess_destroy_ca), ca);
 
 	/*
 	 * This would be higgy... but I think it's pretty ugly  --Mark
@@ -839,7 +849,7 @@
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 
 	button = gaim_pixbuf_button_from_stock(_("Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL);
-	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(destroy_dialog), ca->window);
+	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(away_mess_destroy), ca);
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 
 	gtk_widget_show_all(ca->window);