changeset 5959:0a2a32b1917c

[gaim-migrate @ 6405] Some minor UI fixes from yours truely: -Closing a conversation that has a "select image to insert" dialog open now also closes and frees the "select image to insert" dialog. -The buddy icon selection dialog now lets you type, eg "~/.gaim/icons" and hit enter without it thinking you've selected "~/.gaim/icons" as your buddy icon. It will instead change the icon selection dialog to that directory. -Same for the "select file to send" dialog. -Same for the right-click-on-an-icon "save icon" dialog. -Same for the right-click-on-an-IM-image "save image" dialog. -Same for buddy pounce "select sound" and "select program" dialogs. I think there is a small leak here, but I don't have time to figure it out. Someone should memprof this. I think it's gtkpounce.c line 140. -Same for toc's "select file to send" dialog. This needs to change-- toc has gtk code in it. -Made file_is_dir() accept a GtkFileSelection rather than a GtkWidget (there is no reason it would need to accept anything other than a GtkFileSelection) -Some minor pounce dialog memleak fixes, I think. The hash table wasn't getting freed on cancel. Line 4960 of gtkconv.c might be leaking somehow. Someone should look into that. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 26 Jun 2003 02:01:56 +0000
parents b432fa240263
children 03bf7c905782
files src/dialogs.c src/gtkaccount.c src/gtkconv.c src/gtkft.c src/gtkimhtml.c src/gtkpounce.c src/gtkprefs.c src/gtkutils.c src/protocols/toc/toc.c src/ui.h
diffstat 10 files changed, 37 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/dialogs.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/dialogs.c	Thu Jun 26 02:01:56 2003 +0000
@@ -2495,7 +2495,7 @@
 
 		strncpy(path, file, PATHSIZE - 1);
 
-		if (file_is_dir(path, gtkconv->dialogs.log))
+		if (file_is_dir(path, GTK_FILE_SELECTION(gtkconv->dialogs.log)))
 			return;
 
 		l = (struct log_conversation *)g_new0(struct log_conversation, 1);
@@ -3806,7 +3806,7 @@
 
 	file = (const char*)gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel));
 	strncpy(path, file, PATHSIZE - 1);
-	if (file_is_dir(path, filesel))
+	if (file_is_dir(path, GTK_FILE_SELECTION(filesel)))
 		return;
 
 	if ((fp_new = fopen(path, "w")) == NULL) {
@@ -4504,7 +4504,7 @@
 	return button;
 }
 
-int file_is_dir(const char *path, GtkWidget *w)
+int file_is_dir(const char *path, GtkFileSelection *w)
 {
 	struct stat st;
 	char *name;
@@ -4516,7 +4516,7 @@
 		} else {
 			name = g_strdup(path);
 		}
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(w), name);
+		gtk_file_selection_set_filename(w, name);
 		g_free(name);
 		return 1;
 	}
--- a/src/gtkaccount.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkaccount.c	Thu Jun 26 02:01:56 2003 +0000
@@ -217,6 +217,10 @@
 {
 	const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel));
 
+	/* If they typed in a directory, change there */
+	if (file_is_dir(filename, GTK_FILE_SELECTION(dialog->buddy_icon_filesel)))
+		return;
+
 	if (dialog->account) {
 		const char *username;
 		struct buddy *b;
--- a/src/gtkconv.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkconv.c	Thu Jun 26 02:01:56 2003 +0000
@@ -149,7 +149,7 @@
 
 	filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
 
-	if (file_is_dir(filename, wid))
+	if (file_is_dir(filename, GTK_FILE_SELECTION(wid)))
 		return;
 
 	if (!((gaim_conversation_get_type(c) != GAIM_CONV_CHAT &&
@@ -189,7 +189,7 @@
 	name    = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
 	id      = g_slist_length(im->images) + 1;
 	
-	if (file_is_dir(name, wid))
+	if (file_is_dir(name, GTK_FILE_SELECTION(wid)))
 		return;
 
 	gtk_widget_destroy(wid);
@@ -4134,6 +4134,9 @@
 	if (gtkconv->dialogs.font != NULL)
 		gtk_widget_destroy(gtkconv->dialogs.font);
 
+	if (gtkconv->dialogs.image != NULL)
+		gtk_widget_destroy(gtkconv->dialogs.image);
+
 	if (gtkconv->dialogs.smiley != NULL)
 		gtk_widget_destroy(gtkconv->dialogs.smiley);
 
--- a/src/gtkft.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkft.c	Thu Jun 26 02:01:56 2003 +0000
@@ -996,6 +996,9 @@
 
 	name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->filesel));
 
+	if (file_is_dir(name, GTK_FILE_SELECTION(data->filesel)))
+		return;
+
 	if (stat(name, &st) != 0) {
 		/* File not found. */
 		if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) {
--- a/src/gtkimhtml.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkimhtml.c	Thu Jun 26 02:01:56 2003 +0000
@@ -1618,7 +1618,12 @@
 	GError *error = NULL;
 #if GTK_CHECK_VERSION(2,2,0)
 	GSList *formats = gdk_pixbuf_get_formats();
+#endif
 
+	if (file_is_dir(filename, GTK_FILE_SELECTION(sel)))
+		return;
+
+#if GTK_CHECK_VERSION(2,2,0)
 	while(formats){
 		GdkPixbufFormat *format = formats->data;
 		gchar **extensions = gdk_pixbuf_format_get_extensions(format);
--- a/src/gtkpounce.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkpounce.c	Thu Jun 26 02:01:56 2003 +0000
@@ -110,17 +110,22 @@
 {
 	const char *filename;
 	GHashTable *args;
+	GtkFileSelection *filesel;
 
 	args = (GHashTable *)data;
+	filesel = GTK_FILE_SELECTION(g_hash_table_lookup(args, "filesel"));
 
-	filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(
-				g_hash_table_lookup(args, "filesel")));
+	filename = gtk_file_selection_get_filename(filesel);
+
+	if (file_is_dir(filename, filesel))
+		return;
 
 	if (filename != NULL)
 		gtk_entry_set_text(GTK_ENTRY(g_hash_table_lookup(args, "entry")),
 						   filename);
 
-	g_free(args);
+	gtk_widget_destroy(GTK_WIDGET(filesel));
+	g_hash_table_destroy(args);
 }
 
 static void
@@ -138,18 +143,16 @@
 	gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel));
 	gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(filesel), FALSE);
 
-	args = g_hash_table_new(g_str_hash,g_str_equal);
+	args = g_hash_table_new(g_str_hash, g_str_equal);
 	g_hash_table_insert(args, "filesel", filesel);
 	g_hash_table_insert(args, "entry",   entry);
 
 	g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
 					 "clicked",
 					 G_CALLBACK(pounce_update_entryfields), args);
-
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
+	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
 							 "clicked",
-							 G_CALLBACK(gtk_widget_destroy), filesel);
-
+							 G_CALLBACK(g_hash_table_destroy), args);
 	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
 							 "clicked",
 							 G_CALLBACK(gtk_widget_destroy), filesel);
--- a/src/gtkprefs.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkprefs.c	Thu Jun 26 02:01:56 2003 +0000
@@ -1918,7 +1918,7 @@
 	file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(sounddialog));
 
 	/* If they type in a directory, change there */
-	if (file_is_dir(file, sounddialog))
+	if (file_is_dir(file, GTK_FILE_SELECTION(sounddialog)))
 		return;
 
 	/* Set it -- and forget it */
--- a/src/gtkutils.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/gtkutils.c	Thu Jun 26 02:01:56 2003 +0000
@@ -265,7 +265,7 @@
 	f = gtk_file_selection_get_filename(
 		GTK_FILE_SELECTION(gtkconv->u.im->save_icon));
 
-	if (file_is_dir(f, gtkconv->u.im->save_icon))
+	if (file_is_dir(f, GTK_FILE_SELECTION(gtkconv->u.im->save_icon)))
 		return;
 
 	if ((file = fopen(f, "w")) != NULL) {
--- a/src/protocols/toc/toc.c	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/protocols/toc/toc.c	Thu Jun 26 02:01:56 2003 +0000
@@ -1646,7 +1646,7 @@
 	GaimAccount *account;
 	char buf[BUF_LEN * 2];
 
-	if (file_is_dir(dirname, old_ft->window))
+	if (file_is_dir(dirname, GTK_FILE_SELECTION(old_ft->window)))
 		return;
 	ft = g_new0(struct file_transfer, 1);
 	if (old_ft->files == 1)
@@ -1845,7 +1845,7 @@
 	GaimAccount *account;
 	char *buf, buf2[BUF_LEN * 2];
 
-	if (file_is_dir(dirname, old_ft->window))
+	if (file_is_dir(dirname, GTK_FILE_SELECTION(old_ft->window)))
 		return;
 	ft = g_new0(struct file_transfer, 1);
 	ft->filename = g_strdup(dirname);
--- a/src/ui.h	Wed Jun 25 22:30:49 2003 +0000
+++ b/src/ui.h	Thu Jun 26 02:01:56 2003 +0000
@@ -228,7 +228,7 @@
 extern GtkWidget *gaim_pixbuf_button(char *, char *, GaimButtonOrientation);
 extern GtkWidget *gaim_pixbuf_button_from_stock(const char *, const char *, GaimButtonOrientation);
 extern GtkWidget *gaim_pixbuf_toolbar_button_from_stock(char *);
-extern int file_is_dir(const char *, GtkWidget *);
+extern int file_is_dir(const char *, GtkFileSelection *);
 extern void update_privacy_connections();
 extern void show_privacy_options();
 extern void build_allow_list();