# HG changeset patch # User Mark Doliner # Date 1089688846 0 # Node ID 4399fc6e667ac22770e04d0a3a7484653b6c0bcd # Parent 9b2f1444811fbcb1e7f4bd2d769d9a9cc0767245 [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) committer: Tailor Script diff -r 9b2f1444811f -r 4399fc6e667a src/gtkimhtmltoolbar.c --- 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); }