gtk/gtkimhtml.c

Sat, 26 Aug 2006 06:25:49 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Sat, 26 Aug 2006 06:25:49 +0000
changeset 14400
953baf2eba1a
parent 14395
cf8c889161ff
child 14519
5917c07678bf
permissions
-rw-r--r--

[gaim-migrate @ 17035]
Fixes SF Bug # 1373116 (and related Debian Bug #341607)

Fix the Find functionality in the log viewer. It now properly scrolls to the first occurrence of the search term. Also, clicking the Find button will now jump to the next occurrence of the search term, including wrapping around to the top.

Possible Badness:
This changes the behavior of all IMHTML searches. Previously, if you kept calling gtk_imhtml_search_find(), it'd clear the highlighting when you went past the last occurrence of the search term. This seems wrong. I believe it should either stop or wrap around to the top. Wrapping around seemed most useful to me, so that's what I implemented.

This was inspired by SF Patch #1545488 by Mark Schneider

1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
10297
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
2 * @file gtkimhtml.c GTK+ IMHtml
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
3 * @ingroup gtkui
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
4 *
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
5 * gaim
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
9 * source distribution.
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * under the terms of the GNU General Public License as published by
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * (at your option) any later version.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * GNU General Public License for more details.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 */
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
27 #ifdef HAVE_CONFIG_H
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
28 #include <config.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
29 #endif
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
30 #include "debug.h"
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
31 #include "util.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 #include "gtkimhtml.h"
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
33 #include "gtksourceiter.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 #include <gtk/gtk.h>
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
35 #include <glib/gerror.h>
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
36 #include <gdk/gdkkeysyms.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 #include <string.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #include <ctype.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 #include <stdio.h>
4629
7ac4830de853 [gaim-migrate @ 4920]
Mark Doliner <markdoliner@pidgin.im>
parents: 4612
diff changeset
40 #include <stdlib.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 #include <math.h>
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
42 #ifdef HAVE_LANGINFO_CODESET
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
43 #include <langinfo.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
44 #include <locale.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
45 #endif
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
46 #ifdef _WIN32
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
47 #include <gdk/gdkwin32.h>
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
48 #include <windows.h>
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
49 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
51 #ifdef ENABLE_NLS
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
52 # include <libintl.h>
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
53 # define _(x) gettext(x)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
54 # ifdef gettext_noop
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
55 # define N_(String) gettext_noop (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
56 # else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
57 # define N_(String) (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
58 # endif
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
59 #else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
60 # define N_(String) (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
61 # define _(x) (x)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
62 #endif
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
63
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
64 #include <pango/pango-font.h>
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
65
10062
144767f0643a [gaim-migrate @ 11037]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10016
diff changeset
66 /* GTK+ < 2.4.x hack, see gtkgaim.h for details. */
144767f0643a [gaim-migrate @ 11037]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10016
diff changeset
67 #if (!GTK_CHECK_VERSION(2,4,0))
5105
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
68 #define GTK_WRAP_WORD_CHAR GTK_WRAP_WORD
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
69 #endif
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
70
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
71 #define TOOLTIP_TIMEOUT 500
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
72
8786
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
73 /* GTK+ 2.0 hack */
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
74 #if (!GTK_CHECK_VERSION(2,2,0))
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
75 #define gtk_widget_get_clipboard(x, y) gtk_clipboard_get(y)
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
76 #endif
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
77
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
78 static GtkTextViewClass *parent_class = NULL;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
79
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
80 struct scalable_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
81 GtkIMHtmlScalable *scalable;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
82 GtkTextMark *mark;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
83 };
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
84
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
85
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
86 struct im_image_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
87 int id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
88 GtkTextMark *mark;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
89 };
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
90
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
91 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
92 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
93 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
94 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
95 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
96 guint time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
97
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
98 static void preinsert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
99 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
100 static void delete_cb(GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextIter *end, GtkIMHtml *imhtml);
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
101 static void insert_ca_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextChildAnchor *arg2, gpointer user_data);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
102 static void gtk_imhtml_apply_tags_on_insert(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
103 static gboolean gtk_imhtml_is_amp_escape (const gchar *string, gchar **replace, gint *length);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
104 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
105 static void gtk_imhtml_link_drop_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
106 static void gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
107 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark, GtkIMHtml *imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
108 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
109 static void paste_received_cb (GtkClipboard *clipboard, GtkSelectionData *selection_data, gpointer data);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
110 static void paste_plaintext_received_cb (GtkClipboard *clipboard, const gchar *text, gpointer data);
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
111 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
112 static void imhtml_toggle_bold(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
113 static void imhtml_toggle_italic(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
114 static void imhtml_toggle_strike(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
115 static void imhtml_toggle_underline(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
116 static void imhtml_font_grow(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
117 static void imhtml_font_shrink(GtkIMHtml *imhtml);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
118 static void imhtml_clear_formatting(GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
119
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
120 /* POINT_SIZE converts from AIM font sizes to a point size scale factor. */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
121 #define MAX_FONT_SIZE 7
10900
cc19dfd83910 [gaim-migrate @ 12621]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10899
diff changeset
122 #define POINT_SIZE(x) (_point_sizes [MIN ((x > 0 ? x : 1), MAX_FONT_SIZE) - 1])
8380
152ca3f3a3f6 [gaim-migrate @ 9108]
Sean Egan <seanegan@pidgin.im>
parents: 8367
diff changeset
123 static gdouble _point_sizes [] = { .69444444, .8333333, 1, 1.2, 1.44, 1.728, 2.0736};
2349
9832b57ded64 [gaim-migrate @ 2362]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2348
diff changeset
124
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
125 enum {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
126 TARGET_HTML,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
127 TARGET_UTF8_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
128 TARGET_COMPOUND_TEXT,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
129 TARGET_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
130 TARGET_TEXT
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
131 };
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
132
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
133 enum {
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
134 URL_CLICKED,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
135 BUTTONS_UPDATE,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
136 TOGGLE_FORMAT,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
137 CLEAR_FORMAT,
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
138 UPDATE_FORMAT,
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
139 MESSAGE_SEND,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
140 LAST_SIGNAL
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
141 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
142 static guint signals [LAST_SIGNAL] = { 0 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
143
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
144 static GtkTargetEntry selection_targets[] = {
8566
d174105077ff [gaim-migrate @ 9313]
Sean Egan <seanegan@pidgin.im>
parents: 8548
diff changeset
145 { "text/html", 0, TARGET_HTML },
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
146 { "UTF8_STRING", 0, TARGET_UTF8_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
147 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
148 { "STRING", 0, TARGET_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
149 { "TEXT", 0, TARGET_TEXT}};
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
150
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
151 static GtkTargetEntry link_drag_drop_targets[] = {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
152 GTK_IMHTML_DND_TARGETS
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
153 };
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
154
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
155 #ifdef _WIN32
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
156 /* Win32 clipboard format value, and functions to convert back and
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
157 * forth between HTML and the clipboard format.
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
158 */
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
159 static UINT win_html_fmt;
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
160
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
161 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
162 clipboard_win32_to_html(char *clipboard) {
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
163 const char *header;
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
164 const char *begin, *end;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
165 gint start = 0;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
166 gint finish = 0;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
167 gchar *html;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
168 gchar **split;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
169 int clipboard_length = 0;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
170
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
171 #if 0 /* Debugging for Windows clipboard */
9467
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
172 FILE *fd;
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
173
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
174 gaim_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
175
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10574
diff changeset
176 fd = g_fopen("e:\\gaimcb.txt", "wb");
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
177 fprintf(fd, "%s", clipboard);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
178 fclose(fd);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
179 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
180
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
181 clipboard_length = strlen(clipboard);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
182
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
183 if (!(header = strstr(clipboard, "StartFragment:")) || (header - clipboard) >= clipboard_length)
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
184 return NULL;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
185 sscanf(header, "StartFragment:%d", &start);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
186
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
187 if (!(header = strstr(clipboard, "EndFragment:")) || (header - clipboard) >= clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
188 return NULL;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
189 sscanf(header, "EndFragment:%d", &finish);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
190
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
191 if (finish > clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
192 finish = clipboard_length;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
193
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
194 if (start > finish)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
195 start = finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
196
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
197 begin = clipboard + start;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
198
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
199 end = clipboard + finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
200
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
201 html = g_strndup(begin, end - begin);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
202
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
203 /* any newlines in the string will now be \r\n, so we need to strip out the \r */
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
204 split = g_strsplit(html, "\r\n", 0);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
205 g_free(html);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
206 html = g_strjoinv("\n", split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
207 g_strfreev(split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
208
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
209 html = g_strstrip(html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
210
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
211 #if 0 /* Debugging for Windows clipboard */
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
212 gaim_debug_info("imhtml clipboard", "HTML fragment: '%s'\n", html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
213 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
214
8707
024f6481c017 [gaim-migrate @ 9460]
Kevin Stange <kstange@pidgin.im>
parents: 8698
diff changeset
215 return html;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
216 }
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
217
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
218 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
219 clipboard_html_to_win32(char *html) {
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
220 int length;
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
221 GString *clipboard;
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
222 gchar *tmp;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
223
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
224 if (html == NULL)
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
225 return NULL;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
226
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
227 length = strlen(html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
228 clipboard = g_string_new ("Version:1.0\r\n");
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
229 g_string_append(clipboard, "StartHTML:0000000105\r\n");
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
230 tmp = g_strdup_printf("EndHTML:%010d\r\n", 147 + length);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
231 g_string_append(clipboard, tmp);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
232 g_free(tmp);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
233 g_string_append(clipboard, "StartFragment:0000000127\r\n");
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
234 tmp = g_strdup_printf("EndFragment:%010d\r\n", 127 + length);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
235 g_string_append(clipboard, tmp);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
236 g_free(tmp);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
237 g_string_append(clipboard, "<!--StartFragment-->\r\n");
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
238 g_string_append(clipboard, html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
239 g_string_append(clipboard, "\r\n<!--EndFragment-->");
14101
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
240
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
241 return g_string_free(clipboard, FALSE);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
242 }
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
243
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
244 static void clipboard_copy_html_win32(GtkIMHtml *imhtml) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
245 gchar *clipboard = clipboard_html_to_win32(imhtml->clipboard_html_string);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
246 if (clipboard != NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
247 HWND hwnd = GDK_WINDOW_HWND(GTK_WIDGET(imhtml)->window);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
248 if (OpenClipboard(hwnd)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
249 if (EmptyClipboard()) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
250 gint length = strlen(clipboard);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
251 HGLOBAL hdata = GlobalAlloc(GMEM_MOVEABLE, length);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
252 if (hdata != NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
253 gchar *buffer = GlobalLock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
254 memcpy(buffer, clipboard, length);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
255 GlobalUnlock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
256
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
257 if (SetClipboardData(win_html_fmt, hdata) == NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
258 gchar *err_msg =
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
259 g_win32_error_message(GetLastError());
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
260 gaim_debug_info("html clipboard",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
261 "Unable to set clipboard data: %s\n",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
262 err_msg ? err_msg : "Unknown Error");
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
263 g_free(err_msg);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
264 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
265 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
266 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
267 CloseClipboard();
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
268 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
269 g_free(clipboard);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
270 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
271 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
272
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
273 static gboolean clipboard_paste_html_win32(GtkIMHtml *imhtml) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
274 gboolean pasted = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
275
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
276 if (gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml))
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
277 && IsClipboardFormatAvailable(win_html_fmt)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
278 gboolean error_reading_clipboard = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
279 HWND hwnd = GDK_WINDOW_HWND(GTK_WIDGET(imhtml)->window);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
280
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
281 if (OpenClipboard(hwnd)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
282 HGLOBAL hdata = GetClipboardData(win_html_fmt);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
283 if (hdata == NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
284 error_reading_clipboard = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
285 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
286 char *buffer = GlobalLock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
287 if (buffer == NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
288 error_reading_clipboard = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
289 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
290 char *text = clipboard_win32_to_html(
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
291 buffer);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
292 imhtml_paste_insert(imhtml, text,
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
293 FALSE);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
294 g_free(text);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
295 pasted = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
296 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
297 GlobalUnlock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
298 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
299
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
300 CloseClipboard();
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
301
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
302 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
303 error_reading_clipboard = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
304 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
305
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
306 if (error_reading_clipboard) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
307 gchar *err_msg = g_win32_error_message(GetLastError());
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
308 gaim_debug_info("html clipboard",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
309 "Unable to read clipboard data: %s\n",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
310 err_msg ? err_msg : "Unknown Error");
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
311 g_free(err_msg);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
312 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
313 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
314
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
315 return pasted;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
316 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
317 #endif
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
318
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
319 static GtkSmileyTree*
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
320 gtk_smiley_tree_new ()
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
321 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
322 return g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
323 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
324
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
325 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
326 gtk_smiley_tree_insert (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
327 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
328 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
329 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
330 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
331
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
332 if (!(*x))
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
333 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
334
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
335 do {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
336 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
337 gint index;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
338
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
339 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
340 t->values = g_string_new ("");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
341
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
342 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
343 if (!pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
344 t->values = g_string_append_c (t->values, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
345 index = t->values->len - 1;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
346 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
347 t->children [index] = g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
348 } else
7386
9cccb3792018 [gaim-migrate @ 7981]
Luke Schierer <lschiere@pidgin.im>
parents: 7384
diff changeset
349 index = GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
350
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
351 t = t->children [index];
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
352
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
353 x++;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
354 } while (*x);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
355
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
356 t->image = smiley;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
357 }
4041
6336d3d3785e [gaim-migrate @ 4249]
Sean Egan <seanegan@pidgin.im>
parents: 4032
diff changeset
358
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
359
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
360 static void
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
361 gtk_smiley_tree_destroy (GtkSmileyTree *tree)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
362 {
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
363 GSList *list = g_slist_prepend (NULL, tree);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
364
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
365 while (list) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
366 GtkSmileyTree *t = list->data;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
367 gsize i;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
368 list = g_slist_remove(list, t);
7384
c2ed41f62aae [gaim-migrate @ 7979]
Nathan Walp <nwalp@pidgin.im>
parents: 7371
diff changeset
369 if (t && t->values) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
370 for (i = 0; i < t->values->len; i++)
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
371 list = g_slist_prepend (list, t->children [i]);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
372 g_string_free (t->values, TRUE);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
373 g_free (t->children);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
374 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
375 g_free (t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
376 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
377 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
378
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
379 static void gtk_size_allocate_cb(GtkIMHtml *widget, GtkAllocation *alloc, gpointer user_data)
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
380 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
381 GdkRectangle rect;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
382 int xminus;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
383
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
384 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &rect);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
385 if(widget->old_rect.width != rect.width || widget->old_rect.height != rect.height){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
386 GList *iter = GTK_IMHTML(widget)->scalables;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
387
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
388 xminus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(widget)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
389 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(widget));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
390
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
391 while(iter){
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
392 struct scalable_data *sd = iter->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
393 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
394 scale->scale(scale, rect.width - xminus, rect.height);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
395
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
396 iter = iter->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
397 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
398 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
399
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
400 widget->old_rect = rect;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
401 return;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
402 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
403
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
404 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
405 gtk_imhtml_tip_paint (GtkIMHtml *imhtml)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
406 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
407 PangoLayout *layout;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
408
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
409 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
410
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
411 layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
412
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
413 gtk_paint_flat_box (imhtml->tip_window->style, imhtml->tip_window->window,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
414 GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, imhtml->tip_window,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
415 "tooltip", 0, 0, -1, -1);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
416
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
417 gtk_paint_layout (imhtml->tip_window->style, imhtml->tip_window->window, GTK_STATE_NORMAL,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
418 FALSE, NULL, imhtml->tip_window, NULL, 4, 4, layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
419
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
420 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
421 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
422 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
423
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
424 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
425 gtk_imhtml_tip (gpointer data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
426 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
427 GtkIMHtml *imhtml = data;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
428 PangoFontMetrics *font_metrics;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
429 PangoLayout *layout;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
430 PangoFont *font;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
431
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
432 gint gap, x, y, h, w, scr_w, baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
433
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
434 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
435
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
436 if (!imhtml->tip || !GTK_WIDGET_DRAWABLE (GTK_WIDGET(imhtml))) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
437 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
438 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
439 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
440
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
441 if (imhtml->tip_window){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
442 gtk_widget_destroy (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
443 imhtml->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
444 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
445
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
446 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
447 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
448 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
449 gtk_window_set_resizable (GTK_WINDOW (imhtml->tip_window), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
450 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
451 g_signal_connect_swapped (G_OBJECT (imhtml->tip_window), "expose_event",
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
452 G_CALLBACK (gtk_imhtml_tip_paint), imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
453
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
454 gtk_widget_ensure_style (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
455 layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip);
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
456 font = pango_context_load_font(pango_layout_get_context(layout),
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
457 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
458
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
459 if (font == NULL) {
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
460 char *tmp = pango_font_description_to_string(
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
461 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
462
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
463 gaim_debug(GAIM_DEBUG_ERROR, "gtk_imhtml_tip",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
464 "pango_context_load_font() couldn't load font: '%s'\n",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
465 tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
466 g_free(tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
467
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
468 return FALSE;
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
469 }
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
470
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
471 font_metrics = pango_font_get_metrics(font, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
472
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
473 pango_layout_get_pixel_size(layout, &scr_w, NULL);
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
474 gap = PANGO_PIXELS((pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
475 pango_font_metrics_get_descent(font_metrics))/ 4);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
476
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
477 if (gap < 2)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
478 gap = 2;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
479 baseline_skip = PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
480 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
481 w = 8 + scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
482 h = 8 + baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
483
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
484 gdk_window_get_pointer (NULL, &x, &y, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
485 if (GTK_WIDGET_NO_WINDOW (GTK_WIDGET(imhtml)))
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
486 y += GTK_WIDGET(imhtml)->allocation.y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
487
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
488 scr_w = gdk_screen_width();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
489
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
490 x -= ((w >> 1) + 4);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
491
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
492 if ((x + w) > scr_w)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
493 x -= (x + w) - scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
494 else if (x < 0)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
495 x = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
496
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
497 y = y + PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
498 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
499
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
500 gtk_widget_set_size_request (imhtml->tip_window, w, h);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
501 gtk_widget_show (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
502 gtk_window_move (GTK_WINDOW(imhtml->tip_window), x, y);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
503
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
504 pango_font_metrics_unref(font_metrics);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
505 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
506
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
507 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
508 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
509
11844
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
510 static gboolean
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
511 gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
512 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
513 GtkTextIter iter;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
514 GdkWindow *win = event->window;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
515 int x, y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
516 char *tip = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
517 GSList *tags = NULL, *templist = NULL;
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
518 GdkColor *norm, *pre;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
519 GtkTextTag *tag = NULL, *oldprelit_tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
520
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
521 oldprelit_tag = GTK_IMHTML(imhtml)->prelit_tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
522
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
523 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
524 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET,
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
525 event->x, event->y, &x, &y);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
526 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
527 tags = gtk_text_iter_get_tags(&iter);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
528
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
529 templist = tags;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
530 while (templist) {
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
531 tag = templist->data;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
532 tip = g_object_get_data(G_OBJECT(tag), "link_url");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
533 if (tip)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
534 break;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
535 templist = templist->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
536 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
537
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
538 if (tip) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
539 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-prelight-color", &pre, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
540 GTK_IMHTML(imhtml)->prelit_tag = tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
541 if (tag != oldprelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
542 if (pre)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
543 g_object_set(G_OBJECT(tag), "foreground-gdk", pre, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
544 else
12253
5025434b18f8 [gaim-migrate @ 14555]
Mark Doliner <markdoliner@pidgin.im>
parents: 12230
diff changeset
545 g_object_set(G_OBJECT(tag), "foreground", "#70a0ff", NULL);
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
546 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
547 } else {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
548 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
549 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
550
10834
5fd1dfd395e8 [gaim-migrate @ 12505]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10826
diff changeset
551 if ((oldprelit_tag != NULL) && (GTK_IMHTML(imhtml)->prelit_tag != oldprelit_tag)) {
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
552 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
553 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
554 g_object_set(G_OBJECT(oldprelit_tag), "foreground-gdk", norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
555 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
556 g_object_set(G_OBJECT(oldprelit_tag), "foreground", "blue", NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
557 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
558
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
559 if (GTK_IMHTML(imhtml)->tip) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
560 if ((tip == GTK_IMHTML(imhtml)->tip)) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
561 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
562 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
563 /* We've left the cell. Remove the timeout and create a new one below */
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
564 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
565 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
566 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
567 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
568 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
569 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
570 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
571 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
572 if (GTK_IMHTML(imhtml)->tip_timer)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
573 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
574 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
575 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
576
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
577 if (tip){
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
578 if (!GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
579 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
580 GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
581 gtk_imhtml_tip, imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
582 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
583
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
584 GTK_IMHTML(imhtml)->tip = tip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
585 g_slist_free(tags);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
586 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
587 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
588
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
589 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
590 gtk_enter_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
591 {
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
592 if (GTK_IMHTML(imhtml)->editable)
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
593 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
594 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
595 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
596 GTK_IMHTML(imhtml)->text_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
597 else
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
598 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
599 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
600 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
601 GTK_IMHTML(imhtml)->arrow_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
602
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
603 /* propagate the event normally */
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
604 return FALSE;
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
605 }
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
606
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
607 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
608 gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
609 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
610 /* when leaving the widget, clear any current & pending tooltips and restore the cursor */
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
611 if (GTK_IMHTML(imhtml)->prelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
612 GdkColor *norm;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
613 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
614 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
615 g_object_set(G_OBJECT(GTK_IMHTML(imhtml)->prelit_tag), "foreground-gdk", norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
616 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
617 g_object_set(G_OBJECT(GTK_IMHTML(imhtml)->prelit_tag), "foreground", "blue", NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
618 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
619 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
620
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
621 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
622 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
623 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
624 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
625 if (GTK_IMHTML(imhtml)->tip_timer) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
626 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
627 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
628 }
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
629 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
630 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
631 GTK_TEXT_WINDOW_TEXT), NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
632
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
633 /* propagate the event normally */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
634 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
635 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
636
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
637 #if (!GTK_CHECK_VERSION(2,2,0))
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
638 /*
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
639 * XXX - This should be removed eventually.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
640 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
641 * This function exists to work around a gross bug in GtkTextView.
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
642 * Basically, we short circuit ctrl+a and ctrl+end because they make
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
643 * el program go boom.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
644 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
645 * It's supposed to be fixed in gtk2.2. You can view the bug report at
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
646 * http://bugzilla.gnome.org/show_bug.cgi?id=107939
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
647 */
10849
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
648 static gboolean
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
649 gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
650 {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
651 if (event->state & GDK_CONTROL_MASK) {
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
652 switch (event->keyval) {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
653 case 'a':
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
654 case GDK_Home:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
655 case GDK_End:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
656 return TRUE;
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
657 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
658 }
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
659 return FALSE;
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
660 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
661 #endif /* !(GTK+ >= 2.2.0) */
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
662
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
663 static gint
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
664 gtk_imhtml_expose_event (GtkWidget *widget,
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
665 GdkEventExpose *event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
666 {
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
667 GtkTextIter start, end, cur;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
668 int buf_x, buf_y;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
669 GdkRectangle visible_rect;
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
670 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
671 GdkColor gcolor;
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
672
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
673 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
674 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
675 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
676 visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
677 visible_rect.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
678 &visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
679 &visible_rect.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
680
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
681 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
682 event->area.x, event->area.y, &buf_x, &buf_y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
683
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
684 if (GTK_IMHTML(widget)->editable || GTK_IMHTML(widget)->wbfo) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
685
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
686 if (GTK_IMHTML(widget)->edit.background) {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
687 gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
688 gdk_gc_set_rgb_fg_color(gc, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
689 } else {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
690 gdk_gc_set_rgb_fg_color(gc, &(widget->style->base[GTK_WIDGET_STATE(widget)]));
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
691 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
692
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
693 gdk_draw_rectangle(event->window,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
694 gc,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
695 TRUE,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
696 visible_rect.x, visible_rect.y, visible_rect.width, visible_rect.height);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
697 gdk_gc_unref(gc);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
698
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
699 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
700 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
701 (widget, event);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
702 return FALSE;
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
703
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
704 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
705
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
706 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
707 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
708 buf_x + event->area.width, buf_y + event->area.height);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
709
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
710
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
711
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
712 cur = start;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
713
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
714 while (gtk_text_iter_in_range(&cur, &start, &end)) {
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
715 GSList *tags = gtk_text_iter_get_tags(&cur);
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
716 GSList *l;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
717
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
718 for (l = tags; l; l = l->next) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
719 GtkTextTag *tag = l->data;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
720 GdkRectangle rect;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
721 GdkRectangle tag_area;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
722 const char *color;
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
723
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
724 if (strncmp(tag->name, "BACKGROUND ", 11))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
725 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
726
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
727 if (gtk_text_iter_ends_tag(&cur, tag))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
728 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
729
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
730 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
731 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
732 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
733 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
734 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
735 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
736 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
737 rect.x = visible_rect.x;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
738 rect.y = tag_area.y;
11768
b45e26d7a4c9 [gaim-migrate @ 14059]
Gary Kramlich <grim@reaperworld.com>
parents: 11760
diff changeset
739 rect.width = visible_rect.width;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
740
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
741 do
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
742 gtk_text_iter_forward_to_tag_toggle(&cur, tag);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
743 while (!gtk_text_iter_is_end(&cur) && gtk_text_iter_begins_tag(&cur, tag));
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
744
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
745 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
746 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
747 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
748 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
749 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
750 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
751 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
752
11760
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
753
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
754 rect.height = tag_area.y + tag_area.height - rect.y
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
755 + gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(widget));
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
756
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
757 color = tag->name + 11;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
758
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
759 if (!gdk_color_parse(color, &gcolor)) {
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
760 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
761 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
762 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
763 tmp[7] = '\0';
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
764 if (!gdk_color_parse(tmp, &gcolor))
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
765 gdk_color_parse("white", &gcolor);
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
766 }
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
767 gdk_gc_set_rgb_fg_color(gc, &gcolor);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
768
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
769 gdk_draw_rectangle(event->window,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
770 gc,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
771 TRUE,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
772 rect.x, rect.y, rect.width, rect.height);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
773 gtk_text_iter_backward_char(&cur); /* go back one, in case the end is the begining is the end
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
774 * note that above, we always moved cur ahead by at least
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
775 * one character */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
776 break;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
777 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
778
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
779 g_slist_free(tags);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
780
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
781 /* loop until another tag begins, or no tag begins */
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
782 while (gtk_text_iter_forward_to_tag_toggle(&cur, NULL) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
783 !gtk_text_iter_is_end(&cur) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
784 !gtk_text_iter_begins_tag(&cur, NULL));
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
785 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
786
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
787 gdk_gc_unref(gc);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
788
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
789 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
790 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
791 (widget, event);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
792
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
793 return FALSE;
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
794 }
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
795
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
796
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
797 static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
798 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
799 GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
800
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
801 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
802
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
803 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
804
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
805 static void clear_formatting_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
806 {
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
807 gtk_imhtml_clear_formatting(imhtml);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
808 }
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
809
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
810 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
811 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
812 GtkWidget *menuitem;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
813
12635
5b2fbc3da55b [gaim-migrate @ 14971]
Richard Laager <rlaager@pidgin.im>
parents: 12605
diff changeset
814 menuitem = gtk_menu_item_new_with_mnemonic(_("Paste as Plain _Text"));
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
815 gtk_widget_show(menuitem);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
816 gtk_widget_set_sensitive(menuitem,
12836
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
817 (imhtml->editable &&
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
818 gtk_clipboard_wait_is_text_available(
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
819 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD))));
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
820 /* put it after "Paste" */
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
821 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 3);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
822
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
823 g_signal_connect(G_OBJECT(menuitem), "activate",
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
824 G_CALLBACK(paste_unformatted_cb), imhtml);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
825
13539
8036a635a316 [gaim-migrate @ 15915]
Richard Laager <rlaager@pidgin.im>
parents: 13340
diff changeset
826 menuitem = gtk_menu_item_new_with_mnemonic(_("_Reset formatting"));
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
827 gtk_widget_show(menuitem);
13340
e18166659513 [gaim-migrate @ 15709]
Richard Laager <rlaager@pidgin.im>
parents: 13336
diff changeset
828 gtk_widget_set_sensitive(menuitem, imhtml->editable);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
829 /* put it after Delete */
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
830 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 5);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
831
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
832 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(clear_formatting_cb), imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
833 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
834
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
835 static char *
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
836 ucs2_order(gboolean swap)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
837 {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
838 gboolean be;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
839
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
840 be = G_BYTE_ORDER == G_BIG_ENDIAN;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
841 be = swap ? be : !be;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
842
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
843 if (be)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
844 return "UCS-2BE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
845 else
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
846 return "UCS-2LE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
847
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
848 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
849
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
850 /* Convert from UCS-2 to UTF-8, stripping the BOM if one is present.*/
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
851 static gchar *
11586
9e221fc0e2f8 [gaim-migrate @ 13856]
Nathan Walp <nwalp@pidgin.im>
parents: 11572
diff changeset
852 ucs2_to_utf8_with_bom_check(gchar *data, guint len) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
853 char *fromcode = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
854 GError *error = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
855 guint16 c;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
856 gchar *utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
857
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
858 /*
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
859 * Unicode Techinical Report 20
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
860 * ( http://www.unicode.org/unicode/reports/tr20/ ) says to treat an
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
861 * initial 0xfeff (ZWNBSP) as a byte order indicator so that is
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
862 * what we do. If there is no indicator assume it is in the default
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
863 * order
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
864 */
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
865
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
866 memcpy(&c, data, 2);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
867 switch (c) {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
868 case 0xfeff:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
869 case 0xfffe:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
870 fromcode = ucs2_order(c == 0xfeff);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
871 data += 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
872 len -= 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
873 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
874 default:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
875 fromcode = "UCS-2";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
876 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
877 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
878
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
879 utf8_ret = g_convert(data, len, "UTF-8", fromcode, NULL, NULL, &error);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
880
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
881 if (error) {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
882 gaim_debug_warning("gtkimhtml", "g_convert error: %s\n", error->message);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
883 g_error_free(error);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
884 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
885 return utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
886 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
887
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
888
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
889 static void gtk_imhtml_clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, GtkIMHtml *imhtml) {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
890 char *text;
8782
eb3f9bf7d69c [gaim-migrate @ 9544]
Ignacio J. Elia
parents: 8758
diff changeset
891 gboolean primary;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
892 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
893 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
894 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
10013
6927760cd4fd [gaim-migrate @ 10930]
Gary Kramlich <grim@pidgin.im>
parents: 9924
diff changeset
895
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
896 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
897 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins);
8782
eb3f9bf7d69c [gaim-migrate @ 9544]
Ignacio J. Elia
parents: 8758
diff changeset
898 primary = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY) == clipboard;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
899
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
900 if (info == TARGET_HTML) {
8907
17b9da22de1e [gaim-migrate @ 9677]
Gary Kramlich <grim@pidgin.im>
parents: 8890
diff changeset
901 gsize len;
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
902 char *selection;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
903 GString *str = g_string_new(NULL);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
904 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
905 text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
10013
6927760cd4fd [gaim-migrate @ 10930]
Gary Kramlich <grim@pidgin.im>
parents: 9924
diff changeset
906 } else
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
907 text = imhtml->clipboard_html_string;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
908
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
909 /* Mozilla asks that we start our text/html with the Unicode byte order mark */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
910 str = g_string_append_unichar(str, 0xfeff);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
911 str = g_string_append(str, text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
912 str = g_string_append_unichar(str, 0x0000);
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
913 selection = g_convert(str->str, str->len, "UCS-2", "UTF-8", NULL, &len, NULL);
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
914 gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), 16, (const guchar *)selection, len);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
915 g_string_free(str, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
916 g_free(selection);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
917 } else {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
918 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
919 text = gtk_imhtml_get_text(imhtml, &start, &end);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
920 } else
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
921 text = imhtml->clipboard_text_string;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
922 gtk_selection_data_set_text(selection_data, text, strlen(text));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
923 }
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
924 if (primary) /* This was allocated here */
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
925 g_free(text);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
926 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
927
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
928 static void gtk_imhtml_primary_clipboard_clear(GtkClipboard *clipboard, GtkIMHtml *imhtml)
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
929 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
930 GtkTextIter insert;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
931 GtkTextIter selection_bound;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
932
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
933 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &insert,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
934 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
935 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &selection_bound,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
936 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
937
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
938 if (!gtk_text_iter_equal (&insert, &selection_bound))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
939 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
940 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
941 &insert);
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
942 }
7742
0289c206bcff [gaim-migrate @ 8387]
Sean Egan <seanegan@pidgin.im>
parents: 7740
diff changeset
943
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
944 static void copy_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
945 {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
946 GtkTextIter start, end;
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
947 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
948 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
949
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
950 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
951 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
952
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
953 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
954 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
955 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
956 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
957
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
958 if (imhtml->clipboard_html_string) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
959 g_free(imhtml->clipboard_html_string);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
960 g_free(imhtml->clipboard_text_string);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
961 }
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
962
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
963 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
964 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
965
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
966 #ifdef _WIN32
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
967 /* We're going to still copy plain text, but let's toss the "HTML Format"
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
968 we need into the windows clipboard now as well. */
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
969 clipboard_copy_html_win32(imhtml);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
970 #endif
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
971
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
972 g_signal_stop_emission_by_name(imhtml, "copy-clipboard");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
973 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
974
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
975 static void cut_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
976 {
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
977 GtkTextIter start, end;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
978 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
979 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
980
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
981 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
982 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
983
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
984 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
985 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
986 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
987 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
988
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
989 if (imhtml->clipboard_html_string) {
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
990 g_free(imhtml->clipboard_html_string);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
991 g_free(imhtml->clipboard_text_string);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
992 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
993
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
994 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
995 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
996
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
997 #ifdef _WIN32
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
998 /* We're going to still copy plain text, but let's toss the "HTML Format"
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
999 we need into the windows clipboard now as well. */
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1000 clipboard_copy_html_win32(imhtml);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1001 #endif
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1002
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1003 if (imhtml->editable)
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1004 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1005 g_signal_stop_emission_by_name(imhtml, "cut-clipboard");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1006 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1007
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1008 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1009 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1010 GtkTextIter iter;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
1011 GtkIMHtmlOptions flags = plaintext ? 0 : (GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_COMMENTS);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1012
9028
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
1013 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
1014 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
1015
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1016 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer));
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1017 if (!imhtml->wbfo && !plaintext)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1018 gtk_imhtml_close_tags(imhtml, &iter);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1019
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1020 gtk_imhtml_insert_html_at_iter(imhtml, text, flags, &iter);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1021 if (!imhtml->wbfo && !plaintext)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1022 gtk_imhtml_close_tags(imhtml, &iter);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1023 gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "insert", &iter);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1024 gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(imhtml), gtk_text_buffer_get_insert(imhtml->text_buffer),
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1025 0, FALSE, 0.0, 0.0);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1026 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1027
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1028 static void paste_plaintext_received_cb (GtkClipboard *clipboard, const gchar *text, gpointer data)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1029 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1030 char *tmp;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1031
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1032 if (text == NULL)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1033 return;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1034
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1035 tmp = g_markup_escape_text(text, -1);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1036 imhtml_paste_insert(data, tmp, TRUE);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1037 g_free(tmp);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1038 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1039
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1040 static void paste_received_cb (GtkClipboard *clipboard, GtkSelectionData *selection_data, gpointer data)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1041 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1042 char *text;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1043 GtkIMHtml *imhtml = data;
7809
f4f6ac8d112a [gaim-migrate @ 8456]
Nathan Walp <nwalp@pidgin.im>
parents: 7808
diff changeset
1044
8123
e09c75f511c2 [gaim-migrate @ 8827]
Mark Doliner <markdoliner@pidgin.im>
parents: 8120
diff changeset
1045 if (!gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml)))
8105
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1046 return;
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1047
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1048 if (selection_data->length < 0) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1049 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1050 return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1051 } else {
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1052 #if 0
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1053 /* Here's some debug code, for figuring out what sent to us over the clipboard. */
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1054 {
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1055 int i;
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1056
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1057 gaim_debug_misc("gtkimhtml", "In paste_received_cb():\n\tformat = %d, length = %d\n\t",
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1058 selection_data->format, selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1059
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1060 for (i = 0; i < (/*(selection_data->format / 8) **/ selection_data->length); i++) {
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1061 if ((i % 70) == 0)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1062 printf("\n\t");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1063 if (selection_data->data[i] == '\0')
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1064 printf(".");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1065 else
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1066 printf("%c", selection_data->data[i]);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1067 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1068 printf("\n");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1069 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1070 #endif
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1071 text = g_malloc(selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1072 memcpy(text, selection_data->data, selection_data->length);
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1073 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1074
8869
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1075 if (selection_data->length >= 2 &&
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1076 (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) {
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1077 /* This is UCS-2 */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1078 char *utf8 = ucs2_to_utf8_with_bom_check(text, selection_data->length);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1079 g_free(text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1080 text = utf8;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1081 if (!text) {
8869
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1082 gaim_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in paste_received_cb\n");
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1083 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1084 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1085 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1086
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1087 if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1088 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in paste_received_cb\n");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1089 g_free(text);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1090 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1091 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1092
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1093 imhtml_paste_insert(imhtml, text, FALSE);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1094 g_free(text);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1095 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1096
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1097 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1098 {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1099 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1100 /* If we're on windows, let's see if we can get data from the HTML Format
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1101 clipboard before we try to paste from the GTK buffer */
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1102 if (!clipboard_paste_html_win32(imhtml)) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1103 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1104 GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1105 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1106 paste_received_cb, imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1107 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1108 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1109 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1110 g_signal_stop_emission_by_name(imhtml, "paste-clipboard");
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1111 }
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1112
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1113 static void imhtml_realized_remove_primary(GtkIMHtml *imhtml, gpointer unused)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1114 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1115 gtk_text_buffer_remove_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1116 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1117
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1118 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1119
8740
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1120 static void imhtml_destroy_add_primary(GtkIMHtml *imhtml, gpointer unused)
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1121 {
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1122 gtk_text_buffer_add_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1123 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1124 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1125
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1126 static void mark_set_so_update_selection_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1127 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1128 if (gtk_text_buffer_get_selection_bounds(buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1129 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1130 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1131 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1132 (GtkClipboardClearFunc)gtk_imhtml_primary_clipboard_clear, G_OBJECT(imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1133 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1134 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1135
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1136 static gboolean gtk_imhtml_button_press_event(GtkIMHtml *imhtml, GdkEventButton *event, gpointer unused)
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1137 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1138 if (event->button == 2) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1139 int x, y;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1140 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1141 GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1142
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1143 if (!imhtml->editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1144 return FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1145
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1146 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1147 GTK_TEXT_WINDOW_TEXT,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1148 event->x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1149 event->y,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1150 &x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1151 &y);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1152 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1153 gtk_text_buffer_place_cursor(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1154
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1155 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1156 paste_received_cb, imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1157
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1158 return TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1159 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1160
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1161 return FALSE;
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1162 }
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1163
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1164 static gboolean imhtml_message_send(GtkIMHtml *imhtml)
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1165 {
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1166 return FALSE;
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1167 }
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1168
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1169 static void imhtml_toggle_format(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1170 {
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1171 /* since this function is the handler for the formatting keystrokes,
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1172 we need to check here that the formatting attempted is permitted */
11275
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
1173 buttons &= imhtml->format_functions;
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1174
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1175 switch (buttons) {
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1176 case GTK_IMHTML_BOLD:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1177 imhtml_toggle_bold(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1178 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1179 case GTK_IMHTML_ITALIC:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1180 imhtml_toggle_italic(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1181 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1182 case GTK_IMHTML_UNDERLINE:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1183 imhtml_toggle_underline(imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1184 break;
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1185 case GTK_IMHTML_STRIKE:
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1186 imhtml_toggle_strike(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1187 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1188 case GTK_IMHTML_SHRINK:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1189 imhtml_font_shrink(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1190 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1191 case GTK_IMHTML_GROW:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1192 imhtml_font_grow(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1193 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1194 default:
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1195 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1196 }
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1197 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1198
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1199 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1200 gtk_imhtml_finalize (GObject *object)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1201 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1202 GtkIMHtml *imhtml = GTK_IMHTML(object);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1203 GList *scalables;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1204 GSList *l;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1205
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1206 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1207 g_source_remove(imhtml->scroll_src);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1208 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1209 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1210
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1211 g_hash_table_destroy(imhtml->smiley_data);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1212 gtk_smiley_tree_destroy(imhtml->default_smilies);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1213 gdk_cursor_unref(imhtml->hand_cursor);
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1214 gdk_cursor_unref(imhtml->arrow_cursor);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1215 gdk_cursor_unref(imhtml->text_cursor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1216
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1217 if(imhtml->tip_window){
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1218 gtk_widget_destroy(imhtml->tip_window);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1219 }
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1220 if(imhtml->tip_timer)
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1221 gtk_timeout_remove(imhtml->tip_timer);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1222
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1223 for(scalables = imhtml->scalables; scalables; scalables = scalables->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1224 struct scalable_data *sd = scalables->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1225 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1226 scale->free(scale);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1227 g_free(sd);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1228 }
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
1229
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1230 for (l = imhtml->im_images; l; l = l->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1231 struct im_image_data *img_data = l->data;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1232 if (imhtml->funcs->image_unref)
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1233 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1234 g_free(img_data);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1235 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1236
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1237 if (imhtml->clipboard_text_string) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1238 g_free(imhtml->clipboard_text_string);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1239 g_free(imhtml->clipboard_html_string);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1240 }
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1241
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1242 g_list_free(imhtml->scalables);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1243 g_slist_free(imhtml->im_images);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1244 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1245 g_free(imhtml->search_string);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1246 G_OBJECT_CLASS(parent_class)->finalize (object);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1247 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1248
10814
7e17cb56b019 [gaim-migrate @ 12468]
Luke Schierer <lschiere@pidgin.im>
parents: 10799
diff changeset
1249 /* Boring GTK+ stuff */
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1250 static void gtk_imhtml_class_init (GtkIMHtmlClass *klass)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1251 {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1252 GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1253 GtkObjectClass *object_class;
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1254 GtkBindingSet *binding_set;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1255 GObjectClass *gobject_class;
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1256 object_class = (GtkObjectClass*) klass;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1257 gobject_class = (GObjectClass*) klass;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1258 parent_class = gtk_type_class(GTK_TYPE_TEXT_VIEW);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1259 signals[URL_CLICKED] = g_signal_new("url_clicked",
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1260 G_TYPE_FROM_CLASS(gobject_class),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1261 G_SIGNAL_RUN_FIRST,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1262 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1263 NULL,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1264 0,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1265 g_cclosure_marshal_VOID__POINTER,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1266 G_TYPE_NONE, 1,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1267 G_TYPE_POINTER);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1268 signals[BUTTONS_UPDATE] = g_signal_new("format_buttons_update",
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1269 G_TYPE_FROM_CLASS(gobject_class),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1270 G_SIGNAL_RUN_FIRST,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1271 G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1272 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1273 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1274 g_cclosure_marshal_VOID__INT,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1275 G_TYPE_NONE, 1,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1276 G_TYPE_INT);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1277 signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1278 G_TYPE_FROM_CLASS(gobject_class),
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1279 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1280 G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1281 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1282 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1283 g_cclosure_marshal_VOID__INT,
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1284 G_TYPE_NONE, 1,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1285 G_TYPE_INT);
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1286 signals[CLEAR_FORMAT] = g_signal_new("format_function_clear",
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1287 G_TYPE_FROM_CLASS(gobject_class),
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1288 G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1289 G_STRUCT_OFFSET(GtkIMHtmlClass, clear_format),
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1290 NULL,
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1291 0,
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1292 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1293 G_TYPE_NONE, 0);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1294 signals[UPDATE_FORMAT] = g_signal_new("format_function_update",
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1295 G_TYPE_FROM_CLASS(gobject_class),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1296 G_SIGNAL_RUN_FIRST,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1297 G_STRUCT_OFFSET(GtkIMHtmlClass, update_format),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1298 NULL,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1299 0,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1300 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1301 G_TYPE_NONE, 0);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1302 signals[MESSAGE_SEND] = g_signal_new("message_send",
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1303 G_TYPE_FROM_CLASS(gobject_class),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1304 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1305 G_STRUCT_OFFSET(GtkIMHtmlClass, message_send),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1306 NULL,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1307 0, g_cclosure_marshal_VOID__VOID,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1308 G_TYPE_NONE, 0);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1309
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1310 klass->toggle_format = imhtml_toggle_format;
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1311 klass->message_send = imhtml_message_send;
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
1312 klass->clear_format = imhtml_clear_formatting;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1313
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1314 gobject_class->finalize = gtk_imhtml_finalize;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1315 widget_class->drag_motion = gtk_text_view_drag_motion;
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
1316 widget_class->expose_event = gtk_imhtml_expose_event;
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1317 gtk_widget_class_install_style_property(widget_class, g_param_spec_boxed("hyperlink-color",
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1318 _("Hyperlink color"),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1319 _("Color to draw hyperlinks."),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1320 GDK_TYPE_COLOR, G_PARAM_READABLE));
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1321 gtk_widget_class_install_style_property(widget_class, g_param_spec_boxed("hyperlink-prelight-color",
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1322 _("Hyperlink prelight color"),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1323 _("Color to draw hyperlinks when mouse is over them."),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1324 GDK_TYPE_COLOR, G_PARAM_READABLE));
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1325
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1326 binding_set = gtk_binding_set_by_class (parent_class);
10110
5869fb4a575d [gaim-migrate @ 11143]
Sean Egan <seanegan@pidgin.im>
parents: 10108
diff changeset
1327 gtk_binding_entry_add_signal (binding_set, GDK_b, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_BOLD);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1328 gtk_binding_entry_add_signal (binding_set, GDK_i, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_ITALIC);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1329 gtk_binding_entry_add_signal (binding_set, GDK_u, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_UNDERLINE);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1330 gtk_binding_entry_add_signal (binding_set, GDK_plus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1331 gtk_binding_entry_add_signal (binding_set, GDK_equal, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1332 gtk_binding_entry_add_signal (binding_set, GDK_minus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_SHRINK);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1333 binding_set = gtk_binding_set_by_class(klass);
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1334 gtk_binding_entry_add_signal (binding_set, GDK_r, GDK_CONTROL_MASK, "format_function_clear", 0);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1335 gtk_binding_entry_add_signal (binding_set, GDK_KP_Enter, 0, "message_send", 0);
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1336 gtk_binding_entry_add_signal (binding_set, GDK_Return, 0, "message_send", 0);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1337 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1338
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1339 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1340 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1341 GtkTextIter iter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1342 imhtml->text_buffer = gtk_text_buffer_new(NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1343 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1344 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer);
5105
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
1345 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1346 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1347 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(imhtml), 2);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1348 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(imhtml), 2);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1349 /*gtk_text_view_set_indent(GTK_TEXT_VIEW(imhtml), -15);*/
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1350 /*gtk_text_view_set_justification(GTK_TEXT_VIEW(imhtml), GTK_JUSTIFY_FILL);*/
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1351
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1352 /* These tags will be used often and can be reused--we create them on init and then apply them by name
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
1353 * other tags (color, size, face, etc.) will have to be created and applied dynamically
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
1354 * Note that even though we created SUB, SUP, and PRE tags here, we don't really
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
1355 * apply them anywhere yet. */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1356 gtk_text_buffer_create_tag(imhtml->text_buffer, "BOLD", "weight", PANGO_WEIGHT_BOLD, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1357 gtk_text_buffer_create_tag(imhtml->text_buffer, "ITALICS", "style", PANGO_STYLE_ITALIC, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1358 gtk_text_buffer_create_tag(imhtml->text_buffer, "UNDERLINE", "underline", PANGO_UNDERLINE_SINGLE, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1359 gtk_text_buffer_create_tag(imhtml->text_buffer, "STRIKE", "strikethrough", TRUE, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1360 gtk_text_buffer_create_tag(imhtml->text_buffer, "SUB", "rise", -5000, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1361 gtk_text_buffer_create_tag(imhtml->text_buffer, "SUP", "rise", 5000, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1362 gtk_text_buffer_create_tag(imhtml->text_buffer, "PRE", "family", "Monospace", NULL);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
1363 gtk_text_buffer_create_tag(imhtml->text_buffer, "search", "background", "#22ff00", "weight", "bold", NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1364
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1365 /* When hovering over a link, we show the hand cursor--elsewhere we show the plain ol' pointer cursor */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1366 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1367 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1368 imhtml->text_cursor = gdk_cursor_new (GDK_XTERM);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1369
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
1370 imhtml->show_comments = TRUE;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1371
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1372 imhtml->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal,
4902
e7cb2fed937e [gaim-migrate @ 5236]
Nathan Walp <nwalp@pidgin.im>
parents: 4895
diff changeset
1373 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1374 imhtml->default_smilies = gtk_smiley_tree_new();
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1375
4944
032dac83798e [gaim-migrate @ 5278]
Robert McQueen <robot101@debian.org>
parents: 4926
diff changeset
1376 g_signal_connect(G_OBJECT(imhtml), "size-allocate", G_CALLBACK(gtk_size_allocate_cb), NULL);
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1377 g_signal_connect(G_OBJECT(imhtml), "motion-notify-event", G_CALLBACK(gtk_motion_event_notify), NULL);
4944
032dac83798e [gaim-migrate @ 5278]
Robert McQueen <robot101@debian.org>
parents: 4926
diff changeset
1378 g_signal_connect(G_OBJECT(imhtml), "leave-notify-event", G_CALLBACK(gtk_leave_event_notify), NULL);
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1379 g_signal_connect(G_OBJECT(imhtml), "enter-notify-event", G_CALLBACK(gtk_enter_event_notify), NULL);
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1380 #if (!GTK_CHECK_VERSION(2,2,0))
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1381 /* See the comment for gtk_key_pressed_cb */
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
1382 g_signal_connect(G_OBJECT(imhtml), "key_press_event", G_CALLBACK(gtk_key_pressed_cb), NULL);
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1383 #endif
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1384 g_signal_connect(G_OBJECT(imhtml), "button_press_event", G_CALLBACK(gtk_imhtml_button_press_event), NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1385 g_signal_connect(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(preinsert_cb), imhtml);
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
1386 g_signal_connect(G_OBJECT(imhtml->text_buffer), "delete_range", G_CALLBACK(delete_cb), imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1387 g_signal_connect_after(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(insert_cb), imhtml);
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
1388 g_signal_connect_after(G_OBJECT(imhtml->text_buffer), "insert-child-anchor", G_CALLBACK(insert_ca_cb), imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1389 gtk_drag_dest_set(GTK_WIDGET(imhtml), 0,
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1390 link_drag_drop_targets, sizeof(link_drag_drop_targets) / sizeof(GtkTargetEntry),
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1391 GDK_ACTION_COPY);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1392 g_signal_connect(G_OBJECT(imhtml), "drag_data_received", G_CALLBACK(gtk_imhtml_link_drag_rcv_cb), imhtml);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1393 g_signal_connect(G_OBJECT(imhtml), "drag_drop", G_CALLBACK(gtk_imhtml_link_drop_cb), imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1394
7353
53cb39c73cf3 [gaim-migrate @ 7944]
Sean Egan <seanegan@pidgin.im>
parents: 7346
diff changeset
1395 g_signal_connect(G_OBJECT(imhtml), "copy-clipboard", G_CALLBACK(copy_clipboard_cb), NULL);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1396 g_signal_connect(G_OBJECT(imhtml), "cut-clipboard", G_CALLBACK(cut_clipboard_cb), NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1397 g_signal_connect(G_OBJECT(imhtml), "paste-clipboard", G_CALLBACK(paste_clipboard_cb), NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1398 g_signal_connect_after(G_OBJECT(imhtml), "realize", G_CALLBACK(imhtml_realized_remove_primary), NULL);
8740
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1399 g_signal_connect(G_OBJECT(imhtml), "unrealize", G_CALLBACK(imhtml_destroy_add_primary), NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1400
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1401 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set",
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1402 G_CALLBACK(mark_set_so_update_selection_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1403
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1404 gtk_widget_add_events(GTK_WIDGET(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1405 GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1406
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1407 imhtml->clipboard_text_string = NULL;
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1408 imhtml->clipboard_html_string = NULL;
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1409
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1410 imhtml->tip = NULL;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1411 imhtml->tip_timer = 0;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1412 imhtml->tip_window = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1413
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1414 imhtml->edit.bold = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1415 imhtml->edit.italic = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1416 imhtml->edit.underline = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1417 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1418 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1419 imhtml->edit.fontface = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1420 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1421 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1422
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1423
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1424 imhtml->scalables = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1425
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1426 gtk_imhtml_set_editable(imhtml, FALSE);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1427 g_signal_connect(G_OBJECT(imhtml), "populate-popup",
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1428 G_CALLBACK(hijack_menu_cb), NULL);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1429
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
1430 #ifdef _WIN32
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
1431 /* Register HTML Format as desired clipboard format */
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
1432 win_html_fmt = RegisterClipboardFormat("HTML Format");
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
1433 #endif
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1434 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1435
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1436 GtkWidget *gtk_imhtml_new(void *a, void *b)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1437 {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1438 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1439 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1440
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1441 GType gtk_imhtml_get_type()
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1442 {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1443 static GType imhtml_type = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1444
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1445 if (!imhtml_type) {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1446 static const GTypeInfo imhtml_info = {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1447 sizeof(GtkIMHtmlClass),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1448 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1449 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1450 (GClassInitFunc) gtk_imhtml_class_init,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1451 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1452 NULL,
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1453 sizeof (GtkIMHtml),
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1454 0,
12600
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1455 (GInstanceInitFunc) gtk_imhtml_init,
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1456 NULL
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1457 };
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1458
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1459 imhtml_type = g_type_register_static(gtk_text_view_get_type(),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1460 "GtkIMHtml", &imhtml_info, 0);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1461 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1462
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1463 return imhtml_type;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1464 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1465
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1466 struct url_data {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1467 GObject *object;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1468 gchar *url;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1469 };
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1470
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1471 static void url_data_destroy(gpointer mydata)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1472 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1473 struct url_data *data = mydata;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1474 g_object_unref(data->object);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1475 g_free(data->url);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1476 g_free(data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1477 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1478
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1479 static void url_open(GtkWidget *w, struct url_data *data) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1480 if(!data) return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1481 g_signal_emit(data->object, signals[URL_CLICKED], 0, data->url);
7988
fe4616ea76c3 [gaim-migrate @ 8665]
Nathan Walp <nwalp@pidgin.im>
parents: 7961
diff changeset
1482
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1483 }
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1484
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1485 static void url_copy(GtkWidget *w, gchar *url) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1486 GtkClipboard *clipboard;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1487
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1488 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_PRIMARY);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1489 gtk_clipboard_set_text(clipboard, url, -1);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1490
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1491 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_CLIPBOARD);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1492 gtk_clipboard_set_text(clipboard, url, -1);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1493 }
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1494
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1495 /* The callback for an event on a link tag. */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
1496 static gboolean tag_event(GtkTextTag *tag, GObject *imhtml, GdkEvent *event, GtkTextIter *arg2, gpointer unused) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1497 GdkEventButton *event_button = (GdkEventButton *) event;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1498 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1499 return FALSE;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1500 if (event->type == GDK_BUTTON_RELEASE) {
8957
b65a01270451 [gaim-migrate @ 9731]
Tim Ringenbach <marv@pidgin.im>
parents: 8932
diff changeset
1501 if ((event_button->button == 1) || (event_button->button == 2)) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1502 GtkTextIter start, end;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1503 /* we shouldn't open a URL if the user has selected something: */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1504 if (gtk_text_buffer_get_selection_bounds(
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1505 gtk_text_iter_get_buffer(arg2), &start, &end))
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1506 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1507
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1508 /* A link was clicked--we emit the "url_clicked" signal
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1509 * with the URL as the argument */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1510 g_object_ref(G_OBJECT(tag));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1511 g_signal_emit(imhtml, signals[URL_CLICKED], 0, g_object_get_data(G_OBJECT(tag), "link_url"));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1512 g_object_unref(G_OBJECT(tag));
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1513 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1514 } else if(event_button->button == 3) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1515 GtkWidget *img, *item, *menu;
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1516 struct url_data *tempdata = g_new(struct url_data, 1);
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1517 tempdata->object = g_object_ref(imhtml);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1518 tempdata->url = g_strdup(g_object_get_data(G_OBJECT(tag), "link_url"));
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1519
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1520 /* Don't want the tooltip around if user right-clicked on link */
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1521 if (GTK_IMHTML(imhtml)->tip_window) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1522 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1523 GTK_IMHTML(imhtml)->tip_window = NULL;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1524 }
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1525 if (GTK_IMHTML(imhtml)->tip_timer) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1526 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1527 GTK_IMHTML(imhtml)->tip_timer = 0;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1528 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1529 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1530 gdk_window_set_cursor(event_button->window, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1531 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1532 gdk_window_set_cursor(event_button->window, GTK_IMHTML(imhtml)->arrow_cursor);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1533 menu = gtk_menu_new();
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1534 g_object_set_data_full(G_OBJECT(menu), "x-imhtml-url-data", tempdata, url_data_destroy);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1535
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1536 /* buttons and such */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1537
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1538 if (!strncmp(tempdata->url, "mailto:", 7))
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1539 {
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1540 /* Copy E-Mail Address */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1541 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1542 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1543 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1544 _("_Copy E-Mail Address"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1545 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1546 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1547 G_CALLBACK(url_copy), tempdata->url + 7);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1548 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1549 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1550 else
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1551 {
10936
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1552 /* Open Link in Browser */
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1553 img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1554 GTK_ICON_SIZE_MENU);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1555 item = gtk_image_menu_item_new_with_mnemonic(
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1556 _("_Open Link in Browser"));
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1557 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1558 g_signal_connect(G_OBJECT(item), "activate",
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1559 G_CALLBACK(url_open), tempdata);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1560 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1561
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1562 /* Copy Link Location */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1563 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1564 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1565 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1566 _("_Copy Link Location"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1567 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1568 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1569 G_CALLBACK(url_copy), tempdata->url);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1570 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1571 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1572
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1573
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1574 gtk_widget_show_all(menu);
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1575 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1576 event_button->button, event_button->time);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1577
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1578 return TRUE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1579 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1580 }
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1581 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1582 return TRUE; /* Clicking the right mouse button on a link shouldn't
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1583 be caught by the regular GtkTextView menu */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1584 else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1585 return FALSE; /* Let clicks go through if we didn't catch anything */
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1586 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1587
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1588 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1589 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1590 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1591 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1592 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1593 guint time)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1594 {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1595 GdkDragAction suggested_action = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1596
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1597 if (gtk_drag_dest_find_target (widget, context, NULL) == GDK_NONE) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1598 /* can't accept any of the offered targets */
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1599 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1600 GtkWidget *source_widget;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1601 suggested_action = context->suggested_action;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1602 source_widget = gtk_drag_get_source_widget (context);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1603 if (source_widget == widget) {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1604 /* Default to MOVE, unless the user has
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1605 * pressed ctrl or alt to affect available actions
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1606 */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1607 if ((context->actions & GDK_ACTION_MOVE) != 0)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1608 suggested_action = GDK_ACTION_MOVE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1609 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1610 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1611
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1612 gdk_drag_status (context, suggested_action, time);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1613
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1614 /* TRUE return means don't propagate the drag motion to parent
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1615 * widgets that may also be drop sites.
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1616 */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1617 return TRUE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1618 }
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1619
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1620 static void
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1621 gtk_imhtml_link_drop_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1622 {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1623 GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1624
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1625 if (target != GDK_NONE)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1626 gtk_drag_get_data (widget, context, target, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1627 else
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1628 gtk_drag_finish (context, FALSE, FALSE, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1629
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1630 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1631 }
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1632
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1633 static void
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1634 gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y,
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1635 GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml)
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1636 {
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1637 gchar **links;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1638 gchar *link;
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1639 char *text = (char *)sd->data;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1640 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1641 GtkTextIter iter;
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1642 gint i = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1643
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1644 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1645
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1646 if(gtk_imhtml_get_editable(imhtml) && sd->data){
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1647 switch (info) {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1648 case GTK_IMHTML_DRAG_URL:
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1649 /* TODO: Is it really ok to change sd->data...? */
11920
be80617ec59b [gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11867
diff changeset
1650 gaim_str_strip_char((char *)sd->data, '\r');
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1651
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1652 links = g_strsplit((char *)sd->data, "\n", 0);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1653 while((link = links[i]) != NULL){
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1654 if(gaim_str_has_prefix(link, "http://") ||
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1655 gaim_str_has_prefix(link, "https://") ||
11820
534903b9226e [gaim-migrate @ 14111]
Richard Laager <rlaager@pidgin.im>
parents: 11814
diff changeset
1656 gaim_str_has_prefix(link, "ftp://"))
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1657 {
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1658 gchar *label;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1659
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1660 if(links[i + 1])
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1661 i++;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1662
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1663 label = links[i];
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1664
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1665 gtk_imhtml_insert_link(imhtml, mark, link, label);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1666 } else if (link=='\0') {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1667 /* Ignore blank lines */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1668 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1669 /* Special reasons, aka images being put in via other tag, etc. */
10345
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1670 /* ... don't pretend we handled it if we didn't */
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1671 gtk_drag_finish(dc, FALSE, FALSE, t);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1672 g_strfreev(links);
10345
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1673 return;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1674 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1675
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1676 i++;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1677 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1678 g_strfreev(links);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1679 break;
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1680 case GTK_IMHTML_DRAG_HTML:
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1681 {
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1682 char *utf8 = NULL;
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1683 /* Ewww. This is all because mozilla thinks that text/html is 'for internal use only.'
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1684 * as explained by this comment in gtkhtml:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1685 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1686 * FIXME This hack decides the charset of the selection. It seems that
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1687 * mozilla/netscape alway use ucs2 for text/html
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1688 * and openoffice.org seems to always use utf8 so we try to validate
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1689 * the string as utf8 and if that fails we assume it is ucs2
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1690 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1691 * See also the comment on text/html here:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1692 * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1693 */
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1694 if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1695 utf8 = ucs2_to_utf8_with_bom_check(text, sd->length);
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1696
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1697 if (!utf8) {
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1698 gaim_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in drag_rcv_cb\n");
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1699 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1700 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1701 } else if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1702 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1703 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1704 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1705
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1706 gtk_imhtml_insert_html_at_iter(imhtml, utf8 ? utf8 : text, 0, &iter);
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1707 g_free(utf8);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1708 break;
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1709 }
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1710 case GTK_IMHTML_DRAG_TEXT:
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1711 if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1712 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1713 return;
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1714 } else {
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1715 char *tmp = g_markup_escape_text(text, -1);
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1716 gtk_imhtml_insert_html_at_iter(imhtml, tmp, 0, &iter);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1717 g_free(tmp);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1718 }
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1719 break;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1720 default:
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1721 gtk_drag_finish(dc, FALSE, FALSE, t);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1722 return;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1723 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1724 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1725 } else {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1726 gtk_drag_finish(dc, FALSE, FALSE, t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1727 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1728 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1729
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1730 /* this isn't used yet
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1731 static void gtk_smiley_tree_remove (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1732 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1733 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1734 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1735 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1736 gint len = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1737
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1738 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1739 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1740
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1741 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1742 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1743
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1744 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1745 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1746 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1747 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1748 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1749
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1750 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1751 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1752
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1753 if (t->image) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1754 t->image = NULL;
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1755 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1756 }
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1757 */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1758
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1759
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1760 static gint
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1761 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1762 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1763 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1764 GtkSmileyTree *t = tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1765 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1766 gint len = 0;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1767 gchar *amp;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1768 gint alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1769
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1770 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1771 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1772
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1773 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1774 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1775
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1776 if(*x == '&' && gtk_imhtml_is_amp_escape(x, &amp, &alen)) {
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1777 gboolean matched = TRUE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1778 /* Make sure all chars of the unescaped value match */
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1779 while (*(amp + 1)) {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1780 pos = strchr (t->values->str, *amp);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1781 if (pos)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1782 t = t->children [GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1783 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1784 matched = FALSE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1785 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1786 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1787 amp++;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1788 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1789 if (!matched)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1790 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1791
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1792 pos = strchr (t->values->str, *amp);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1793 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1794 else if (*x == '<') /* Because we're all WYSIWYG now, a '<'
9636
1648147987cd [gaim-migrate @ 10480]
Sean Egan <seanegan@pidgin.im>
parents: 9621
diff changeset
1795 * char should only appear as the start of a tag. Perhaps a safer (but costlier)
1648147987cd [gaim-migrate @ 10480]
Sean Egan <seanegan@pidgin.im>
parents: 9621
diff changeset
1796 * check would be to call gtk_imhtml_is_tag on it */
10600
0c0053f3316c [gaim-migrate @ 12022]
Tim Ringenbach <marv@pidgin.im>
parents: 10589
diff changeset
1797 break;
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1798 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1799 alen = 1;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1800 pos = strchr (t->values->str, *x);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1801 }
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1802
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1803 if (pos)
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1804 t = t->children [GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1805 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1806 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1807
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1808 x += alen;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1809 len += alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1810 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1811
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1812 if (t->image)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1813 return len;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1814
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1815 return 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1816 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1817
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1818 void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1819 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
10537
9ece7671fa62 [gaim-migrate @ 11890]
Mark Doliner <markdoliner@pidgin.im>
parents: 10526
diff changeset
1820 const gchar *sml,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1821 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1822 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1823 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1824 g_return_if_fail (imhtml != NULL);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1825 g_return_if_fail (GTK_IS_IMHTML (imhtml));
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1826
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1827 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1828 tree = imhtml->default_smilies;
12833
1f461f275b90 [gaim-migrate @ 15181]
Richard Laager <rlaager@pidgin.im>
parents: 12796
diff changeset
1829 else if (!(tree = g_hash_table_lookup(imhtml->smiley_data, sml))) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1830 tree = gtk_smiley_tree_new();
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1831 g_hash_table_insert(imhtml->smiley_data, g_strdup(sml), tree);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1832 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1833
12335
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1834 smiley->imhtml = imhtml;
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1835
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1836 gtk_smiley_tree_insert (tree, smiley);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1837 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1838
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1839 static gboolean
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1840 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1841 GSList *fonts,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1842 const gchar *text,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1843 gint *len)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1844 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1845 GtkSmileyTree *tree;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1846 GtkIMHtmlFontDetail *font;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1847 char *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1848
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1849 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1850 font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1851 sml = font->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1852 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1853
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1854 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1855 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1856
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1857 if (!sml || !(tree = g_hash_table_lookup(imhtml->smiley_data, sml)))
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1858 tree = imhtml->default_smilies;
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1859
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1860 if (tree == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1861 return FALSE;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1862
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1863 *len = gtk_smiley_tree_lookup (tree, text);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1864 return (*len > 0);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1865 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1866
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1867 GtkIMHtmlSmiley *
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1868 gtk_imhtml_smiley_get(GtkIMHtml *imhtml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1869 const gchar *sml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1870 const gchar *text)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1871 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1872 GtkSmileyTree *t;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1873 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1874 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1875 t = imhtml->default_smilies;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1876 else
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1877 t = g_hash_table_lookup(imhtml->smiley_data, sml);
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1878
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1879
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1880 if (t == NULL)
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1881 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1882
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1883 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1884 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1885
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1886 if (!t->values) {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1887 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1888 }
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1889
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1890 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1891 if (pos) {
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1892 t = t->children [GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1893 } else {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1894 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1895 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1896 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1897 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1898
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1899 return t->image;
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1900 }
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1901
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
1902 static GdkPixbufAnimation *
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1903 gtk_smiley_tree_image (GtkIMHtml *imhtml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1904 const gchar *sml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1905 const gchar *text)
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1906 {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1907
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1908 GtkIMHtmlSmiley *smiley;
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1909
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1910 smiley = gtk_imhtml_smiley_get(imhtml,sml,text);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1911
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1912 if (!smiley)
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
1913 return NULL;
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
1914
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1915 if (!smiley->icon && smiley->file) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1916 smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1917 } else if (!smiley->icon && smiley->loader) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1918 smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1919 if (smiley->icon)
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1920 g_object_ref(G_OBJECT(smiley->icon));
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1921 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1922
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1923 return smiley->icon;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1924 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
1925
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1926 #define VALID_TAG(x) if (!g_ascii_strncasecmp (string, x ">", strlen (x ">"))) { \
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1927 *tag = g_strndup (string, strlen (x)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1928 *len = strlen (x) + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1929 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1930 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1931 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1932
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1933 #define VALID_OPT_TAG(x) if (!g_ascii_strncasecmp (string, x " ", strlen (x " "))) { \
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1934 const gchar *c = string + strlen (x " "); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1935 gchar e = '"'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1936 gboolean quote = FALSE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1937 while (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1938 if (*c == '"' || *c == '\'') { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1939 if (quote && (*c == e)) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1940 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1941 else if (!quote) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1942 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1943 e = *c; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1944 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1945 } else if (!quote && (*c == '>')) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1946 break; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1947 c++; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1948 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1949 if (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1950 *tag = g_strndup (string, c - string); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1951 *len = c - string + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1952 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1953 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1954 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1955 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1956
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1957
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1958 static gboolean
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1959 gtk_imhtml_is_amp_escape (const gchar *string,
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1960 gchar **replace,
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1961 gint *length)
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1962 {
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1963 static char buf[7];
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1964 g_return_val_if_fail (string != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1965 g_return_val_if_fail (replace != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1966 g_return_val_if_fail (length != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1967
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1968 if (!g_ascii_strncasecmp (string, "&amp;", 5)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1969 *replace = "&";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1970 *length = 5;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1971 } else if (!g_ascii_strncasecmp (string, "&lt;", 4)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1972 *replace = "<";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1973 *length = 4;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1974 } else if (!g_ascii_strncasecmp (string, "&gt;", 4)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1975 *replace = ">";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1976 *length = 4;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1977 } else if (!g_ascii_strncasecmp (string, "&nbsp;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1978 *replace = " ";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1979 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1980 } else if (!g_ascii_strncasecmp (string, "&copy;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1981 *replace = "©";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1982 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1983 } else if (!g_ascii_strncasecmp (string, "&quot;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1984 *replace = "\"";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1985 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1986 } else if (!g_ascii_strncasecmp (string, "&reg;", 5)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1987 *replace = "®";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1988 *length = 5;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1989 } else if (!g_ascii_strncasecmp (string, "&apos;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1990 *replace = "\'";
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1991 *length = 6;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1992 } else if (*(string + 1) == '#') {
2022
c47ca971fd2f [gaim-migrate @ 2032]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2002
diff changeset
1993 guint pound = 0;
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 3000
diff changeset
1994 if ((sscanf (string, "&#%u;", &pound) == 1) && pound != 0) {
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1995 int buflen;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1996 if (*(string + 3 + (gint)log10 (pound)) != ';')
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1997 return FALSE;
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1998 buflen = g_unichar_to_utf8((gunichar)pound, buf);
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1999 buf[buflen] = '\0';
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2000 *replace = buf;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2001 *length = 2;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2002 while (isdigit ((gint) string [*length])) (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2003 if (string [*length] == ';') (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2004 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2005 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2006 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2007 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2008 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2009 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2010
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2011 return TRUE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2012 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2013
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2014 static gboolean
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2015 gtk_imhtml_is_tag (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2016 gchar **tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2017 gint *len,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2018 gint *type)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2019 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2020 char *close;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2021 *type = 1;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2022
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2023
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2024 if (!(close = strchr (string, '>')))
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2025 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2026
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2027 VALID_TAG ("B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2028 VALID_TAG ("BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2029 VALID_TAG ("/B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2030 VALID_TAG ("/BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2031 VALID_TAG ("I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2032 VALID_TAG ("ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2033 VALID_TAG ("/I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2034 VALID_TAG ("/ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2035 VALID_TAG ("U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2036 VALID_TAG ("UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2037 VALID_TAG ("/U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2038 VALID_TAG ("/UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2039 VALID_TAG ("S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2040 VALID_TAG ("STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2041 VALID_TAG ("/S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2042 VALID_TAG ("/STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2043 VALID_TAG ("SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2044 VALID_TAG ("/SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2045 VALID_TAG ("SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2046 VALID_TAG ("/SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2047 VALID_TAG ("PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2048 VALID_TAG ("/PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2049 VALID_TAG ("TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2050 VALID_TAG ("/TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2051 VALID_TAG ("BR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2052 VALID_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2053 VALID_TAG ("/FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2054 VALID_TAG ("/A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2055 VALID_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2056 VALID_TAG ("/P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2057 VALID_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2058 VALID_TAG ("/H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2059 VALID_TAG ("HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2060 VALID_TAG ("/HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2061 VALID_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2062 VALID_TAG ("/BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2063 VALID_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2064 VALID_TAG ("HEAD");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2065 VALID_TAG ("/HEAD");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2066 VALID_TAG ("BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2067 VALID_TAG ("/BINARY");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2068
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2069 VALID_OPT_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2070 VALID_OPT_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2071 VALID_OPT_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2072 VALID_OPT_TAG ("A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2073 VALID_OPT_TAG ("IMG");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2074 VALID_OPT_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2075 VALID_OPT_TAG ("H3");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2076 VALID_OPT_TAG ("HTML");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2077
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2078 VALID_TAG ("CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2079 VALID_TAG ("/CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2080 VALID_TAG ("EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2081 VALID_TAG ("/EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2082 VALID_TAG ("STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2083 VALID_TAG ("/STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2084
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2085 VALID_OPT_TAG ("SPAN");
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2086 VALID_TAG ("/SPAN");
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2087 VALID_TAG ("BR/"); /* hack until gtkimhtml handles things better */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2088 VALID_TAG ("IMG");
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2089 VALID_TAG("SPAN");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2090 VALID_OPT_TAG("BR");
7988
fe4616ea76c3 [gaim-migrate @ 8665]
Nathan Walp <nwalp@pidgin.im>
parents: 7961
diff changeset
2091
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2092 if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) {
2954
fc07d855731d [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2093 gchar *e = strstr (string + strlen("!--"), "-->");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2094 if (e) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2095 *len = e - string + strlen ("-->");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2096 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2097 return TRUE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2098 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2099 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2100
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2101 *type = -1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2102 *len = close - string + 1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2103 *tag = g_strndup(string, *len - 1);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2104 return TRUE;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2105 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2106
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2107 static gchar*
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2108 gtk_imhtml_get_html_opt (gchar *tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2109 const gchar *opt)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2110 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2111 gchar *t = tag;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2112 gchar *e, *a;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2113 gchar *val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2114 gint len;
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2115 gchar *c;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2116 GString *ret;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2117
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2118 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2119 gboolean quote = FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2120 if (*t == '\0') break;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2121 while (*t && !((*t == ' ') && !quote)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2122 if (*t == '\"')
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2123 quote = ! quote;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2124 t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2125 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2126 while (*t && (*t == ' ')) t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2127 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2128
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2129 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2130 t += strlen (opt);
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2131 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2132 return NULL;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2133 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2134
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2135 if ((*t == '\"') || (*t == '\'')) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2136 e = a = ++t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2137 while (*e && (*e != *(t - 1))) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2138 if (*e == '\0') {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2139 return NULL;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2140 } else
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2141 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2142 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2143 e = a = t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2144 while (*e && !isspace ((gint) *e)) e++;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2145 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2146 }
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2147
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2148 ret = g_string_new("");
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2149 e = val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2150 while(*e) {
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2151 if(gtk_imhtml_is_amp_escape(e, &c, &len)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2152 ret = g_string_append(ret, c);
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2153 e += len;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2154 } else {
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2155 ret = g_string_append_c(ret, *e);
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2156 e++;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2157 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2158 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2159
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2160 g_free(val);
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2161
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2162 return g_string_free(ret, FALSE);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2163 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2164
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2165 /* Inline CSS Support - Douglas Thrift */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2166 static gchar*
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2167 gtk_imhtml_get_css_opt (gchar *style,
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2168 const gchar *opt)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2169 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2170 gchar *t = style;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2171 gchar *e, *a;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2172 gchar *val;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2173 gint len;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2174 gchar *c;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2175 GString *ret;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2176
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2177 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2178 /* gboolean quote = FALSE; */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2179 if (*t == '\0') break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2180 while (*t && !((*t == ' ') /*&& !quote*/)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2181 /* if (*t == '\"')
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2182 quote = ! quote; */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2183 t++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2184 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2185 while (*t && (*t == ' ')) t++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2186 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2187
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2188 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2189 t += strlen (opt);
10457
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2190 while (*t && (*t == ' ')) t++;
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2191 if (!*t)
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2192 return NULL;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2193 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2194 return NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2195 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2196
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2197 /* if ((*t == '\"') || (*t == '\'')) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2198 e = a = ++t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2199 while (*e && (*e != *(t - 1))) e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2200 if (*e == '\0') {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2201 return NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2202 } else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2203 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2204 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2205 e = a = t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2206 while (*e && !isspace ((gint) *e)) e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2207 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2208 }*/
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2209
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2210 e = a = t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2211 while (*e && *e != ';') e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2212 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2213
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2214 ret = g_string_new("");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2215 e = val;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2216 while(*e) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2217 if(gtk_imhtml_is_amp_escape(e, &c, &len)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2218 ret = g_string_append(ret, c);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2219 e += len;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2220 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2221 ret = g_string_append_c(ret, *e);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2222 e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2223 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2224 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2225 g_free(val);
14101
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2226
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2227 return g_string_free(ret, FALSE);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2228 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2229
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2230 static const char *accepted_protocols[] = {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2231 "http://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2232 "https://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2233 "ftp://"
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2234 };
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2235
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2236 static const int accepted_protocols_size = 3;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2237
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2238 /* returns if the beginning of the text is a protocol. If it is the protocol, returns the length so
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2239 the caller knows how long the protocol string is. */
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12335
diff changeset
2240 static int gtk_imhtml_is_protocol(const char *text)
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2241 {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2242 gint i;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2243
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2244 for(i=0; i<accepted_protocols_size; i++){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2245 if( strncasecmp(text, accepted_protocols[i], strlen(accepted_protocols[i])) == 0 ){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2246 return strlen(accepted_protocols[i]);
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2247 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2248 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2249 return 0;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2250 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2251
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2252 /*
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2253 <KingAnt> marv: The two IM image functions in oscar are gaim_odc_send_im and gaim_odc_incoming
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2254
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2255
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2256 [19:58] <Robot101> marv: images go into the imgstore, a refcounted... well.. hash. :)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2257 [19:59] <KingAnt> marv: I think the image tag used by the core is something like <img id="#"/>
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2258 [19:59] Ro0tSiEgE robert42 RobFlynn Robot101 ross22 roz
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2259 [20:00] <KingAnt> marv: Where the ID is the what is returned when you add the image to the imgstore using gaim_imgstore_add
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2260 [20:00] <marv> Robot101: so how does the image get passed to serv_got_im() and serv_send_im()? just as the <img id="#" and then the prpl looks it up from the store?
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2261 [20:00] <KingAnt> marv: Right
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2262 [20:00] <marv> alright
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2263
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2264 Here's my plan with IMImages. make gtk_imhtml_[append|insert]_text_with_images instead just
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2265 gtkimhtml_[append|insert]_text (hrm maybe it should be called html instead of text), add a
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2266 function for gaim to register for look up images, i.e. gtk_imhtml_set_get_img_fnc, so that
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2267 images can be looked up like that, instead of passing a GSList of them.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2268 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2269
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2270 void gtk_imhtml_append_text_with_images (GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2271 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2272 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2273 GSList *unused)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2274 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2275 GtkTextIter iter, ins, sel;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2276 GdkRectangle rect;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2277 int y, height, ins_offset = 0, sel_offset = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2278 gboolean fixins = FALSE, fixsel = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2279
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2280 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2281 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2282 g_return_if_fail (text != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2283
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2284
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2285 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2286 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &ins, gtk_text_buffer_get_insert(imhtml->text_buffer));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2287 if (gtk_text_iter_equal(&iter, &ins) && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2288 fixins = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2289 ins_offset = gtk_text_iter_get_offset(&ins);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2290 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2291
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2292 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &sel, gtk_text_buffer_get_selection_bound(imhtml->text_buffer));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2293 if (gtk_text_iter_equal(&iter, &sel) && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2294 fixsel = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2295 sel_offset = gtk_text_iter_get_offset(&sel);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2296 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2297
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2298 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2299 gtk_text_view_get_line_yrange(GTK_TEXT_VIEW(imhtml), &iter, &y, &height);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2300
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2301
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2302 if(((y + height) - (rect.y + rect.height)) > height
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2303 && gtk_text_buffer_get_char_count(imhtml->text_buffer)){
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2304 options |= GTK_IMHTML_NO_SCROLL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2305 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2306
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2307 gtk_imhtml_insert_html_at_iter(imhtml, text, options, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2308
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2309 if (fixins) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2310 gtk_text_buffer_get_iter_at_offset(imhtml->text_buffer, &ins, ins_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2311 gtk_text_buffer_move_mark(imhtml->text_buffer, gtk_text_buffer_get_insert(imhtml->text_buffer), &ins);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2312 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2313
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2314 if (fixsel) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2315 gtk_text_buffer_get_iter_at_offset(imhtml->text_buffer, &sel, sel_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2316 gtk_text_buffer_move_mark(imhtml->text_buffer, gtk_text_buffer_get_selection_bound(imhtml->text_buffer), &sel);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2317 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2318
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2319 if (!(options & GTK_IMHTML_NO_SCROLL)) {
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2320 gtk_imhtml_scroll_to_end(imhtml, (options & GTK_IMHTML_USE_SMOOTHSCROLLING));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2321 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2322 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2323
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2324 #define MAX_SCROLL_TIME 0.4 /* seconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2325 #define SCROLL_DELAY 33 /* milliseconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2326
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2327 /*
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2328 * Smoothly scroll a GtkIMHtml.
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2329 *
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2330 * @return TRUE if the window needs to be scrolled further, FALSE if we're at the bottom.
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2331 */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
2332 static gboolean scroll_cb(gpointer data)
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2333 {
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2334 GtkIMHtml *imhtml = data;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2335 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2336 gdouble max_val = adj->upper - adj->page_size;
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2337
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2338 g_return_val_if_fail(imhtml->scroll_time != NULL, FALSE);
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2339
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2340 if (g_timer_elapsed(imhtml->scroll_time, NULL) > MAX_SCROLL_TIME) {
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2341 /* time's up. jump to the end and kill the timer */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2342 gtk_adjustment_set_value(adj, max_val);
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2343 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2344 imhtml->scroll_time = NULL;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2345 return FALSE;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2346 }
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2347
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2348 /* scroll by 1/3rd the remaining distance */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2349 gtk_adjustment_set_value(adj, gtk_adjustment_get_value(adj) + ((max_val - gtk_adjustment_get_value(adj)) / 3));
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2350 return TRUE;
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2351 }
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2352
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2353 static gboolean smooth_scroll_idle_cb(gpointer data)
10797
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2354 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2355 GtkIMHtml *imhtml = data;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2356 imhtml->scroll_src = g_timeout_add(SCROLL_DELAY, scroll_cb, imhtml);
10797
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2357 return FALSE;
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2358 }
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2359
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2360 static gboolean scroll_idle_cb(gpointer data)
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2361 {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2362 GtkIMHtml *imhtml = data;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2363 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2364 if(adj) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2365 gtk_adjustment_set_value(adj, adj->upper - adj->page_size);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2366 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2367 imhtml->scroll_src = 0;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2368 return FALSE;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2369 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2370
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2371 void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml, gboolean smooth)
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2372 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2373 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2374 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2375 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2376 g_source_remove(imhtml->scroll_src);
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2377 if(smooth) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2378 imhtml->scroll_time = g_timer_new();
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2379 imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, smooth_scroll_idle_cb, imhtml, NULL);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2380 } else {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2381 imhtml->scroll_time = NULL;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2382 imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, scroll_idle_cb, imhtml, NULL);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2383 }
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2384 }
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2385
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2386 void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2387 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2388 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2389 GtkTextIter *iter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2390 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2391 GdkRectangle rect;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2392 gint pos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2393 gchar *ws;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2394 gchar *tag;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2395 gchar *bg = NULL;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2396 gint len;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2397 gint tlen, smilelen, wpos=0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2398 gint type;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2399 const gchar *c;
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2400 gchar *amp;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2401 gint len_protocol;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2402
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2403 guint bold = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2404 italics = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2405 underline = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2406 strike = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2407 sub = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2408 sup = 0,
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2409 title = 0,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2410 pre = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2411
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2412 gboolean br = FALSE;
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2413
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2414 GSList *fonts = NULL;
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2415 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2416 GtkIMHtmlScalable *scalable = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2417
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2418 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2419 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2420 g_return_if_fail (text != NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2421 c = text;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2422 len = strlen(text);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2423 ws = g_malloc(len + 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2424 ws[0] = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2425
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2426 while (pos < len) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2427 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2428 c++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2429 pos++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2430 ws[wpos] = '\0';
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2431 br = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2432 switch (type)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2433 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2434 case 1: /* B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2435 case 2: /* BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2436 case 54: /* STRONG */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2437 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2438 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2439
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2440 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2441 gtk_imhtml_toggle_bold(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2442 bold++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2443 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2444 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2445 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2446 case 3: /* /B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2447 case 4: /* /BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2448 case 55: /* /STRONG */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2449 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2450 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2451 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2452
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2453 if (bold) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2454 bold--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2455 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2456 gtk_imhtml_toggle_bold(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2457 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2458 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2459 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2460 case 5: /* I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2461 case 6: /* ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2462 case 52: /* EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2463 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2464 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2465 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2466 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2467 gtk_imhtml_toggle_italic(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2468 italics++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2469 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2470 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2471 case 7: /* /I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2472 case 8: /* /ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2473 case 53: /* /EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2474 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2475 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2476 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2477 if (italics) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2478 italics--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2479 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2480 gtk_imhtml_toggle_italic(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2481 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2482 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2483 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2484 case 9: /* U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2485 case 10: /* UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2486 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2487 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2488 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2489 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2490 gtk_imhtml_toggle_underline(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2491 underline++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2492 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2493 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2494 case 11: /* /U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2495 case 12: /* /UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2496 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2497 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2498 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2499 if (underline) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2500 underline--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2501 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2502 gtk_imhtml_toggle_underline(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2503 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2504 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2505 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2506 case 13: /* S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2507 case 14: /* STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2508 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2509 ws[0] = '\0'; wpos = 0;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2510 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE))
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2511 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2512 strike++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2513 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2514 case 15: /* /S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2515 case 16: /* /STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2516 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2517 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2518 if (strike)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2519 strike--;
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2520 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE) && !imhtml->wbfo)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2521 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2522 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2523 case 17: /* SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2524 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2525 sub++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2526 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2527 case 18: /* /SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2528 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2529 if (sub)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2530 sub--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2531 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2532 case 19: /* SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2533 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2534 sup++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2535 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2536 case 20: /* /SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2537 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2538 if (sup)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2539 sup--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2540 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2541 case 21: /* PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2542 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2543 pre++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2544 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2545 case 22: /* /PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2546 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2547 if (pre)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2548 pre--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2549 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2550 case 23: /* TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2551 /* FIXME: what was this supposed to do anyway? */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2552 title++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2553 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2554 case 24: /* /TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2555 /* FIXME: make this undo whatever 23 was supposed to do */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2556 if (title) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2557 if (options & GTK_IMHTML_NO_TITLE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2558 wpos = 0;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2559 ws [wpos] = '\0';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2560 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2561 title--;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2562 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2563 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2564 case 25: /* BR */
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2565 case 58: /* BR/ */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2566 case 61: /* BR (opt) */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2567 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2568 wpos++;
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2569 br = TRUE;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2570 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2571 case 26: /* HR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2572 case 42: /* HR (opt) */
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2573 {
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2574 int minus;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2575 struct scalable_data *sd = g_new(struct scalable_data, 1);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2576
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2577 ws[wpos++] = '\n';
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2578 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2579
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2580 sd->scalable = scalable = gtk_imhtml_hr_new();
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
2581 sd->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2582 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2583 scalable->add_to(scalable, imhtml, iter);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2584 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2585 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2586 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2587 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2588 ws[0] = '\0'; wpos = 0;
7942
e6c3c6ab87af [gaim-migrate @ 8613]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7914
diff changeset
2589 ws[wpos++] = '\n';
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2590
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2591 break;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2592 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2593 case 27: /* /FONT */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2594 if (fonts && !imhtml->wbfo) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2595 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2596 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2597 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2598 /* NEW_BIT (NEW_TEXT_BIT); */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2599
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2600 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2601 gtk_imhtml_toggle_fontface(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2602 g_free (font->face);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2603 }
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2604 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2605 gtk_imhtml_toggle_forecolor(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2606 g_free (font->fore);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2607 }
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2608 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2609 gtk_imhtml_toggle_backcolor(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2610 g_free (font->back);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2611 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2612 if (font->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2613 g_free (font->sml);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2614
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2615 if ((font->size != 3) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2616 gtk_imhtml_font_set_size(imhtml, 3);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2617
10761
cbfb52c33913 [gaim-migrate @ 12365]
Nathan Walp <nwalp@pidgin.im>
parents: 10732
diff changeset
2618
cbfb52c33913 [gaim-migrate @ 12365]
Nathan Walp <nwalp@pidgin.im>
parents: 10732
diff changeset
2619 fonts = g_slist_remove (fonts, font);
9245
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2620 g_free(font);
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2621
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2622 if (fonts) {
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2623 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2624
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2625 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2626 gtk_imhtml_toggle_fontface(imhtml, font->face);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2627 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2628 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2629 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2630 gtk_imhtml_toggle_backcolor(imhtml, font->back);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2631 if ((font->size != 3) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2632 gtk_imhtml_font_set_size(imhtml, font->size);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2633 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2634 }
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2635 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2636 case 28: /* /A */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2637 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2638 gtk_imhtml_toggle_link(imhtml, NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2639 ws[0] = '\0'; wpos = 0;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2640 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2641
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2642 case 29: /* P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2643 case 30: /* /P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2644 case 31: /* H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2645 case 32: /* /H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2646 case 33: /* HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2647 case 34: /* /HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2648 case 35: /* BODY */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2649 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2650 case 36: /* /BODY */
10786
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2651 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2652 ws[0] = '\0'; wpos = 0;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2653 gtk_imhtml_toggle_background(imhtml, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2654 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2655 case 37: /* FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2656 case 38: /* HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2657 case 39: /* /HEAD */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2658 case 40: /* BINARY */
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2659 case 41: /* /BINARY */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2660 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2661 case 43: /* FONT (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2662 {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2663 gchar *color, *back, *face, *size, *sml;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2664 GtkIMHtmlFontDetail *font, *oldfont = NULL;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2665 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2666 back = gtk_imhtml_get_html_opt (tag, "BACK=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2667 face = gtk_imhtml_get_html_opt (tag, "FACE=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2668 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2669 sml = gtk_imhtml_get_html_opt (tag, "SML=");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2670 if (!(color || back || face || size || sml))
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2671 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2672
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2673 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2674 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2675
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2676 font = g_new0 (GtkIMHtmlFontDetail, 1);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2677 if (fonts)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2678 oldfont = fonts->data;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2679
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2680 if (color && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2681 font->fore = color;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2682 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2683 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2684
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2685 if (back && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2686 font->back = back;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2687 gtk_imhtml_toggle_backcolor(imhtml, font->back);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2688 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2689
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2690 if (face && !(options & GTK_IMHTML_NO_FONTS) && (imhtml->format_functions & GTK_IMHTML_FACE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2691 font->face = face;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2692 gtk_imhtml_toggle_fontface(imhtml, font->face);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2693 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2694
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2695 if (sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2696 font->sml = sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2697 else if (oldfont && oldfont->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2698 font->sml = g_strdup(oldfont->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2699
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2700 if (size && !(options & GTK_IMHTML_NO_SIZES) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK))) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2701 if (*size == '+') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2702 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2703 font->size += 3;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2704 } else if (*size == '-') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2705 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2706 font->size = MAX (0, 3 - font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2707 } else if (isdigit (*size)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2708 sscanf (size, "%hd", &font->size);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2709 }
6042
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2710 if (font->size > 100)
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2711 font->size = 100;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2712 } else if (oldfont)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2713 font->size = oldfont->size;
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2714 else
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2715 font->size = 3;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2716 if ((imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2717 gtk_imhtml_font_set_size(imhtml, font->size);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2718 g_free(size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2719 fonts = g_slist_prepend (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2720 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2721 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2722 case 44: /* BODY (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2723 if (!(options & GTK_IMHTML_NO_COLOURS)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2724 char *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2725 if (bgcolor && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2726 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2727 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2728 /* NEW_BIT(NEW_TEXT_BIT); */
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2729 g_free(bg);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2730 bg = bgcolor;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2731 gtk_imhtml_toggle_background(imhtml, bg);
2885
213e2a58cbf6 [gaim-migrate @ 2898]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2871
diff changeset
2732 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2733 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2734 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2735 case 45: /* A (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2736 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2737 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2738 if (href && (imhtml->format_functions & GTK_IMHTML_LINK)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2739 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2740 ws[0] = '\0'; wpos = 0;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2741 gtk_imhtml_toggle_link(imhtml, href);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2742 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2743 g_free(href);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2744 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2745 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2746 case 46: /* IMG (opt) */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2747 case 59: /* IMG */
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2748 {
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2749 const char *id;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2750
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2751 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2752 ws[0] = '\0'; wpos = 0;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2753
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2754 if (!(imhtml->format_functions & GTK_IMHTML_IMAGE))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2755 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2756
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2757 id = gtk_imhtml_get_html_opt(tag, "ID=");
9186
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2758 if (!id)
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2759 break;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2760 gtk_imhtml_insert_image_at_iter(imhtml, atoi(id), iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2761 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2762 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2763 case 47: /* P (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2764 case 48: /* H3 (opt) */
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2765 case 49: /* HTML (opt) */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2766 case 50: /* CITE */
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2767 case 51: /* /CITE */
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2768 case 56: /* SPAN (opt) */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2769 /* Inline CSS Support - Douglas Thrift
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2770 *
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2771 * color
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2772 * background
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2773 * font-family
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2774 * font-size
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2775 * text-decoration: underline
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2776 * font-weight: bold
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2777 *
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2778 * TODO:
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2779 * background-color
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2780 * font-style
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2781 */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2782 {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2783 gchar *style, *color, *background, *family, *size;
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2784 gchar *textdec, *weight;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2785 GtkIMHtmlFontDetail *font, *oldfont = NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2786 style = gtk_imhtml_get_html_opt (tag, "style=");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2787
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2788 if (!style) break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2789
10457
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2790 color = gtk_imhtml_get_css_opt (style, "color:");
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2791 background = gtk_imhtml_get_css_opt (style, "background:");
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2792 family = gtk_imhtml_get_css_opt (style,
10457
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2793 "font-family:");
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2794 size = gtk_imhtml_get_css_opt (style, "font-size:");
61ab41c24ed3 [gaim-migrate @ 11725]
Tim Ringenbach <marv@pidgin.im>
parents: 10345
diff changeset
2795 textdec = gtk_imhtml_get_css_opt (style, "text-decoration:");
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2796 weight = gtk_imhtml_get_css_opt (style, "font-weight:");
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2797
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2798 if (!(color || family || size || background || textdec || weight)) {
8120
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2799 g_free(style);
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2800 break;
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2801 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2802
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2803
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2804 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2805 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2806 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2807
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2808 font = g_new0 (GtkIMHtmlFontDetail, 1);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2809 if (fonts)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2810 oldfont = fonts->data;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2811
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2812 if (color && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_FORECOLOR))
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2813 {
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2814 font->fore = color;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2815 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2816 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2817 else if (oldfont && oldfont->fore)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2818 font->fore = g_strdup(oldfont->fore);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2819
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2820 if (background && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR))
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2821 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2822 font->back = background;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2823 gtk_imhtml_toggle_backcolor(imhtml, font->back);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2824 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2825 else if (oldfont && oldfont->back)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2826 font->back = g_strdup(oldfont->back);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2827
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2828 if (family && !(options & GTK_IMHTML_NO_FONTS) && (imhtml->format_functions & GTK_IMHTML_FACE))
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2829 {
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2830 font->face = family;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2831 gtk_imhtml_toggle_fontface(imhtml, font->face);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2832 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2833 else if (oldfont && oldfont->face)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2834 font->face = g_strdup(oldfont->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2835 if (font->face && (atoi(font->face) > 100)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2836 /* WTF is this? */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2837 /* Maybe it sets a max size on the font face? I seem to
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2838 * remember bad things happening if the font size was
9696
9d62e1ec5977 [gaim-migrate @ 10555]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9636
diff changeset
2839 * 2 billion */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2840 g_free(font->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2841 font->face = g_strdup("100");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2842 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2843
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2844 if (oldfont && oldfont->sml)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2845 font->sml = g_strdup(oldfont->sml);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2846
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2847 if (size && !(options & GTK_IMHTML_NO_SIZES) && (imhtml->format_functions & (GTK_IMHTML_SHRINK|GTK_IMHTML_GROW))) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2848 if (g_ascii_strcasecmp(size, "xx-small") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2849 font->size = 1;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2850 else if (g_ascii_strcasecmp(size, "smaller") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2851 || g_ascii_strcasecmp(size, "x-small") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2852 font->size = 2;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2853 else if (g_ascii_strcasecmp(size, "larger") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2854 || g_ascii_strcasecmp(size, "medium") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2855 font->size = 4;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2856 else if (g_ascii_strcasecmp(size, "large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2857 font->size = 5;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2858 else if (g_ascii_strcasecmp(size, "x-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2859 font->size = 6;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2860 else if (g_ascii_strcasecmp(size, "xx-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2861 font->size = 7;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2862 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2863 font->size = 3;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2864 gtk_imhtml_font_set_size(imhtml, font->size);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2865 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2866 else if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2867 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2868 font->size = oldfont->size;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2869 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2870
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2871 if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2872 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2873 font->underline = oldfont->underline;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2874 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2875 if (textdec && font->underline != 1
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
2876 && g_ascii_strcasecmp(textdec, "underline") == 0
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2877 && (imhtml->format_functions & GTK_IMHTML_UNDERLINE))
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2878 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2879 gtk_imhtml_toggle_underline(imhtml);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2880 font->underline = 1;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2881 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2882
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2883 if (oldfont)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2884 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2885 font->bold = oldfont->bold;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2886 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2887 if (weight)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2888 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2889 if(!g_ascii_strcasecmp(weight, "normal")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2890 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2891 } else if(!g_ascii_strcasecmp(weight, "bold")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2892 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2893 } else if(!g_ascii_strcasecmp(weight, "bolder")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2894 font->bold++;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2895 } else if(!g_ascii_strcasecmp(weight, "lighter")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2896 if(font->bold > 0)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2897 font->bold--;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2898 } else {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2899 int num = atoi(weight);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2900 if(num >= 700)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2901 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2902 else
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2903 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2904 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2905 if((font->bold && !oldfont->bold) || (oldfont->bold && !font->bold))
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2906 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2907 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2908 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2909 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2910
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2911 g_free(style);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2912 g_free(size);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2913 fonts = g_slist_prepend (fonts, font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2914 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2915 break;
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2916 case 57: /* /SPAN */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2917 /* Inline CSS Support - Douglas Thrift */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2918 if (fonts && !imhtml->wbfo) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2919 GtkIMHtmlFontDetail *oldfont = NULL;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2920 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2921 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2922 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2923 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2924 fonts = g_slist_remove (fonts, font);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2925 if (fonts)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2926 oldfont = fonts->data;
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2927
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2928 if (!oldfont) {
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2929 gtk_imhtml_font_set_size(imhtml, 3);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2930 if (font->underline)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2931 gtk_imhtml_toggle_underline(imhtml);
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2932 if (font->bold)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2933 gtk_imhtml_toggle_bold(imhtml);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2934 gtk_imhtml_toggle_fontface(imhtml, NULL);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2935 gtk_imhtml_toggle_forecolor(imhtml, NULL);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2936 gtk_imhtml_toggle_backcolor(imhtml, NULL);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2937 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2938 else
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2939 {
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2940
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2941 if (font->size != oldfont->size)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2942 gtk_imhtml_font_set_size(imhtml, oldfont->size);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2943
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2944 if (font->underline != oldfont->underline)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2945 gtk_imhtml_toggle_underline(imhtml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2946
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2947 if ((font->bold && !oldfont->bold) || (oldfont->bold && !font->bold))
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2948 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2949
9286
3fb7e164db82 [gaim-migrate @ 10089]
Tim Ringenbach <marv@pidgin.im>
parents: 9245
diff changeset
2950 if (font->face && (!oldfont->face || strcmp(font->face, oldfont->face) != 0))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2951 gtk_imhtml_toggle_fontface(imhtml, oldfont->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2952
9286
3fb7e164db82 [gaim-migrate @ 10089]
Tim Ringenbach <marv@pidgin.im>
parents: 9245
diff changeset
2953 if (font->fore && (!oldfont->fore || strcmp(font->fore, oldfont->fore) != 0))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2954 gtk_imhtml_toggle_forecolor(imhtml, oldfont->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2955
9286
3fb7e164db82 [gaim-migrate @ 10089]
Tim Ringenbach <marv@pidgin.im>
parents: 9245
diff changeset
2956 if (font->back && (!oldfont->back || strcmp(font->back, oldfont->back) != 0))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2957 gtk_imhtml_toggle_backcolor(imhtml, oldfont->back);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2958 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2959
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2960 g_free (font->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2961 g_free (font->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2962 g_free (font->back);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2963 g_free (font->sml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2964
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2965 g_free (font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2966 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2967 break;
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2968 case 60: /* SPAN */
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2969 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2970 case 62: /* comment */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2971 /* NEW_BIT (NEW_TEXT_BIT); */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
2972 ws[wpos] = '\0';
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
2973
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2974 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2975
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2976 if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS)) {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
2977 wpos = g_snprintf (ws, len, "%s", tag);
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2978 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2979 }
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2980 ws[0] = '\0'; wpos = 0;
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2981
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2982 /* NEW_BIT (NEW_COMMENT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2983 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2984 default:
6882
b6d0ac441869 [gaim-migrate @ 7428]
Tim Ringenbach <marv@pidgin.im>
parents: 6839
diff changeset
2985 break;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2986 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2987 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2988 pos += tlen;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
2989 g_free(tag); /* This was allocated back in VALID_TAG() */
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2990 } else if (gtk_imhtml_is_smiley(imhtml, fonts, c, &smilelen)) {
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2991 GtkIMHtmlFontDetail *fd;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2992
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2993 gchar *sml = NULL;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2994 if (fonts) {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2995 fd = fonts->data;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2996 sml = fd->sml;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2997 }
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2998 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2999 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
3000
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3001 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
3002 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
3003
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3004 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, ws, iter);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
3005
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
3006 c += smilelen;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
3007 pos += smilelen;
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
3008 wpos = 0;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
3009 ws[0] = 0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3010 } else if (*c == '&' && gtk_imhtml_is_amp_escape (c, &amp, &tlen)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
3011 while(*amp) {
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
3012 ws [wpos++] = *amp++;
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
3013 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3014 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3015 pos += tlen;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3016 } else if (*c == '\n') {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3017 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3018 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3019 wpos++;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3020 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3021 ws[0] = '\0';
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3022 wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3023 /* NEW_BIT (NEW_TEXT_BIT); */
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
3024 } else if (!br) { /* Don't insert a space immediately after an HTML break */
9621
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3025 /* A newline is defined by HTML as whitespace, which means we have to replace it with a word boundary.
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3026 * word breaks vary depending on the language used, so the correct thing to do is to use Pango to determine
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3027 * what language this is, determine the proper word boundary to use, and insert that. I'm just going to insert
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3028 * a space instead. What are the non-English speakers going to do? Complain in a language I'll understand?
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3029 * Bu-wahaha! */
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3030 ws[wpos] = ' ';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3031 wpos++;
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3032 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3033 ws[0] = '\0';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
3034 wpos = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3035 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3036 c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3037 pos++;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3038 } else if ((len_protocol = gtk_imhtml_is_protocol(c)) > 0){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3039 while(len_protocol--){
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3040 /* Skip the next len_protocol characters, but make sure they're
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3041 copied into the ws array.
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3042 */
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3043 ws [wpos++] = *c++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3044 pos++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3045 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3046 } else if (*c) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3047 ws [wpos++] = *c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3048 pos++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3049 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3050 break;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3051 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3052 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3053 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3054 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3055
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3056 /* NEW_BIT(NEW_TEXT_BIT); */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3057
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3058 while (fonts) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3059 GtkIMHtmlFontDetail *font = fonts->data;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3060 fonts = g_slist_remove (fonts, font);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3061 g_free (font->face);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3062 g_free (font->fore);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3063 g_free (font->back);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3064 g_free (font->sml);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3065 g_free (font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3066 }
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3067
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3068 g_free(ws);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
3069 g_free(bg);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3070
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3071 if (!imhtml->wbfo)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3072 gtk_imhtml_close_tags(imhtml, iter);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3073
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3074 object = g_object_ref(G_OBJECT(imhtml));
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3075 g_signal_emit(object, signals[UPDATE_FORMAT], 0);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3076 g_object_unref(object);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3077
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3078 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3079
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3080 void gtk_imhtml_remove_smileys(GtkIMHtml *imhtml)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3081 {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3082 g_hash_table_destroy(imhtml->smiley_data);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3083 gtk_smiley_tree_destroy(imhtml->default_smilies);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3084 imhtml->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal,
4902
e7cb2fed937e [gaim-migrate @ 5236]
Nathan Walp <nwalp@pidgin.im>
parents: 4895
diff changeset
3085 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3086 imhtml->default_smilies = gtk_smiley_tree_new();
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3087 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3088
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3089 void gtk_imhtml_show_comments (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3090 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3091 {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
3092 imhtml->show_comments = show;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3093 }
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3094
11814
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3095 const char *
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3096 gtk_imhtml_get_protocol_name(GtkIMHtml *imhtml) {
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3097 return imhtml->protocol_name;
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3098 }
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3099
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3100 void
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
3101 gtk_imhtml_set_protocol_name(GtkIMHtml *imhtml, const gchar *protocol_name) {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3102 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3103 imhtml->protocol_name = g_strdup(protocol_name);
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3104 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3105
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3106 void
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3107 gtk_imhtml_delete(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3108 GList *l;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3109 GSList *sl;
11234
e23fd86e7581 [gaim-migrate @ 13377]
Daniel Atallah <datallah@pidgin.im>
parents: 11233
diff changeset
3110 GtkTextIter i, i_s, i_e;
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3111 GObject *object = g_object_ref(G_OBJECT(imhtml));
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3112
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3113 if (start == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3114 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &i_s);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3115 start = &i_s;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3116 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3117
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3118 if (end == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3119 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &i_e);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3120 end = &i_e;
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
3121 }
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3122
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3123 l = imhtml->scalables;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3124 while (l) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3125 GList *next = l->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3126 struct scalable_data *sd = l->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3127 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer,
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3128 &i, sd->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3129 if (gtk_text_iter_in_range(&i, start, end)) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3130 GtkIMHtmlScalable *scale = sd->scalable;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3131 scale->free(scale);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3132 imhtml->scalables = g_list_remove_link(imhtml->scalables, l);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3133 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3134 l = next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3135 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3136
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3137 sl = imhtml->im_images;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3138 while (sl) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3139 GSList *next = sl->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3140 struct im_image_data *img_data = sl->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3141 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer,
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3142 &i, img_data->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3143 if (gtk_text_iter_in_range(&i, start, end)) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3144 if (imhtml->funcs->image_unref)
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3145 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3146 imhtml->im_images = g_slist_delete_link(imhtml->im_images, sl);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3147 g_free(img_data);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3148 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3149 sl = next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3150 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3151 gtk_text_buffer_delete(imhtml->text_buffer, start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3152
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3153 g_object_unref(object);
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3154 }
2363
0767c14d7879 [gaim-migrate @ 2376]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2349
diff changeset
3155
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3156 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3157 {
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3158 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3159 GtkTextIter iter;
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3160
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3161 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3162 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, rect.x,
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3163 rect.y - rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3164 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &iter, 0, TRUE, 0, 0);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3165
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3166 }
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3167 void gtk_imhtml_page_down (GtkIMHtml *imhtml)
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3168 {
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3169 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3170 GtkTextIter iter;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3171
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3172 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3173 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, rect.x,
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3174 rect.y + rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3175 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &iter, 0, TRUE, 0, 0);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3176 }
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
3177
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3178 /* GtkIMHtmlScalable, gtk_imhtml_image, gtk_imhtml_hr */
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3179 GtkIMHtmlScalable *gtk_imhtml_image_new(GdkPixbuf *img, const gchar *filename, int id)
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
3180 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3181 GtkIMHtmlImage *im_image = g_malloc(sizeof(GtkIMHtmlImage));
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3182 GtkImage *image = GTK_IMAGE(gtk_image_new_from_pixbuf(img));
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3183
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3184 GTK_IMHTML_SCALABLE(im_image)->scale = gtk_imhtml_image_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3185 GTK_IMHTML_SCALABLE(im_image)->add_to = gtk_imhtml_image_add_to;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3186 GTK_IMHTML_SCALABLE(im_image)->free = gtk_imhtml_image_free;
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3187
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3188 im_image->pixbuf = img;
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3189 im_image->image = image;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3190 im_image->width = gdk_pixbuf_get_width(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3191 im_image->height = gdk_pixbuf_get_height(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3192 im_image->mark = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3193 im_image->filename = g_strdup(filename);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3194 im_image->id = id;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3195 im_image->filesel = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3196
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3197 g_object_ref(img);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3198 return GTK_IMHTML_SCALABLE(im_image);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3199 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3200
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3201 void gtk_imhtml_image_scale(GtkIMHtmlScalable *scale, int width, int height)
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3202 {
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3203 GtkIMHtmlImage *im_image = (GtkIMHtmlImage *)scale;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3204
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3205 if (im_image->width > width || im_image->height > height) {
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3206 double ratio_w, ratio_h, ratio;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3207 int new_h, new_w;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3208 GdkPixbuf *new_image = NULL;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3209
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3210 ratio_w = ((double)width - 2) / im_image->width;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3211 ratio_h = ((double)height - 2) / im_image->height;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3212
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3213 ratio = (ratio_w < ratio_h) ? ratio_w : ratio_h;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3214
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3215 new_w = (int)(im_image->width * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3216 new_h = (int)(im_image->height * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3217
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3218 new_image = gdk_pixbuf_scale_simple(im_image->pixbuf, new_w, new_h, GDK_INTERP_BILINEAR);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3219 gtk_image_set_from_pixbuf(im_image->image, new_image);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3220 g_object_unref(G_OBJECT(new_image));
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3221 } else if (gdk_pixbuf_get_width(gtk_image_get_pixbuf(im_image->image)) != im_image->width) {
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3222 /* Enough space to show the full-size of the image. */
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3223 GdkPixbuf *new_image;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3224
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3225 new_image = gdk_pixbuf_scale_simple(im_image->pixbuf, im_image->width, im_image->height, GDK_INTERP_BILINEAR);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3226 gtk_image_set_from_pixbuf(im_image->image, new_image);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3227 g_object_unref(G_OBJECT(new_image));
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3228 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3229 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3230
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3231 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3232 image_save_yes_cb(GtkIMHtmlImage *image, const char *filename)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3233 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3234 gchar *type = NULL;
5019
ac3e5e1f588a [gaim-migrate @ 5355]
Luke Schierer <lschiere@pidgin.im>
parents: 5015
diff changeset
3235 GError *error = NULL;
5015
3a8f6559f866 [gaim-migrate @ 5351]
Nathan Walp <nwalp@pidgin.im>
parents: 5012
diff changeset
3236 #if GTK_CHECK_VERSION(2,2,0)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3237 GSList *formats = gdk_pixbuf_get_formats();
6162
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3238 #else
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3239 char *basename = g_path_get_basename(filename);
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3240 char *ext = strrchr(basename, '.');
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3241 #endif
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3242
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3243 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3244 image->filesel = NULL;
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3245
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3246 #if GTK_CHECK_VERSION(2,2,0)
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3247 while (formats) {
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3248 GdkPixbufFormat *format = formats->data;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3249 gchar **extensions = gdk_pixbuf_format_get_extensions(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3250 gpointer p = extensions;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3251
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3252 while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3253 gchar *fmt_ext = extensions[0];
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3254 const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3255
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3256 if(!strcmp(fmt_ext, file_ext)){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3257 type = gdk_pixbuf_format_get_name(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3258 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3259 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3260
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3261 extensions++;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3262 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3263
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3264 g_strfreev(p);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3265
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3266 if (type)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3267 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3268
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3269 formats = formats->next;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3270 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3271
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3272 g_slist_free(formats);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3273 #else
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3274 /* this is really ugly code, but I think it will work */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3275 if (ext) {
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3276 ext++;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3277 if (!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg"))
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3278 type = g_strdup("jpeg");
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3279 else if (!g_ascii_strcasecmp(ext, "png"))
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3280 type = g_strdup("png");
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3281 }
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3282
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3283 g_free(basename);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3284 #endif
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3285
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3286 /* If I can't find a valid type, I will just tell the user about it and then assume
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3287 it's a png */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3288 if (!type){
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3289 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3290 GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3291 _("<span size='larger' weight='bold'>Unrecognized file type</span>\n\nDefaulting to PNG."));
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3292 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3293 GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3294 _("Unrecognized file type\n\nDefaulting to PNG."));
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3295 #endif
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3296
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3297 g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3298 gtk_widget_show(dialog);
9717
3c8f42ca313e [gaim-migrate @ 10578]
Mark Doliner <markdoliner@pidgin.im>
parents: 9709
diff changeset
3299 type = g_strdup("png");
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3300 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3301
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3302 gdk_pixbuf_save(image->pixbuf, filename, type, &error, NULL);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3303
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3304 if (error){
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3305 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3306 GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3307 _("<span size='larger' weight='bold'>Error saving image</span>\n\n%s"), error->message);
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3308 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3309 GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3310 _("Error saving image\n\n%s"), error->message);
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3311 #endif
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3312 g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3313 gtk_widget_show(dialog);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3314 g_error_free(error);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3315 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3316
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3317 g_free(type);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3318 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3319
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3320 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3321 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3322 image_save_check_if_exists_cb(GtkWidget *widget, gint response, GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3323 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3324 gchar *filename;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3325
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3326 if (response != GTK_RESPONSE_ACCEPT) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3327 gtk_widget_destroy(widget);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3328 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3329 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3330 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3331
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3332 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3333 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3334 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3335 image_save_check_if_exists_cb(GtkWidget *button, GtkIMHtmlImage *image)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3336 {
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3337 gchar *filename;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3338
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3339 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(image->filesel)));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3340
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3341 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3342 gchar *dirname;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3343 /* append a / is needed */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3344 if (filename[strlen(filename) - 1] != G_DIR_SEPARATOR) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3345 dirname = g_strconcat(filename, G_DIR_SEPARATOR_S, NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3346 } else {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3347 dirname = g_strdup(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3348 }
9574
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3349 gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), dirname);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3350 g_free(dirname);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3351 g_free(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3352 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3353 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3354 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3355
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3356 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3357 * XXX - We should probably prompt the user to determine if they really
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3358 * want to overwrite the file or not. However, I don't feel like doing
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3359 * that, so we're just always going to overwrite if the file exists.
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3360 */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3361 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3362 if (g_file_test(filename, G_FILE_TEST_EXISTS)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3363 } else
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3364 image_save_yes_cb(image, filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3365 */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3366
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3367 image_save_yes_cb(image, filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3368
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3369 g_free(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3370 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3371
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3372 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3373 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3374 image_save_cancel_cb(GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3375 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3376 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3377 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3378 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3379 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3380
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3381 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3382 gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3383 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3384 if (image->filesel != NULL) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3385 gtk_window_present(GTK_WINDOW(image->filesel));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3386 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3387 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3388
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3389 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3390 image->filesel = gtk_file_chooser_dialog_new(_("Save Image"),
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3391 NULL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3392 GTK_FILE_CHOOSER_ACTION_SAVE,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3393 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3394 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3395 NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3396 gtk_dialog_set_default_response(GTK_DIALOG(image->filesel), GTK_RESPONSE_ACCEPT);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3397 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3398 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(image->filesel), image->filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3399 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(image->filesel)), "response",
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3400 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3401 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3402 image->filesel = gtk_file_selection_new(_("Save Image"));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3403 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3404 gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), image->filename);
9574
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3405 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)), "delete_event",
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3406 G_CALLBACK(image_save_cancel_cb), image);
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3407 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->cancel_button),
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3408 "clicked", G_CALLBACK(image_save_cancel_cb), image);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3409 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->ok_button), "clicked",
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3410 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3411 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3412
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3413 gtk_widget_show(image->filesel);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3414 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3415
9815
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3416 /*
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3417 * So, um, AIM Direct IM lets you send any file, not just images. You can
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3418 * just insert a sound or a file or whatever in a conversation. It's
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3419 * basically like file transfer, except there is an icon to open the file
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3420 * embedded in the conversation. Someone should make the Gaim core handle
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3421 * all of that.
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3422 */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3423 static gboolean gtk_imhtml_image_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlImage *image)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3424 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3425 GdkEventButton *event_button = (GdkEventButton *) event;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3426
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3427 if (event->type == GDK_BUTTON_RELEASE) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3428 if(event_button->button == 3) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3429 GtkWidget *img, *item, *menu;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3430 gchar *text = g_strdup_printf(_("_Save Image..."));
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3431 menu = gtk_menu_new();
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3432
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3433 /* buttons and such */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3434 img = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3435 item = gtk_image_menu_item_new_with_mnemonic(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3436 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3437 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_image_save), image);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3438 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3439
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3440 gtk_widget_show_all(menu);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3441 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3442 event_button->button, event_button->time);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3443
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3444 g_free(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3445 return TRUE;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3446 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3447 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3448 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3449 return TRUE; /* Clicking the right mouse button on a link shouldn't
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3450 be caught by the regular GtkTextView menu */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3451 else
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3452 return FALSE; /* Let clicks go through if we didn't catch anything */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3453
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3454 }
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3455 void gtk_imhtml_image_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3456 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3457 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3458
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3459 g_object_unref(image->pixbuf);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3460 g_free(image->filename);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3461 if (image->filesel)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3462 gtk_widget_destroy(image->filesel);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3463 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3464 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3465
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3466 void gtk_imhtml_image_add_to(GtkIMHtmlScalable *scale, GtkIMHtml *imhtml, GtkTextIter *iter)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3467 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3468 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3469 GtkWidget *box = gtk_event_box_new();
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3470 char *tag;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3471 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3472
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3473 gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(image->image));
9229
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3474
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3475 if(!gtk_check_version(2, 4, 0))
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3476 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3477
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3478 gtk_widget_show(GTK_WIDGET(image->image));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3479 gtk_widget_show(box);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3480
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3481 tag = g_strdup_printf("<IMG ID=\"%d\">", image->id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3482 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", tag, g_free);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3483 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "[Image]");
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3484
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3485 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), box, anchor);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3486 g_signal_connect(G_OBJECT(box), "event", G_CALLBACK(gtk_imhtml_image_clicked), image);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3487 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3488
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3489 GtkIMHtmlScalable *gtk_imhtml_hr_new()
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3490 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3491 GtkIMHtmlHr *hr = g_malloc(sizeof(GtkIMHtmlHr));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3492
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3493 GTK_IMHTML_SCALABLE(hr)->scale = gtk_imhtml_hr_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3494 GTK_IMHTML_SCALABLE(hr)->add_to = gtk_imhtml_hr_add_to;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3495 GTK_IMHTML_SCALABLE(hr)->free = gtk_imhtml_hr_free;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3496
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3497 hr->sep = gtk_hseparator_new();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3498 gtk_widget_set_size_request(hr->sep, 5000, 2);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3499 gtk_widget_show(hr->sep);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3500
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3501 return GTK_IMHTML_SCALABLE(hr);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3502 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3503
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3504 void gtk_imhtml_hr_scale(GtkIMHtmlScalable *scale, int width, int height)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3505 {
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
3506 gtk_widget_set_size_request(((GtkIMHtmlHr *)scale)->sep, width - 2, 2);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3507 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3508
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3509 void gtk_imhtml_hr_add_to(GtkIMHtmlScalable *scale, GtkIMHtml *imhtml, GtkTextIter *iter)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3510 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3511 GtkIMHtmlHr *hr = (GtkIMHtmlHr *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3512 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3513 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_htmltext", "<hr>");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3514 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "\n---\n");
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3515 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), hr->sep, anchor);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3516 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3517
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3518 void gtk_imhtml_hr_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3519 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3520 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3521 }
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3522
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3523 gboolean gtk_imhtml_search_find(GtkIMHtml *imhtml, const gchar *text)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3524 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3525 GtkTextIter iter, start, end;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3526 gboolean new_search = TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3527
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3528 g_return_val_if_fail(imhtml != NULL, FALSE);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3529 g_return_val_if_fail(text != NULL, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3530
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3531 if (imhtml->search_string && !strcmp(text, imhtml->search_string))
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3532 new_search = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3533
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3534 if (new_search) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3535 gtk_imhtml_search_clear(imhtml);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3536 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3537 } else {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3538 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3539 gtk_text_buffer_get_mark(imhtml->text_buffer, "search"));
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3540 }
10574
5abb2931b6ff [gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10537
diff changeset
3541 g_free(imhtml->search_string);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3542 imhtml->search_string = g_strdup(text);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3543
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
3544 if (gtk_source_iter_forward_search(&iter, imhtml->search_string,
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3545 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3546 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3547 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3548 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3549 gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &end, FALSE);
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3550 if (new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3551 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3552 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "search", &iter, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3553 do
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3554 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "search", &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3555 while (gtk_source_iter_forward_search(&end, imhtml->search_string,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3556 GTK_SOURCE_SEARCH_VISIBLE_ONLY |
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
3557 GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3558 &start, &end, NULL));
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3559 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3560 return TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3561 }
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3562 else if (!new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3563 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3564 /* We hit the end, so start at the beginning again. */
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3565 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3566
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3567 if (gtk_source_iter_forward_search(&iter, imhtml->search_string,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3568 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3569 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3570 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3571 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0);
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3572 gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &end, FALSE);
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3573
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3574 return TRUE;
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3575 }
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3576
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3577 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3578
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3579 return FALSE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3580 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3581
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3582 void gtk_imhtml_search_clear(GtkIMHtml *imhtml)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3583 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3584 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3585
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3586 g_return_if_fail(imhtml != NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3587
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3588 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3589 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3590
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3591 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "search", &start, &end);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3592 g_free(imhtml->search_string);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3593 imhtml->search_string = NULL;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3594 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3595
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3596 static GtkTextTag *find_font_forecolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3597 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3598 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3599 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3600
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3601 g_snprintf(str, sizeof(str), "FORECOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3602
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3603 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3604 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3605 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3606 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3607 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3608 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3609 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3610 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3611 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3612 gdk_color_parse("black", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3613 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3614 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground-gdk", &gcolor, NULL);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3615 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3616
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3617 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3618 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3619
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3620 static GtkTextTag *find_font_backcolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3621 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3622 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3623 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3624
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3625 g_snprintf(str, sizeof(str), "BACKCOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3626
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3627 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3628 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3629 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3630 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3631 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3632 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3633 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3634 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3635 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3636 gdk_color_parse("white", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3637 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3638 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "background-gdk", &gcolor, NULL);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3639 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3640
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3641 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3642 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3643
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3644 static GtkTextTag *find_font_background_tag(GtkIMHtml *imhtml, gchar *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3645 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3646 gchar str[19];
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3647 GtkTextTag *tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3648
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3649 g_snprintf(str, sizeof(str), "BACKGROUND %s", color);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3650
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3651 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3652 if (!tag)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3653 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3654
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3655 return tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3656 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3657
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3658 static GtkTextTag *find_font_face_tag(GtkIMHtml *imhtml, gchar *face)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3659 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3660 gchar str[256];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3661 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3662
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3663 g_snprintf(str, sizeof(str), "FONT FACE %s", face);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3664 str[255] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3665
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3666 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3667 if (!tag)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3668 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "family", face, NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3669
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3670 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3671 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3672
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3673 static GtkTextTag *find_font_size_tag(GtkIMHtml *imhtml, int size)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3674 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3675 gchar str[24];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3676 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3678 g_snprintf(str, sizeof(str), "FONT SIZE %d", size);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3679 str[23] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3680
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3681 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3682 if (!tag) {
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3683 /* For reasons I don't understand, setting "scale" here scaled
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3684 * based on some default size other than my theme's default
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3685 * size. Our size 4 was actually smaller than our size 3 for
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3686 * me. So this works around that oddity.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3687 */
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3688 GtkTextAttributes *attr = gtk_text_view_get_default_attributes(GTK_TEXT_VIEW(imhtml));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3689 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "size",
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3690 (gint) (pango_font_description_get_size(attr->font) *
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
3691 (double) POINT_SIZE(size)), NULL);
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3692 gtk_text_attributes_unref(attr);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3693 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3694
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3695 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3696 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3697
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3698 static void remove_tag_by_prefix(GtkIMHtml *imhtml, const GtkTextIter *i, const GtkTextIter *e,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3699 const char *prefix, guint len, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3700 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3701 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3702 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3703
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3704 tags = gtk_text_iter_get_tags(i);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3705
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3706 for (l = tags; l; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3707 GtkTextTag *tag = l->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3708
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3709 if (tag->name && !strncmp(tag->name, prefix, len))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3710 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, i, e);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3711 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3712
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3713 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3714
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3715 if (homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3716 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3717
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3718 iter = *i;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3719
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3720 while (gtk_text_iter_forward_char(&iter) && !gtk_text_iter_equal(&iter, e)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3721 if (gtk_text_iter_begins_tag(&iter, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3722 tags = gtk_text_iter_get_toggled_tags(&iter, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3723
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3724 for (l = tags; l; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3725 GtkTextTag *tag = l->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3726
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3727 if (tag->name && !strncmp(tag->name, prefix, len))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3728 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, &iter, e);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3729 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3730
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3731 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3732 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3733 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3734 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3735
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3736 static void remove_font_size(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3737 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3738 remove_tag_by_prefix(imhtml, i, e, "FONT SIZE ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3739 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3740
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3741 static void remove_font_face(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3742 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3743 remove_tag_by_prefix(imhtml, i, e, "FONT FACE ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3744 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3745
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3746 static void remove_font_forecolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3747 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3748 remove_tag_by_prefix(imhtml, i, e, "FORECOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3749 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3750
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3751 static void remove_font_backcolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3752 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3753 remove_tag_by_prefix(imhtml, i, e, "BACKCOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3754 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3755
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3756 static void remove_font_background(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3757 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3758 remove_tag_by_prefix(imhtml, i, e, "BACKGROUND ", 10, homo);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3759 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3760
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3761 static void remove_font_link(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3762 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3763 remove_tag_by_prefix(imhtml, i, e, "LINK ", 5, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3764 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3765
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3766 static void
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3767 imhtml_clear_formatting(GtkIMHtml *imhtml)
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3768 {
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3769 GtkTextIter start, end;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3770
12796
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3771 if (!imhtml->editable)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3772 return;
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3773
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3774 if (imhtml->wbfo)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3775 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3776 else
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3777 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3778 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3779
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3780 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3781 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3782 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3783 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3784 remove_font_size(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3785 remove_font_face(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3786 remove_font_forecolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3787 remove_font_backcolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3788 remove_font_background(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3789 remove_font_link(imhtml, &start, &end, FALSE);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3790
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3791 imhtml->edit.bold = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3792 imhtml->edit.italic = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3793 imhtml->edit.underline = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3794 imhtml->edit.strike = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3795 imhtml->edit.fontsize = 0;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3796
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3797 g_free(imhtml->edit.fontface);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3798 imhtml->edit.fontface = NULL;
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3799
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3800 g_free(imhtml->edit.forecolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3801 imhtml->edit.forecolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3802
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3803 g_free(imhtml->edit.backcolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3804 imhtml->edit.backcolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3805
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3806 g_free(imhtml->edit.background);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3807 imhtml->edit.background = NULL;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3808 }
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3809
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3810 /* Editable stuff */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3811 static void preinsert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3812 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3813 imhtml->insert_offset = gtk_text_iter_get_offset(iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3814 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3815
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3816 static void insert_ca_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextChildAnchor *arg2, gpointer user_data)
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3817 {
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3818 GtkTextIter start;
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3819
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3820 start = *arg1;
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3821 gtk_text_iter_backward_char(&start);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3822
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3823 gtk_imhtml_apply_tags_on_insert(user_data, &start, arg1);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3824 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3825
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3826 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *end, gchar *text, gint len, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3827 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3828 GtkTextIter start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3829
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3830 if (!len)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3831 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3832
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3833 start = *end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3834 gtk_text_iter_set_offset(&start, imhtml->insert_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3835
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3836 gtk_imhtml_apply_tags_on_insert(imhtml, &start, end);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3837 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3838
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3839 static void delete_cb(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, GtkIMHtml *imhtml)
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3840 {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3841 GSList *tags, *l;
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3842
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3843 tags = gtk_text_iter_get_tags(start);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3844 for (l = tags; l != NULL; l = l->next) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3845 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3846
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3847 if (tag && /* Remove the formatting only if */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3848 gtk_text_iter_starts_word(start) && /* beginning of a word */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3849 gtk_text_iter_begins_tag(start, tag) && /* the tag starts with the selection */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3850 (!gtk_text_iter_has_tag(end, tag) || /* the tag ends within the selection */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3851 gtk_text_iter_ends_tag(end, tag))) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3852 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, start, end);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3853 if (tag->name &&
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3854 strncmp(tag->name, "LINK ", 5) == 0 && imhtml->edit.link) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3855 gtk_imhtml_toggle_link(imhtml, NULL);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3856 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3857 }
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3858 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3859 g_slist_free(tags);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3860 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3861
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3862 static void gtk_imhtml_apply_tags_on_insert(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end)
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3863 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3864 if (imhtml->edit.bold)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3865 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3866 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3867 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3868
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3869 if (imhtml->edit.italic)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3870 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3871 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3872 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3873
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3874 if (imhtml->edit.underline)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3875 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3876 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3877 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3878
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3879 if (imhtml->edit.strike)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3880 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", start, end);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3881 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3882 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", start, end);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3883
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3884 if (imhtml->edit.forecolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3885 remove_font_forecolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3886 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3887 find_font_forecolor_tag(imhtml, imhtml->edit.forecolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3888 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3889 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3890
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3891 if (imhtml->edit.backcolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3892 remove_font_backcolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3893 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3894 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3895 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3896 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3897
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3898 if (imhtml->edit.background) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3899 remove_font_background(imhtml, start, end, TRUE);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3900 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3901 find_font_background_tag(imhtml, imhtml->edit.background),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3902 start, end);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3903 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3904 if (imhtml->edit.fontface) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3905 remove_font_face(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3906 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3907 find_font_face_tag(imhtml, imhtml->edit.fontface),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3908 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3909 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3910
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3911 if (imhtml->edit.fontsize) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3912 remove_font_size(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3913 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3914 find_font_size_tag(imhtml, imhtml->edit.fontsize),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3915 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3916 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3917
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3918 if (imhtml->edit.link) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3919 remove_font_link(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3920 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3921 imhtml->edit.link,
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3922 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3923 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3924 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3925
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3926 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3927 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3928 gtk_text_view_set_editable(GTK_TEXT_VIEW(imhtml), editable);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3929 /*
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3930 * We need a visible caret for accessibility, so mouseless
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3931 * people can highlight stuff.
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3932 */
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3933 /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3934 imhtml->editable = editable;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3935 imhtml->format_functions = GTK_IMHTML_ALL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3936
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3937 if (editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3938 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set",
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3939 G_CALLBACK(mark_set_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3940 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3941
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3942 void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3943 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3944 g_return_if_fail(imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3945
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3946 imhtml->wbfo = wbfo;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3947 }
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3948
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3949 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3950 {
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3951 GObject *object = g_object_ref(G_OBJECT(imhtml));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3952 imhtml->format_functions = buttons;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3953 g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
3954 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3955 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3956
8788
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
3957 GtkIMHtmlButtons gtk_imhtml_get_format_functions(GtkIMHtml *imhtml)
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
3958 {
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
3959 return imhtml->format_functions;
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
3960 }
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
3961
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
3962 void gtk_imhtml_get_current_format(GtkIMHtml *imhtml, gboolean *bold,
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
3963 gboolean *italic, gboolean *underline)
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3964 {
12900
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3965 if (bold != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3966 (*bold) = imhtml->edit.bold;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3967 if (italic != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3968 (*italic) = imhtml->edit.italic;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3969 if (underline != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
3970 (*underline) = imhtml->edit.underline;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3971 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3972
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3973 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3974 gtk_imhtml_get_current_fontface(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3975 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3976 return g_strdup(imhtml->edit.fontface);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3977 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3978
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3979 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3980 gtk_imhtml_get_current_forecolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3981 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3982 return g_strdup(imhtml->edit.forecolor);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3983 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3984
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3985 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3986 gtk_imhtml_get_current_backcolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3987 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3988 return g_strdup(imhtml->edit.backcolor);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3989 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3990
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
3991 char *
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
3992 gtk_imhtml_get_current_background(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
3993 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3994 return g_strdup(imhtml->edit.background);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
3995 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
3996
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3997 gint
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3998 gtk_imhtml_get_current_fontsize(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
3999 {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4000 return imhtml->edit.fontsize;
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4001 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4002
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4003 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4004 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4005 return imhtml->editable;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4006 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4007
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4008 void
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4009 gtk_imhtml_clear_formatting(GtkIMHtml *imhtml)
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4010 {
11275
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4011 GObject *object;
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4012
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4013 object = g_object_ref(G_OBJECT(imhtml));
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4014 g_signal_emit(object, signals[CLEAR_FORMAT], 0);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4015
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4016 gtk_widget_grab_focus(GTK_WIDGET(imhtml));
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4017
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4018 g_object_unref(object);
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4019 }
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4020
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4021 /*
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4022 * I had this crazy idea about changing the text cursor color to reflex the foreground color
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4023 * of the text about to be entered. This is the place you'd do it, along with the place where
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4024 * we actually set a new foreground color.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4025 * I may not do this, because people will bitch about Gaim overriding their gtk theme's cursor
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4026 * colors.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4027 *
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4028 * Just in case I do do this, I asked about what to set the secondary text cursor to.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4029 *
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4030 * (12:45:27) ?? ???: secondary_cursor_color = (rgb(background) + rgb(primary_cursor_color) ) / 2
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4031 * (12:45:55) ?? ???: understand?
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4032 * (12:46:14) Tim: yeah. i didn't know there was an exact formula
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8729
diff changeset
4033 * (12:46:56) ?? ???: u might need to extract separate each color from RGB
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4034 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4035
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4036 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4037 GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4038 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4039 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4040 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4041
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4042 if (mark != gtk_text_buffer_get_insert(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4043 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4044
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4045 if (!gtk_text_buffer_get_char_count(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4046 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4047
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4048 imhtml->edit.bold = imhtml->edit.italic = imhtml->edit.underline = imhtml->edit.strike = FALSE;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4049 g_free(imhtml->edit.forecolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4050 imhtml->edit.forecolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4051
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4052 g_free(imhtml->edit.backcolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4053 imhtml->edit.backcolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4054
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4055 g_free(imhtml->edit.fontface);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4056 imhtml->edit.fontface = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4057
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4058 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4059 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4060
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4061 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4062
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4063
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4064 if (gtk_text_iter_is_end(&iter))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4065 tags = gtk_text_iter_get_toggled_tags(&iter, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4066 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4067 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4068
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4069 for (l = tags; l != NULL; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4070 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4071
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4072 if (tag->name) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4073 if (strcmp(tag->name, "BOLD") == 0)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4074 imhtml->edit.bold = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4075 else if (strcmp(tag->name, "ITALICS") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4076 imhtml->edit.italic = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4077 else if (strcmp(tag->name, "UNDERLINE") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4078 imhtml->edit.underline = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4079 else if (strcmp(tag->name, "STRIKE") == 0)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4080 imhtml->edit.strike = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4081 else if (strncmp(tag->name, "FORECOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4082 imhtml->edit.forecolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4083 else if (strncmp(tag->name, "BACKCOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4084 imhtml->edit.backcolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4085 else if (strncmp(tag->name, "FONT FACE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4086 imhtml->edit.fontface = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4087 else if (strncmp(tag->name, "FONT SIZE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4088 imhtml->edit.fontsize = strtol(&(tag->name)[10], NULL, 10);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4089 else if ((strncmp(tag->name, "LINK ", 5) == 0) && !gtk_text_iter_is_end(&iter))
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4090 imhtml->edit.link = tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4091 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4092 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4093
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4094 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4095 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4096
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4097 static void imhtml_emit_signal_for_format(GtkIMHtml *imhtml, GtkIMHtmlButtons button)
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4098 {
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4099 GObject *object;
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4100
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4101 g_return_if_fail(imhtml != NULL);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4102
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4103 object = g_object_ref(G_OBJECT(imhtml));
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4104 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4105 g_object_unref(object);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4106 }
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4107
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4108 static void imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4109 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4110 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4111
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4112 imhtml->edit.bold = !imhtml->edit.bold;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4113
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4114 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4115 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4116 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4117 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4118 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4119 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4120 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4121 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4122 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4123 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4124 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4125
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4126 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4127 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4128
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4129 void gtk_imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4130 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4131 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_BOLD);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4132 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4133
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4134 static void imhtml_toggle_italic(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4135 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4136 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4137
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4138 imhtml->edit.italic = !imhtml->edit.italic;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4139
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4140 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4141 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4142 if (imhtml->edit.italic)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4143 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4144 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4145 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4146 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4147 if (imhtml->edit.italic)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4148 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4149 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4150 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4151 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4152 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4153
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4154 void gtk_imhtml_toggle_italic(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4155 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4156 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_ITALIC);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4157 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4158
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4159 static void imhtml_toggle_underline(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4160 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4161 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4162
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4163 imhtml->edit.underline = !imhtml->edit.underline;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4164
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4165 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4166 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4167 if (imhtml->edit.underline)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4168 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4169 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4170 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4171 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4172 if (imhtml->edit.underline)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4173 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4174 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4175 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4176 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4177 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4178
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4179 void gtk_imhtml_toggle_underline(GtkIMHtml *imhtml)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4180 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4181 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_UNDERLINE);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4182 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4183
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4184 static void imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4185 {
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4186 GtkTextIter start, end;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4187
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4188 imhtml->edit.strike = !imhtml->edit.strike;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4189
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4190 if (imhtml->wbfo) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4191 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4192 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4193 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4194 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4195 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4196 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4197 if (imhtml->edit.strike)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4198 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4199 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4200 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4201 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4202 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4203
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4204 void gtk_imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4205 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4206 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_STRIKE);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4207 }
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4208
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4209 void gtk_imhtml_font_set_size(GtkIMHtml *imhtml, gint size)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4210 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4211 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4212 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4213
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4214 imhtml->edit.fontsize = size;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4215
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4216 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4217 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4218 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4219 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4220 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4221 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4222 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4223 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4224 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4225 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4226
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4227 object = g_object_ref(G_OBJECT(imhtml));
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4228 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_SHRINK | GTK_IMHTML_GROW);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4229 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4230 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4231
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4232 static void imhtml_font_shrink(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4233 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4234 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4235
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4236 if (imhtml->edit.fontsize == 1)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4237 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4238
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4239 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4240 imhtml->edit.fontsize = 2;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4241 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4242 imhtml->edit.fontsize--;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4243
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4244 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4245 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4246 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4247 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4248 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4249 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4250 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4251 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4252 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4253 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4254 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4255
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4256 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4257 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4258 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_SHRINK);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4259 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4260
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4261 static void imhtml_font_grow(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4262 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4263 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4264
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4265 if (imhtml->edit.fontsize == MAX_FONT_SIZE)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4266 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4267
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4268 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4269 imhtml->edit.fontsize = 4;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4270 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4271 imhtml->edit.fontsize++;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4272
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4273 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4274 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4275 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4276 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4277 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4278 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4279 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4280 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4281 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4282 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4283 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4284
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4285 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4286 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4287 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_GROW);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4288 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4289
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4290 static gboolean gtk_imhtml_toggle_str_tag(GtkIMHtml *imhtml, const char *value, char **edit_field,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4291 void (*remove_func)(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4292 GtkTextTag *(find_func)(GtkIMHtml *imhtml, gchar *color), GtkIMHtmlButtons button)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4293 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4294 GObject *object;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4295 GtkTextIter start;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4296 GtkTextIter end;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4297
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4298 g_free(*edit_field);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4299 *edit_field = NULL;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4300
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4301 if (value && strcmp(value, "") != 0)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4302 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4303 *edit_field = g_strdup(value);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4304
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4305 if (imhtml->wbfo)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4306 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4307 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4308 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4309 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4310 find_func(imhtml, *edit_field), &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4311 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4312 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4313 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4314 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4315 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4316 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4317 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4318 remove_func(imhtml, &start, &end, FALSE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4319 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4320 find_func(imhtml,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4321 *edit_field),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4322 &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4323 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4324 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4325 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4326 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4327 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4328 if (imhtml->wbfo)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4329 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4330 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4331 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4332 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4333 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4334 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4335 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4336 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4337 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4338 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4339
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4340 object = g_object_ref(G_OBJECT(imhtml));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4341 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4342 g_object_unref(object);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4343
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4344 return *edit_field != NULL;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4345 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4346
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4347 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4348 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4349 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.forecolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4350 remove_font_forecolor, find_font_forecolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4351 GTK_IMHTML_FORECOLOR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4352 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4353
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4354 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4355 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4356 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.backcolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4357 remove_font_backcolor, find_font_backcolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4358 GTK_IMHTML_BACKCOLOR);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4359 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4360
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4361 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4362 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4363 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.background,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4364 remove_font_background, find_font_background_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4365 GTK_IMHTML_BACKGROUND);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4366 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4367
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4368 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4369 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4370 return gtk_imhtml_toggle_str_tag(imhtml, face, &imhtml->edit.fontface,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4371 remove_font_face, find_font_face_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4372 GTK_IMHTML_FACE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4373 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4374
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4375 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4376 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4377 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4378 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4379 GtkTextTag *linktag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4380 static guint linkno = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4381 gchar str[48];
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4382 GdkColor *color = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4383
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4384 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4385
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4386 if (url) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4387 g_snprintf(str, sizeof(str), "LINK %d", linkno++);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4388 str[47] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4389
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4390 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &color, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4391 if (color) {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4392 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground-gdk", color, "underline", PANGO_UNDERLINE_SINGLE, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4393 gdk_color_free(color);
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4394 } else {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4395 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4396 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4397 g_object_set_data_full(G_OBJECT(linktag), "link_url", g_strdup(url), g_free);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4398 g_signal_connect(G_OBJECT(linktag), "event", G_CALLBACK(tag_event), NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4399
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4400 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4401 remove_font_link(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4402 gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4403 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4404 }
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4405
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4406 object = g_object_ref(G_OBJECT(imhtml));
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4407 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_LINK);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4408 g_object_unref(object);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4409 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4410
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4411 void gtk_imhtml_insert_link(GtkIMHtml *imhtml, GtkTextMark *mark, const char *url, const char *text)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4412 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4413 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4414
9599
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4415 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4416 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4417
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4418 gtk_imhtml_toggle_link(imhtml, url);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4419 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4420 gtk_text_buffer_insert(imhtml->text_buffer, &iter, text, -1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4421 gtk_imhtml_toggle_link(imhtml, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4422 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4423
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4424 void gtk_imhtml_insert_smiley(GtkIMHtml *imhtml, const char *sml, char *smiley)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4425 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4426 GtkTextMark *mark;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4427 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4428
11750
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4429 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4430 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4431
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4432 mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4433
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4434 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4435 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, smiley, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4436 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4437
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4438 static gboolean
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4439 image_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4440 {
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4441 GTK_WIDGET_CLASS(GTK_WIDGET_GET_CLASS(widget))->expose_event(widget, event);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4442
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4443 return TRUE;
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4444 }
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4445
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4446 void gtk_imhtml_insert_smiley_at_iter(GtkIMHtml *imhtml, const char *sml, char *smiley, GtkTextIter *iter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4447 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4448 GdkPixbuf *pixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4449 GdkPixbufAnimation *annipixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4450 GtkWidget *icon = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4451 GtkTextChildAnchor *anchor;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
4452 char *unescaped = gaim_unescape_html(smiley);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4453 GtkIMHtmlSmiley *imhtml_smiley = gtk_imhtml_smiley_get(imhtml, sml, unescaped);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4454
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4455 if (imhtml->format_functions & GTK_IMHTML_SMILEY) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4456 annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4457 if (annipixbuf) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4458 if (gdk_pixbuf_animation_is_static_image(annipixbuf)) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4459 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4460 if (pixbuf)
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4461 icon = gtk_image_new_from_pixbuf(pixbuf);
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4462 } else {
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4463 icon = gtk_image_new_from_animation(annipixbuf);
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4464 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4465 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4466 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4467
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4468 if (icon) {
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4469 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4470 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4471 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4472
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4473 /* This catches the expose events generated by animated
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4474 * images, and ensures that they are handled by the image
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4475 * itself, without propagating to the textview and causing
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4476 * a complete refresh */
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4477 g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4478
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4479 gtk_widget_show(icon);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4480 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4481 } else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) {
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4482 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4483 imhtml_smiley->anchors = g_slist_append(imhtml_smiley->anchors, anchor);
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4484 } else {
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4485 gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4486 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4487
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4488 g_free(unescaped);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4489 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4490
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4491 void gtk_imhtml_insert_image_at_iter(GtkIMHtml *imhtml, int id, GtkTextIter *iter)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4492 {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4493 GdkPixbuf *pixbuf = NULL;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4494 const char *filename = NULL;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4495 gpointer image;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4496 GdkRectangle rect;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4497 GtkIMHtmlScalable *scalable = NULL;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4498 struct scalable_data *sd;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4499 int minus;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4500
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4501 if (!imhtml->funcs || !imhtml->funcs->image_get ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4502 !imhtml->funcs->image_get_size || !imhtml->funcs->image_get_data ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4503 !imhtml->funcs->image_get_filename || !imhtml->funcs->image_ref ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4504 !imhtml->funcs->image_unref)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4505 return;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4506
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4507 image = imhtml->funcs->image_get(id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4508
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4509 if (image) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4510 gpointer data;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4511 size_t len;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4512
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4513 data = imhtml->funcs->image_get_data(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4514 len = imhtml->funcs->image_get_size(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4515
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4516 if (data && len) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4517 GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4518 gdk_pixbuf_loader_write(loader, data, len, NULL);
12230
2f327bccf63b [gaim-migrate @ 14532]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12229
diff changeset
4519 gdk_pixbuf_loader_close(loader, NULL);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4520 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
9337
4bd369a6e4dc [gaim-migrate @ 10145]
Tim Ringenbach <marv@pidgin.im>
parents: 9335
diff changeset
4521 if (pixbuf)
4bd369a6e4dc [gaim-migrate @ 10145]
Tim Ringenbach <marv@pidgin.im>
parents: 9335
diff changeset
4522 g_object_ref(G_OBJECT(pixbuf));
4bd369a6e4dc [gaim-migrate @ 10145]
Tim Ringenbach <marv@pidgin.im>
parents: 9335
diff changeset
4523 g_object_unref(G_OBJECT(loader));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4524 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4525
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4526 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4527
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4528 if (pixbuf) {
11299
06bb44ed0cf3 [gaim-migrate @ 13499]
Richard Laager <rlaager@pidgin.im>
parents: 11276
diff changeset
4529 struct im_image_data *t = g_new(struct im_image_data, 1);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4530 filename = imhtml->funcs->image_get_filename(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4531 imhtml->funcs->image_ref(id);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4532 t->id = id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4533 t->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4534 imhtml->im_images = g_slist_prepend(imhtml->im_images, t);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4535 } else {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4536 pixbuf = gtk_widget_render_icon(GTK_WIDGET(imhtml), GTK_STOCK_MISSING_IMAGE,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4537 GTK_ICON_SIZE_BUTTON, "gtkimhtml-missing-image");
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4538 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4539
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4540 sd = g_new(struct scalable_data, 1);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4541 sd->scalable = scalable = gtk_imhtml_image_new(pixbuf, filename, id);
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
4542 sd->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4543 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4544 scalable->add_to(scalable, imhtml, iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4545 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4546 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4547 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4548 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4549
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4550 g_object_unref(G_OBJECT(pixbuf));
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4551 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4552
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4553 static const gchar *tag_to_html_start(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4554 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4555 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4556 static gchar buf[1024];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4557
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4558 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4559 g_return_val_if_fail(name != NULL, "");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4560
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4561 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4562 return "<b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4563 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4564 return "<i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4565 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4566 return "<u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4567 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4568 return "<s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4569 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4570 char *tmp = g_object_get_data(G_OBJECT(tag), "link_url");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4571 if (tmp) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4572 g_snprintf(buf, sizeof(buf), "<a href=\"%s\">", tmp);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4573 buf[sizeof(buf)-1] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4574 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4575 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4576 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4577 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4578 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4579 g_snprintf(buf, sizeof(buf), "<font color=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4580 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4581 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4582 g_snprintf(buf, sizeof(buf), "<font back=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4583 return buf;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4584 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4585 g_snprintf(buf, sizeof(buf), "<body bgcolor=\"%s\">", &name[11]);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4586 return buf;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4587 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4588 g_snprintf(buf, sizeof(buf), "<font face=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4589 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4590 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4591 g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4592 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4593 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4594 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4595 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4596 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4597
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4598 static const gchar *tag_to_html_end(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4599 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4600 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4601
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4602 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4603 g_return_val_if_fail(name != NULL, "");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4604
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4605 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4606 return "</b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4607 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4608 return "</i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4609 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4610 return "</u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4611 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4612 return "</s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4613 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4614 return "</a>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4615 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4616 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4617 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4618 return "</font>";
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4619 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4620 return "</body>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4621 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4622 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4623 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4624 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4625 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4626 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4627 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4628 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4629
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4630 static gboolean tag_ends_here(GtkTextTag *tag, GtkTextIter *iter, GtkTextIter *niter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4631 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4632 return ((gtk_text_iter_has_tag(iter, GTK_TEXT_TAG(tag)) &&
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4633 !gtk_text_iter_has_tag(niter, GTK_TEXT_TAG(tag))) ||
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4634 gtk_text_iter_is_end(niter));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4635 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4636
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4637 /* Basic notion here: traverse through the text buffer one-by-one, non-character elements, such
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4638 * as smileys and IM images are represented by the Unicode "unknown" character. Handle them. Else
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4639 * check for tags that are toggled on, insert their html form, and push them on the queue. Then insert
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4640 * the actual text. Then check for tags that are toggled off and insert them, after checking the queue.
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8729
diff changeset
4641 * Finally, replace <, >, &, and " with their HTML equivalent.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4642 */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4643 char *gtk_imhtml_get_markup_range(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4644 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4645 gunichar c;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4646 GtkTextIter iter, nextiter;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4647 GString *str = g_string_new("");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4648 GSList *tags, *sl;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4649 GQueue *q, *r;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4650 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4651
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4652 q = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4653 r = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4654
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4655
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4656 gtk_text_iter_order(start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4657 nextiter = iter = *start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4658 gtk_text_iter_forward_char(&nextiter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4659
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4660 /* First add the tags that are already in progress (we don't care about non-printing tags)*/
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4661 tags = gtk_text_iter_get_tags(start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4662
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4663 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4664 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4665 if (!gtk_text_iter_toggles_tag(start, GTK_TEXT_TAG(tag))) {
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4666 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4667 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4668 g_queue_push_tail(q, tag);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4669 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4670 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4671 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4672
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4673 while ((c = gtk_text_iter_get_char(&iter)) != 0 && !gtk_text_iter_equal(&iter, end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4674
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4675 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4676
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4677 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4678 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4679 if (gtk_text_iter_begins_tag(&iter, GTK_TEXT_TAG(tag))) {
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4680 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4681 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4682 g_queue_push_tail(q, tag);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4683 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4684 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4685
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4686
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4687 if (c == 0xFFFC) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4688 GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(&iter);
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4689 if (anchor) {
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4690 char *text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_htmltext");
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4691 if (text)
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4692 str = g_string_append(str, text);
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4693 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4694 } else if (c == '<') {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4695 str = g_string_append(str, "&lt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4696 } else if (c == '>') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4697 str = g_string_append(str, "&gt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4698 } else if (c == '&') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4699 str = g_string_append(str, "&amp;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4700 } else if (c == '"') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4701 str = g_string_append(str, "&quot;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4702 } else if (c == '\n') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4703 str = g_string_append(str, "<br>");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4704 } else {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4705 str = g_string_append_unichar(str, c);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4706 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4707
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4708 tags = g_slist_reverse(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4709 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4710 tag = sl->data;
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4711 /** don't worry about non-printing tags ending */
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4712 if (tag_ends_here(tag, &iter, &nextiter) && strlen(tag_to_html_end(tag)) > 0) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4713
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4714 GtkTextTag *tmp;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4715
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4716 while ((tmp = g_queue_pop_tail(q)) != tag) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4717 if (tmp == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4718 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4719
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4720 if (!tag_ends_here(tmp, &iter, &nextiter) && strlen(tag_to_html_end(tmp)) > 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4721 g_queue_push_tail(r, tmp);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4722 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tmp)));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4723 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4724
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4725 if (tmp == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4726 gaim_debug_warning("gtkimhtml", "empty queue, more closing tags than open tags!\n");
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4727 else
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4728 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tag)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4729
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4730 while ((tmp = g_queue_pop_head(r))) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4731 g_string_append(str, tag_to_html_start(GTK_TEXT_TAG(tmp)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4732 g_queue_push_tail(q, tmp);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4733 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4734 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4735 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4736
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4737 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4738 gtk_text_iter_forward_char(&iter);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4739 gtk_text_iter_forward_char(&nextiter);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4740 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4741
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4742 while ((tag = g_queue_pop_tail(q)))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4743 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tag)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4744
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4745 g_queue_free(q);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4746 g_queue_free(r);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4747 return g_string_free(str, FALSE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4748 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4749
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
4750 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4751 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4752 if (imhtml->edit.bold)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4753 gtk_imhtml_toggle_bold(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4754
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4755 if (imhtml->edit.italic)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4756 gtk_imhtml_toggle_italic(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4757
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4758 if (imhtml->edit.underline)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4759 gtk_imhtml_toggle_underline(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4760
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4761 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4762 gtk_imhtml_toggle_strike(imhtml);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4763
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4764 if (imhtml->edit.forecolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4765 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4766
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4767 if (imhtml->edit.backcolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4768 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4769
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4770 if (imhtml->edit.fontface)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4771 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4772
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4773 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4774
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4775 if (imhtml->edit.link)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4776 gtk_imhtml_toggle_link(imhtml, NULL);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4777
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
4778 gtk_text_buffer_remove_all_tags(imhtml->text_buffer, iter, iter);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4779
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4780 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4781
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4782 char *gtk_imhtml_get_markup(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4783 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4784 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4785
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4786 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4787 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4788 return gtk_imhtml_get_markup_range(imhtml, &start, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4789 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4790
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4791 char **gtk_imhtml_get_markup_lines(GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4792 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4793 int i, j, lines;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4794 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4795 char **ret;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4796
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4797 lines = gtk_text_buffer_get_line_count(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4798 ret = g_new0(char *, lines + 1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4799 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4800 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4801 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4802
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4803 for (i = 0, j = 0; i < lines; i++) {
9612
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4804 if (gtk_text_iter_get_char(&start) != '\n') {
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4805 ret[j] = gtk_imhtml_get_markup_range(imhtml, &start, &end);
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4806 if (ret[j] != NULL)
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4807 j++;
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4808 }
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4809
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4810 gtk_text_iter_forward_line(&start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4811 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4812 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4813 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4814
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4815 return ret;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4816 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4817
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4818 char *gtk_imhtml_get_text(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *stop)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4819 {
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4820 GString *str = g_string_new("");
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4821 GtkTextIter iter, end;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4822 gunichar c;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4823
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4824 if (start == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4825 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4826 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4827 iter = *start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4828
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4829 if (stop == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4830 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4831 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4832 end = *stop;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4833
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4834 gtk_text_iter_order(&iter, &end);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4835
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4836 while ((c = gtk_text_iter_get_char(&iter)) != 0 && !gtk_text_iter_equal(&iter, &end)) {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4837 if (c == 0xFFFC) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4838 GtkTextChildAnchor* anchor;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4839 char *text = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4840
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4841 anchor = gtk_text_iter_get_child_anchor(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4842 if (anchor)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
4843 text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_plaintext");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4844 if (text)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4845 str = g_string_append(str, text);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4846 } else {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4847 g_string_append_unichar(str, c);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4848 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4849 gtk_text_iter_forward_char(&iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4850 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4851
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4852 return g_string_free(str, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4853 }
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4854
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4855 void gtk_imhtml_set_funcs(GtkIMHtml *imhtml, GtkIMHtmlFuncs *f)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4856 {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4857 g_return_if_fail(imhtml != NULL);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4858 imhtml->funcs = f;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4859 }

mercurial