Mercurial > pidgin
changeset 9522:4399fc6e667a
[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 <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 13 Jul 2004 03:20:46 +0000 |
parents | 9b2f1444811f |
children | be96293982d2 |
files | src/gtkimhtmltoolbar.c |
diffstat | 1 files changed, 46 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- 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); }