--- a/pidgin/plugins/xmppconsole.c Fri Jun 15 00:59:46 2012 -0400
+++ b/pidgin/plugins/xmppconsole.c Fri Jun 15 02:55:02 2012 -0400
@@ -59,6 +59,14 @@
"span.value { color: #324aa4; }" \
"span.xmlns { color: #2cb12f; font-weight: bold;}" \
+ "var s = window.getSelection();" \ + "var r = document.createRange();" \ + "var n = document.getElementById('caret');" \ + "r.setStartBefore(n);" \ + "s.removeAllRanges();" \ xmlnode_to_pretty_str(xmlnode *node, int *len)
@@ -272,9 +280,7 @@
GtkWidget *vbox, *hbox, *to_entry, *label, *type_combo;
GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
@@ -332,19 +338,21 @@
- to = gtk_entry_get_text(GTK_ENTRY(to_entry));
+ to = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(to_entry)), -1); - stanza = g_strdup_printf("<iq %s%s%s id='console%x' type='%s'></iq>",
+ stanza = g_strdup_printf("<iq %s%s%s id='console%x' type='%s'>" gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)));
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry));
- gtk_text_buffer_set_text(buffer, stanza, -1);
- gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</iq>") - stanza);
- gtk_text_buffer_place_cursor(buffer, &iter);
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->entry), stanza); + gtk_widget_grab_focus(console->entry); + gtk_webview_safe_execute_script(GTK_WEBVIEW(console->entry), SET_CURSOR); gtk_widget_destroy(dialog);
@@ -362,9 +370,8 @@
GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- const char *to, *type, *status, *show, *priority;
+ char *to, *status, *priority; + const char *type, *show; @@ -465,21 +472,22 @@
- to = gtk_entry_get_text(GTK_ENTRY(to_entry));
+ to = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(to_entry)), -1); type = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo));
if (!strcmp(type, "default"))
show = gtk_combo_box_get_active_text(GTK_COMBO_BOX(show_combo));
if (!strcmp(show, "default"))
- status = gtk_entry_get_text(GTK_ENTRY(status_entry));
- priority = gtk_entry_get_text(GTK_ENTRY(priority_entry));
+ status = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(status_entry)), -1); + priority = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(priority_entry)), -1); if (!strcmp(priority, "0"))
- stanza = g_strdup_printf("<presence %s%s%s id='console%x' %s%s%s>"
+ stanza = g_strdup_printf("<presence %s%s%s id='console%x' %s%s%s>"
@@ -489,23 +497,25 @@
+ *show ? "<show>" : "", - *show ? "</show>" : "",
+ *show ? "</show>" : "", - *status ? "<status>" : "",
+ *status ? "<status>" : "", - *status ? "</status>" : "",
+ *status ? "</status>" : "", - *priority ? "<priority>" : "",
+ *priority ? "<priority>" : "", *priority ? priority : "",
- *priority ? "</priority>" : "");
+ *priority ? "</priority>" : ""); - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry));
- gtk_text_buffer_set_text(buffer, stanza, -1);
- gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</presence>") - stanza);
- gtk_text_buffer_place_cursor(buffer, &iter);
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->entry), stanza); + gtk_widget_grab_focus(console->entry); + gtk_webview_safe_execute_script(GTK_WEBVIEW(console->entry), SET_CURSOR); gtk_widget_destroy(dialog);
@@ -522,9 +532,7 @@
GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- const char *to, *body, *thread, *subject;
+ char *to, *body, *thread, *subject; @@ -618,14 +626,15 @@
- to = gtk_entry_get_text(GTK_ENTRY(to_entry));
- body = gtk_entry_get_text(GTK_ENTRY(body_entry));
- thread = gtk_entry_get_text(GTK_ENTRY(thread_entry));
- subject = gtk_entry_get_text(GTK_ENTRY(subject_entry));
+ to = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(to_entry)), -1); + body = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(body_entry)), -1); + thread = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(thread_entry)), -1); + subject = g_markup_escape_text(gtk_entry_get_text(GTK_ENTRY(subject_entry)), -1); - stanza = g_strdup_printf("<message %s%s%s id='console%x' type='%s'>"
+ stanza = g_strdup_printf("<message %s%s%s id='console%x' type='%s'>"
@@ -633,23 +642,26 @@
gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)),
+ *body ? "<body>" : "", - *body ? "</body>" : "",
+ *body ? "</body>" : "", - *subject ? "<subject>" : "",
+ *subject ? "<subject>" : "", - *subject ? "</subject>" : "",
+ *subject ? "</subject>" : "", - *thread ? "<thread>" : "",
+ *thread ? "<thread>" : "", - *thread ? "</thread>" : "");
+ *thread ? "</thread>" : ""); - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry));
- gtk_text_buffer_set_text(buffer, stanza, -1);
- gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</message>") - stanza);
- gtk_text_buffer_place_cursor(buffer, &iter);
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->entry), stanza); + gtk_widget_grab_focus(console->entry); + gtk_webview_safe_execute_script(GTK_WEBVIEW(console->entry), SET_CURSOR); gtk_widget_destroy(dialog);