[gaim-migrate @ 10349]

Tue, 13 Jul 2004 03:20:46 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 13 Jul 2004 03:20:46 +0000
changeset 9522
e38381bd8c05
parent 9521
9c611a48614b
child 9523
a3776f892325

[gaim-migrate @ 10349]
gtk2.4 file chooserifying gtkimhtmltoolbar.c
I decided not to use gaim_request_file() here. There wasn't a lot
of other Gaim code in gtkimhtmltoolbar.c, and I figured it was
easy enough not to add to it. Besides, this dialog should have an
image preview, and to do that you can't use gtknotify.c
(not without modifying gtknotify.c, anyway, but that's out of the
scope of my changes)

src/gtkimhtmltoolbar.c file | annotate | diff | comparison | revisions
--- a/src/gtkimhtmltoolbar.c	Tue Jul 13 02:07:28 2004 +0000
+++ b/src/gtkimhtmltoolbar.c	Tue Jul 13 03:20:46 2004 +0000
@@ -422,86 +422,103 @@
 
 
 static void
-do_insert_image_cb(GtkWidget *widget, int resp, GtkIMHtmlToolbar *toolbar)
+do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar)
 {
-	char *name, *filename;
-	char *buf, *filedata;
+	gchar *filename, *name, *buf;
+	char *filedata;
 	size_t size;
 	GError *error = NULL;
 	int id;
 	GtkTextIter iter;
 	GtkTextMark *ins;
 
-	if (resp != GTK_RESPONSE_OK) {
+#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
+	if (response != GTK_RESPONSE_ACCEPT) {
+#else /* FILECHOOSER */
+	if (response != GTK_RESPONSE_OK) {
+#endif /* FILECHOOSER */
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 		return;
 	}
 
-	name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
+#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
+	filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
+#else /* FILECHOOSER */
+	filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
+#endif /* FILECHOOSER */
 
-	if (!name) {
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
-		return;
-	}
-
-	if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) {
-		g_free(name);
+	if (filename == NULL) {
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 		return;
 	}
 
+#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
+	if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(widget))) {
+		g_free(filename);
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
+		return;
+	}
+#endif /* FILECHOOSER */
+
+	/* The following triggers a callback that closes the widget */
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 
-	if (!g_file_get_contents(name, &filedata, &size, &error)) {
+	if (!g_file_get_contents(filename, &filedata, &size, &error)) {
 		gaim_notify_error(NULL, NULL, error->message, NULL);
 
 		g_error_free(error);
-		g_free(name);
+		g_free(filename);
 
 		return;
 	}
 
-	filename = name;
-	while (strchr(filename, '/'))
-		filename = strchr(filename, '/') + 1;
+	name = strrchr(filename, G_DIR_SEPARATOR) + 1;
 
-	id = gaim_imgstore_add(filedata, size, filename);
+	id = gaim_imgstore_add(filedata, size, name);
 	g_free(filedata);
 
-	if (!id) {
-		buf = g_strdup_printf(_("Failed to store image: %s\n"), name);
+	if (id == 0) {
+		buf = g_strdup_printf(_("Failed to store image: %s\n"), filename);
 		gaim_notify_error(NULL, NULL, buf, NULL);
 
 		g_free(buf);
-		g_free(name);
+		g_free(filename);
 
 		return;
 	}
 
+	g_free(filename);
+
 	ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)));
 	gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)),
-	                                 &iter, ins);
+									 &iter, ins);
 	gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter);
 	gaim_imgstore_unref(id);
-	
-	g_free(name);
 }
 
 
 static void
 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar)
 {
-	char buf[BUF_LONG];
 	GtkWidget *window;
 
 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) {
+#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
+		window = gtk_file_chooser_dialog_new(_("Insert Image"),
+						NULL,
+						GTK_FILE_CHOOSER_ACTION_OPEN,
+						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+						GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+						NULL);
+		gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT);
+		g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)),
+				"response", G_CALLBACK(do_insert_image_cb), toolbar);
+#else /* FILECHOOSER */
 		window = gtk_file_selection_new(_("Insert Image"));
-		g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir());
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
-
 		gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK);
 		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)),
 				"response", G_CALLBACK(do_insert_image_cb), toolbar);
+#endif /* FILECHOOSER */
 
 		gtk_widget_show(window);
 		toolbar->image_dialog = window;
@@ -509,6 +526,7 @@
 		gtk_widget_destroy(toolbar->image_dialog);
 		toolbar->image_dialog = NULL;
 	}
+
 	gtk_widget_grab_focus(toolbar->imhtml);
 }
 

mercurial