qulogic/pidgin

Fixup Insert Image functionality.

2012-06-05, Elliott Sales de Andrade
d21ab88ad911
Parents 509c717fcf6e
Children cfa94708af72
Fixup Insert Image functionality.
--- a/pidgin/gtkwebview.c Tue Jun 05 06:15:26 2012 +0000
+++ b/pidgin/gtkwebview.c Tue Jun 05 06:17:48 2012 +0000
@@ -1052,3 +1052,19 @@
g_free(link);
}
+void
+gtk_webview_insert_image(GtkWebView *webview, int id)
+{
+ GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
+ WebKitDOMDocument *dom;
+ char *img;
+
+ dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
+ img = g_strdup_printf("<img src='%s'/>", get_image_src_from_id(priv, id));
+
+ priv->edit.block_changed = TRUE;
+ webkit_dom_document_exec_command(dom, "insertHTML", FALSE, img);
+ priv->edit.block_changed = FALSE;
+ g_free(img);
+}
+
--- a/pidgin/gtkwebview.h Tue Jun 05 06:15:26 2012 +0000
+++ b/pidgin/gtkwebview.h Tue Jun 05 06:17:48 2012 +0000
@@ -429,6 +429,14 @@
*/
void gtk_webview_insert_link(GtkWebView *webview, const char *url, const char *desc);
+/**
+ * Inserts an image at the current location or selection in a GtkWebView.
+ *
+ * @param webview The GtkWebView
+ * @param id The PurpleStoredImage id
+ */
+void gtk_webview_insert_image(GtkWebView *webview, int id);
+
G_END_DECLS
#endif /* _PIDGIN_WEBVIEW_H_ */
--- a/pidgin/gtkwebviewtoolbar.c Tue Jun 05 06:15:26 2012 +0000
+++ b/pidgin/gtkwebviewtoolbar.c Tue Jun 05 06:17:48 2012 +0000
@@ -540,27 +540,22 @@
static void
do_insert_image_cb(GtkWidget *widget, int response, GtkWebViewToolbar *toolbar)
{
-#if 0
GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
- gchar *filename, *name, *buf;
+ gchar *filename = NULL, *name, *buf;
char *filedata;
size_t size;
GError *error = NULL;
int id;
- GtkTextIter iter;
- GtkTextMark *ins;
- if (response != GTK_RESPONSE_ACCEPT)
- return;
+ if (response == GTK_RESPONSE_ACCEPT)
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
+ /* The following triggers a callback that closes the widget */
+ gtk_action_activate(priv->image);
if (filename == NULL)
return;
- /* The following triggers a callback that closes the widget */
- gtk_action_activate(priv->image);
-
if (!g_file_get_contents(filename, &filedata, &size, &error)) {
purple_notify_error(NULL, NULL, error->message, NULL);
@@ -586,12 +581,8 @@
g_free(filename);
- ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->webview)));
- gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->webview)),
- &iter, ins);
- gtk_webview_insert_image_at_iter(GTK_WEBVIEW(toolbar->webview), id, &iter);
+ gtk_webview_insert_image(GTK_WEBVIEW(toolbar->webview), id);
purple_imgstore_unref_by_id(id);
-#endif
}
static void
@@ -600,14 +591,14 @@
GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
GtkWidget *window;
- if (priv->image_dialog) {
+ if (!priv->image_dialog) {
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_signal_connect(G_OBJECT(window), "response",
G_CALLBACK(do_insert_image_cb), toolbar);
gtk_widget_show(window);