src/gtkimhtml.c

Tue, 13 Apr 2004 04:08:22 +0000

author
Felipe Contreras <felipe.contreras@gmail.com>
date
Tue, 13 Apr 2004 04:08:22 +0000
changeset 8646
74d0e7406e3b
parent 8588
6bcf7ed80ed8
child 8654
91d33a83fb05
permissions
-rw-r--r--

[gaim-migrate @ 9398]
Added a patch by shx to clean up the message-handling code and split the
command stuff from it, among a few other things. Also, I fixed a crash in
message parsing, which I think may close a couple bug reports.

committer: Christian Hammond <chipx86@chipx86.com>

1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * GtkIMHtml
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
4 * 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
5 * 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
6 * source distribution.
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * (at your option) any later version.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * GNU General Public License for more details.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 */
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
24 #ifdef HAVE_CONFIG_H
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
25 #include <config.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
26 #endif
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
27 #include "debug.h"
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
28 #include "util.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #include "gtkimhtml.h"
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
30 #include "gtksourceiter.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #include <gtk/gtk.h>
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
32 #include <glib/gerror.h>
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
33 #include <gdk/gdkkeysyms.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 #include <string.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 #include <ctype.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #include <stdio.h>
4629
7ac4830de853 [gaim-migrate @ 4920]
Mark Doliner <markdoliner@pidgin.im>
parents: 4612
diff changeset
37 #include <stdlib.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #include <math.h>
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
39 #ifdef HAVE_LANGINFO_CODESET
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
40 #include <langinfo.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
41 #include <locale.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
42 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
44 #ifdef ENABLE_NLS
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
45 # include <libintl.h>
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
46 # define _(x) gettext(x)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
47 # ifdef gettext_noop
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
48 # define N_(String) gettext_noop (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
49 # else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
50 # define N_(String) (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
51 # endif
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
52 #else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
53 # define N_(String) (String)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
54 # define _(x) (x)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
55 #endif
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
56
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
57 #include <pango/pango-font.h>
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
58
5105
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
59 /* GTK+ < 2.2.2 hack, see ui.h for details. */
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
60 #ifndef GTK_WRAP_WORD_CHAR
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
61 #define GTK_WRAP_WORD_CHAR GTK_WRAP_WORD
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
62 #endif
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
63
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
64 #define TOOLTIP_TIMEOUT 500
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
65
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
66 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
67 static gboolean gtk_imhtml_is_amp_escape (const gchar *string, gchar **replace, gint *length);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
68 void gtk_imhtml_close_tags(GtkIMHtml *imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
69 static void gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
70
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
71 /* POINT_SIZE converts from AIM font sizes to point sizes. It probably should be redone in such a
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
72 * way that it base the sizes off the default font size rather than using arbitrary font sizes. */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
73 #define MAX_FONT_SIZE 7
5367
a2f9e6418413 [gaim-migrate @ 5743]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5293
diff changeset
74 #define POINT_SIZE(x) (options & GTK_IMHTML_USE_POINTSIZE ? x : _point_sizes [MIN ((x), MAX_FONT_SIZE) - 1])
8380
152ca3f3a3f6 [gaim-migrate @ 9108]
Sean Egan <seanegan@pidgin.im>
parents: 8367
diff changeset
75 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
76
8498
f6267a9764e5 [gaim-migrate @ 9234]
Sean Egan <seanegan@pidgin.im>
parents: 8497
diff changeset
77 enum {
f6267a9764e5 [gaim-migrate @ 9234]
Sean Egan <seanegan@pidgin.im>
parents: 8497
diff changeset
78 TARGET_HTML,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
79 TARGET_UTF8_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
80 TARGET_COMPOUND_TEXT,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
81 TARGET_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
82 TARGET_TEXT
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
83 };
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
84
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
85 enum {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
86 DRAG_URL
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
87 };
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
88
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
89 enum {
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
90 URL_CLICKED,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
91 BUTTONS_UPDATE,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
92 TOGGLE_FORMAT,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
93 CLEAR_FORMAT,
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
94 UPDATE_FORMAT,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
95 LAST_SIGNAL
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
96 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
97 static guint signals [LAST_SIGNAL] = { 0 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
98
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
99 GtkTargetEntry selection_targets[] = {
8566
d174105077ff [gaim-migrate @ 9313]
Sean Egan <seanegan@pidgin.im>
parents: 8548
diff changeset
100 { "text/html", 0, TARGET_HTML },
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
101 { "UTF8_STRING", 0, TARGET_UTF8_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
102 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
103 { "STRING", 0, TARGET_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
104 { "TEXT", 0, TARGET_TEXT}};
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
105
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
106 GtkTargetEntry link_drag_drop_targets[] = {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
107 {"x-url/ftp", 0, DRAG_URL},
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
108 {"x-url/http", 0, DRAG_URL},
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
109 {"text/uri-list", 0, DRAG_URL},
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
110 {"_NETSCAPE_URL", 0, DRAG_URL}};
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
111
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
112 static GtkSmileyTree*
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
113 gtk_smiley_tree_new ()
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
114 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
115 return g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
116 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
117
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
118 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
119 gtk_smiley_tree_insert (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
120 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
121 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
122 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
123 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
124
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
125 if (!strlen (x))
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
126 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
127
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
128 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
129 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
130 gint index;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
131
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
132 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
133 t->values = g_string_new ("");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
134
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
135 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
136 if (!pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
137 t->values = g_string_append_c (t->values, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
138 index = t->values->len - 1;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
139 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
140 t->children [index] = g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
141 } else
7386
9cccb3792018 [gaim-migrate @ 7981]
Luke Schierer <lschiere@pidgin.im>
parents: 7384
diff changeset
142 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
143
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
144 t = t->children [index];
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
145
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
146 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
147 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
148
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
149 t->image = smiley;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
150 }
4041
6336d3d3785e [gaim-migrate @ 4249]
Sean Egan <seanegan@pidgin.im>
parents: 4032
diff changeset
151
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
152
4264
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
153 void gtk_smiley_tree_destroy (GtkSmileyTree *tree)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
154 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
155 GSList *list = g_slist_append (NULL, tree);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
156
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
157 while (list) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
158 GtkSmileyTree *t = list->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
159 gint i;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
160 list = g_slist_remove(list, t);
7384
c2ed41f62aae [gaim-migrate @ 7979]
Nathan Walp <nwalp@pidgin.im>
parents: 7371
diff changeset
161 if (t && t->values) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
162 for (i = 0; i < t->values->len; i++)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
163 list = g_slist_append (list, t->children [i]);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
164 g_string_free (t->values, TRUE);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
165 g_free (t->children);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
166 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
167 g_free (t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
168 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
169 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
170
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
171 static gboolean gtk_size_allocate_cb(GtkIMHtml *widget, GtkAllocation *alloc, gpointer user_data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
172 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
173 GdkRectangle rect;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
174
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
175 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &rect);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
176 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
177 GList *iter = GTK_IMHTML(widget)->scalables;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
178
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
179 while(iter){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
180 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(iter->data);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
181 scale->scale(scale, rect.width, rect.height);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
182
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
183 iter = iter->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
184 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
185 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
186
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
187 widget->old_rect = rect;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
188 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
189 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
190
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
191 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
192 gtk_imhtml_tip_paint (GtkIMHtml *imhtml)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
193 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
194 PangoLayout *layout;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
195
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
196 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
197
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
198 layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
199
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
200 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
201 GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, imhtml->tip_window,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
202 "tooltip", 0, 0, -1, -1);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
203
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
204 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
205 FALSE, NULL, imhtml->tip_window, NULL, 4, 4, layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
206
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
207 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
208 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
209 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
210
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
211 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
212 gtk_imhtml_tip (gpointer data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
213 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
214 GtkIMHtml *imhtml = data;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
215 PangoFontMetrics *font_metrics;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
216 PangoLayout *layout;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
217 PangoFont *font;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
218
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
219 gint gap, x, y, h, w, scr_w, baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
220
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
221 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
222
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
223 if (!imhtml->tip || !GTK_WIDGET_DRAWABLE (GTK_WIDGET(imhtml))) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
224 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
225 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
226 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
227
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
228 if (imhtml->tip_window){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
229 gtk_widget_destroy (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
230 imhtml->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
231 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
232
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
233 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
234 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
235 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
236 gtk_window_set_resizable (GTK_WINDOW (imhtml->tip_window), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
237 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
238 g_signal_connect_swapped (G_OBJECT (imhtml->tip_window), "expose_event",
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
239 G_CALLBACK (gtk_imhtml_tip_paint), imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
240
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
241 gtk_widget_ensure_style (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
242 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
243 font = pango_context_load_font(pango_layout_get_context(layout),
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
244 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
245
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
246 if (font == NULL) {
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
247 char *tmp = pango_font_description_to_string(
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
248 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
249
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
250 gaim_debug(GAIM_DEBUG_ERROR, "gtk_imhtml_tip",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
251 "pango_context_load_font() couldn't load font: '%s'\n",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
252 tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
253 g_free(tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
254
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
255 return FALSE;
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
256
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
257 }
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
258
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
259 font_metrics = pango_font_get_metrics(font, NULL);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
260
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
261
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
262 pango_layout_get_pixel_size(layout, &scr_w, NULL);
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
263 gap = PANGO_PIXELS((pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
264 pango_font_metrics_get_descent(font_metrics))/ 4);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
265
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
266 if (gap < 2)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
267 gap = 2;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
268 baseline_skip = PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
269 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
270 w = 8 + scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
271 h = 8 + baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
272
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
273 gdk_window_get_pointer (NULL, &x, &y, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
274 if (GTK_WIDGET_NO_WINDOW (GTK_WIDGET(imhtml)))
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
275 y += GTK_WIDGET(imhtml)->allocation.y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
276
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
277 scr_w = gdk_screen_width();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
278
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
279 x -= ((w >> 1) + 4);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
280
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
281 if ((x + w) > scr_w)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
282 x -= (x + w) - scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
283 else if (x < 0)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
284 x = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
285
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
286 y = y + PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
287 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
288
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
289 gtk_widget_set_size_request (imhtml->tip_window, w, h);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
290 gtk_widget_show (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
291 gtk_window_move (GTK_WINDOW(imhtml->tip_window), x, y);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
292
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
293 pango_font_metrics_unref(font_metrics);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
294 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
295
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
296 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
297 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
298
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
299 gboolean gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
300 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
301 GtkTextIter iter;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
302 GdkWindow *win = event->window;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
303 int x, y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
304 char *tip = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
305 GSList *tags = NULL, *templist = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
306 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
307 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
308 event->x, event->y, &x, &y);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
309 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
310 tags = gtk_text_iter_get_tags(&iter);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
311
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
312 templist = tags;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
313 while (templist) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
314 GtkTextTag *tag = templist->data;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
315 tip = g_object_get_data(G_OBJECT(tag), "link_url");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
316 if (tip)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
317 break;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
318 templist = templist->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
319 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
320
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
321 if (GTK_IMHTML(imhtml)->tip) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
322 if ((tip == GTK_IMHTML(imhtml)->tip)) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
323 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
324 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
325 /* 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
326 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
327 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
328 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
329 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
330 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
331 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
332 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
333 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
334 if (GTK_IMHTML(imhtml)->tip_timer)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
335 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
336 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
337 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
338
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
339 if(tip){
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
340 if (!GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
341 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
342 GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
343 gtk_imhtml_tip, imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
344 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
345
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
346 GTK_IMHTML(imhtml)->tip = tip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
347 g_slist_free(tags);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
348 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
349 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
350
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
351 gboolean gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
352 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
353 /* when leaving the widget, clear any current & pending tooltips and restore the cursor */
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
354 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
355 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
356 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
357 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
358 if (GTK_IMHTML(imhtml)->tip_timer) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
359 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
360 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
361 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
362 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
363 gdk_window_set_cursor(event->window, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
364 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
365 gdk_window_set_cursor(event->window, GTK_IMHTML(imhtml)->arrow_cursor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
366
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
367 /* propagate the event normally */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
368 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
369 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
370
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
371 /*
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
372 * XXX - This should be removed eventually.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
373 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
374 * This function exists to work around a gross bug in GtkTextView.
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
375 * 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
376 * el program go boom.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
377 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
378 * 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
379 * http://bugzilla.gnome.org/show_bug.cgi?id=107939
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
380 */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
381
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
382 /*
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
383 * I'm adding some keyboard shortcuts too.
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
384 */
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
385
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
386 gboolean gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
387 {
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
388 char buf[7];
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
389 buf[0] = '\0';
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
390
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
391 if (event->state & GDK_CONTROL_MASK)
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
392 switch (event->keyval) {
8539
c0facb56e3f1 [gaim-migrate @ 9280]
Etan Reisner <deryni@pidgin.im>
parents: 8526
diff changeset
393 #if (!GTK_CHECK_VERSION(2,2,0))
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
394 case 'a':
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
395 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
396 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
397
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
398 case GDK_Home:
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
399 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
400 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
401
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
402 case GDK_End:
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
403 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
404 break;
8539
c0facb56e3f1 [gaim-migrate @ 9280]
Etan Reisner <deryni@pidgin.im>
parents: 8526
diff changeset
405 #endif /* Gtk+ >= 2.2.0 */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
406
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
407 case 'b': /* ctrl-b is GDK_Left, which moves backwards. */
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
408 case 'B':
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
409 if (imhtml->format_functions & GTK_IMHTML_BOLD) {
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
410 if(imhtml->html_shortcuts) {
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
411 gtk_imhtml_toggle_bold(imhtml);
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
412 return TRUE;
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
413 }
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
414 }
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
415 return FALSE;
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
416 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
417
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
418 case 'f':
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
419 case 'F':
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
420 /*set_toggle(gtkconv->toolbar.font,
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
421 !gtk_toggle_button_get_active(
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
422 GTK_TOGGLE_BUTTON(gtkconv->toolbar.font)));*/
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
423
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
424 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
425 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
426
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
427 case 'i':
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
428 case 'I':
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
429 if (imhtml->format_functions & GTK_IMHTML_ITALIC) {
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
430 if(imhtml->html_shortcuts) {
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
431 gtk_imhtml_toggle_italic(imhtml);
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
432 return TRUE;
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
433 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
434 }
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
435 return FALSE;
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
436 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
437
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
438 case 'u': /* ctrl-u is GDK_Clear, which clears the line. */
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
439 case 'U':
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
440 if (imhtml->format_functions & GTK_IMHTML_UNDERLINE) {
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
441 if(imhtml->html_shortcuts) {
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
442 gtk_imhtml_toggle_underline(imhtml);
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
443 return TRUE;
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
444 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
445 }
8466
98814fd0a9e3 [gaim-migrate @ 9196]
Gary Kramlich <grim@pidgin.im>
parents: 8457
diff changeset
446 return FALSE;
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
447 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
448
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
449 case '-':
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
450 if (imhtml->format_functions & GTK_IMHTML_SHRINK)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
451 gtk_imhtml_font_shrink(imhtml);
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
452 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
453 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
454
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
455 case '=':
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
456 case '+':
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
457 if (imhtml->format_functions & GTK_IMHTML_GROW)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
458 gtk_imhtml_font_grow(imhtml);
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
459 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
460 break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
461
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
462 case '1': strcpy(buf, ":-)"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
463 case '2': strcpy(buf, ":-("); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
464 case '3': strcpy(buf, ";-)"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
465 case '4': strcpy(buf, ":-P"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
466 case '5': strcpy(buf, "=-O"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
467 case '6': strcpy(buf, ":-*"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
468 case '7': strcpy(buf, ">:o"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
469 case '8': strcpy(buf, "8-)"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
470 case '!': strcpy(buf, ":-$"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
471 case '@': strcpy(buf, ":-!"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
472 case '#': strcpy(buf, ":-["); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
473 case '$': strcpy(buf, "O:-)"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
474 case '%': strcpy(buf, ":-/"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
475 case '^': strcpy(buf, ":'("); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
476 case '&': strcpy(buf, ":-X"); break;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
477 case '*': strcpy(buf, ":-D"); break;
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
478 }
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
479 if (*buf && imhtml->smiley_shortcuts) {
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
480 gtk_imhtml_insert_smiley(imhtml, imhtml->protocol_name, buf);
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
481 return TRUE;
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
482 }
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
483 return FALSE;
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
484 }
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
485
7404
18d954a0d067 [gaim-migrate @ 8000]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
486 #if GTK_CHECK_VERSION(2,2,0)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
487 static void gtk_imhtml_clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, GtkIMHtml *imhtml) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
488 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
489 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
490 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
491 char *text;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
492 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
493 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
494
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
495
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
496 if (info == TARGET_HTML) {
8149
0d3db376a7e9 [gaim-migrate @ 8860]
Mark Doliner <markdoliner@pidgin.im>
parents: 8148
diff changeset
497 int len;
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
498 char *selection;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
499 GString *str = g_string_new(NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
500 text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
501
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
502 /* 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
503 str = g_string_append_unichar(str, 0xfeff);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
504 str = g_string_append(str, text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
505 str = g_string_append_unichar(str, 0x0000);
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
506 selection = g_convert(str->str, str->len, "UCS-2", "UTF-8", NULL, &len, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
507 gtk_selection_data_set (selection_data, gdk_atom_intern("text/html", FALSE), 16, selection, len);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
508 g_string_free(str, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
509 g_free(selection);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
510 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
511 text = gtk_text_buffer_get_text(imhtml->text_buffer, &start, &end, FALSE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
512 gtk_selection_data_set_text(selection_data, text, strlen(text));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
513 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
514 g_free(text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
515 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
516
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
517 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
518 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
519 GtkTextIter insert;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
520 GtkTextIter selection_bound;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
521
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
522 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &insert,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
523 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
524 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
525 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
526
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
527 if (!gtk_text_iter_equal (&insert, &selection_bound))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
528 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
529 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
530 &insert);
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
531 }
7742
0289c206bcff [gaim-migrate @ 8387]
Sean Egan <seanegan@pidgin.im>
parents: 7740
diff changeset
532
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
533 static void copy_clipboard_cb(GtkIMHtml *imhtml, GtkClipboard *clipboard)
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
534 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
535 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
536 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
537 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
538 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
539
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
540 g_signal_stop_emission_by_name(imhtml, "copy-clipboard");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
541 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
542
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
543 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
544 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
545 char *text;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
546 guint16 c;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
547 GtkIMHtml *imhtml = data;
7809
f4f6ac8d112a [gaim-migrate @ 8456]
Nathan Walp <nwalp@pidgin.im>
parents: 7808
diff changeset
548
8123
e09c75f511c2 [gaim-migrate @ 8827]
Mark Doliner <markdoliner@pidgin.im>
parents: 8120
diff changeset
549 if (!gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml)))
8105
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
550 return;
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
551
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
552 if (selection_data->length < 0) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
553 text = gtk_clipboard_wait_for_text(clipboard);
8128
fefbfefcebe4 [gaim-migrate @ 8833]
Etan Reisner <deryni@pidgin.im>
parents: 8123
diff changeset
554
fefbfefcebe4 [gaim-migrate @ 8833]
Etan Reisner <deryni@pidgin.im>
parents: 8123
diff changeset
555 if (text == NULL)
fefbfefcebe4 [gaim-migrate @ 8833]
Etan Reisner <deryni@pidgin.im>
parents: 8123
diff changeset
556 return;
fefbfefcebe4 [gaim-migrate @ 8833]
Etan Reisner <deryni@pidgin.im>
parents: 8123
diff changeset
557
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
558 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
559 text = g_malloc((selection_data->format / 8) * selection_data->length);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
560 memcpy(text, selection_data->data, selection_data->length * (selection_data->format / 8));
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
561 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
562
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
563 memcpy (&c, text, 2);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
564 if (c == 0xfeff) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
565 /* This is UCS2 */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
566 char *utf8 = g_convert(text+2, (selection_data->length * (selection_data->format / 8)) - 2, "UTF-8", "UCS-2", NULL, NULL, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
567 g_free(text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
568 text = utf8;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
569 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
570 gtk_imhtml_close_tags(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
571 gtk_imhtml_append_text_with_images(imhtml, text, GTK_IMHTML_NO_NEWLINE, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
572 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
573
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
574
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
575 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
576 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
577
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
578 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
579 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
580 paste_received_cb, imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
581 g_signal_stop_emission_by_name(imhtml, "paste-clipboard");
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
582 }
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
583
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
584 static gboolean button_release_cb(GtkIMHtml *imhtml, GdkEventButton event, gpointer the_foibles_of_man)
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
585 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
586 GtkClipboard *clipboard;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
587 if (event.button == 1) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
588 if ((clipboard = gtk_widget_get_clipboard (GTK_WIDGET (imhtml),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
589 GDK_SELECTION_PRIMARY)))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
590 gtk_text_buffer_remove_selection_clipboard (imhtml->text_buffer, clipboard);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
591 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
592 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
593 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
594 (GtkClipboardClearFunc)gtk_imhtml_primary_clipboard_clear, G_OBJECT(imhtml));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
595 }
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
596 return FALSE;
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
597 }
7404
18d954a0d067 [gaim-migrate @ 8000]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
598 #endif
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
599
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
600
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
601 static GtkTextViewClass *parent_class = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
602
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
603 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
604 gtk_imhtml_finalize (GObject *object)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
605 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
606 GtkIMHtml *imhtml = GTK_IMHTML(object);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
607 GList *scalables;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
608
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
609 g_hash_table_destroy(imhtml->smiley_data);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
610 gtk_smiley_tree_destroy(imhtml->default_smilies);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
611 gdk_cursor_unref(imhtml->hand_cursor);
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
612 gdk_cursor_unref(imhtml->arrow_cursor);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
613 gdk_cursor_unref(imhtml->text_cursor);
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
614
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
615 if(imhtml->tip_window){
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
616 gtk_widget_destroy(imhtml->tip_window);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
617 }
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
618 if(imhtml->tip_timer)
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
619 gtk_timeout_remove(imhtml->tip_timer);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
620
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
621 for(scalables = imhtml->scalables; scalables; scalables = scalables->next) {
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
622 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(scalables->data);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
623 scale->free(scale);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
624 }
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
625
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
626 g_list_free(imhtml->scalables);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
627 G_OBJECT_CLASS(parent_class)->finalize (object);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
628 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
629
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
630 /* Boring GTK stuff */
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
631 static void gtk_imhtml_class_init (GtkIMHtmlClass *klass)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
632 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
633 GtkObjectClass *object_class;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
634 GObjectClass *gobject_class;
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
635 object_class = (GtkObjectClass*) klass;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
636 gobject_class = (GObjectClass*) klass;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
637 parent_class = gtk_type_class(GTK_TYPE_TEXT_VIEW);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
638 signals[URL_CLICKED] = g_signal_new("url_clicked",
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
639 G_TYPE_FROM_CLASS(gobject_class),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
640 G_SIGNAL_RUN_FIRST,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
641 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
642 NULL,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
643 0,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
644 g_cclosure_marshal_VOID__POINTER,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
645 G_TYPE_NONE, 1,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
646 G_TYPE_POINTER);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
647 signals[BUTTONS_UPDATE] = g_signal_new("format_buttons_update",
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
648 G_TYPE_FROM_CLASS(gobject_class),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
649 G_SIGNAL_RUN_FIRST,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
650 G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
651 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
652 0,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
653 g_cclosure_marshal_VOID__POINTER,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
654 G_TYPE_NONE, 1,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
655 G_TYPE_INT);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
656 signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
657 G_TYPE_FROM_CLASS(gobject_class),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
658 G_SIGNAL_RUN_FIRST,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
659 G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
660 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
661 0,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
662 g_cclosure_marshal_VOID__POINTER,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
663 G_TYPE_NONE, 1,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
664 G_TYPE_INT);
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
665 signals[CLEAR_FORMAT] = g_signal_new("format_function_clear",
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
666 G_TYPE_FROM_CLASS(gobject_class),
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
667 G_SIGNAL_RUN_FIRST,
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
668 G_STRUCT_OFFSET(GtkIMHtmlClass, clear_format),
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
669 NULL,
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
670 0,
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
671 g_cclosure_marshal_VOID__VOID,
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
672 G_TYPE_NONE, 0);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
673 signals[UPDATE_FORMAT] = g_signal_new("format_function_update",
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
674 G_TYPE_FROM_CLASS(gobject_class),
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
675 G_SIGNAL_RUN_FIRST,
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
676 G_STRUCT_OFFSET(GtkIMHtmlClass, update_format),
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
677 NULL,
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
678 0,
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
679 g_cclosure_marshal_VOID__VOID,
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
680 G_TYPE_NONE, 0);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
681 gobject_class->finalize = gtk_imhtml_finalize;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
682 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
683
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
684 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
685 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
686 GtkTextIter iter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
687 imhtml->text_buffer = gtk_text_buffer_new(NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
688 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
689 imhtml->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, FALSE);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
690 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
691 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
692 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
693 /*gtk_text_view_set_indent(GTK_TEXT_VIEW(imhtml), -15);*/
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
694 /*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
695
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
696 /* These tags will be used often and can be reused--we create them on init and then apply them by name
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
697 * other tags (color, size, face, etc.) will have to be created and applied dynamically */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
698 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
699 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
700 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
701 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
702 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
703 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
704 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
705 gtk_text_buffer_create_tag(imhtml->text_buffer, "search", "background", "#22ff00", "weight", "bold", NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
706 gtk_text_buffer_create_tag(imhtml->text_buffer, "LINK", "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
707 /* 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
708 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
709 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
710 imhtml->text_cursor = gdk_cursor_new (GDK_XTERM);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
711
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
712 imhtml->show_smileys = TRUE;
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
713 imhtml->show_comments = TRUE;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
714
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
715 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
716 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
717 imhtml->default_smilies = gtk_smiley_tree_new();
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
718
4944
032dac83798e [gaim-migrate @ 5278]
Robert McQueen <robot101@debian.org>
parents: 4926
diff changeset
719 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
720 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
721 g_signal_connect(G_OBJECT(imhtml), "leave-notify-event", G_CALLBACK(gtk_leave_event_notify), NULL);
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
722 g_signal_connect(G_OBJECT(imhtml), "key_press_event", G_CALLBACK(gtk_key_pressed_cb), NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
723 g_signal_connect_after(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(insert_cb), imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
724
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
725 gtk_drag_dest_set(GTK_WIDGET(imhtml), 0,
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
726 link_drag_drop_targets, sizeof(link_drag_drop_targets) / sizeof(GtkTargetEntry),
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
727 GDK_ACTION_COPY);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
728 g_signal_connect(G_OBJECT(imhtml), "drag_data_received", G_CALLBACK(gtk_imhtml_link_drag_rcv_cb), imhtml);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
729
7404
18d954a0d067 [gaim-migrate @ 8000]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
730 #if GTK_CHECK_VERSION(2,2,0)
7353
53cb39c73cf3 [gaim-migrate @ 7944]
Sean Egan <seanegan@pidgin.im>
parents: 7346
diff changeset
731 g_signal_connect(G_OBJECT(imhtml), "copy-clipboard", G_CALLBACK(copy_clipboard_cb), NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
732 g_signal_connect(G_OBJECT(imhtml), "paste-clipboard", G_CALLBACK(paste_clipboard_cb), NULL);
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
733 g_signal_connect(G_OBJECT(imhtml), "button-release-event", G_CALLBACK(button_release_cb), imhtml);
7404
18d954a0d067 [gaim-migrate @ 8000]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
734 #endif
4944
032dac83798e [gaim-migrate @ 5278]
Robert McQueen <robot101@debian.org>
parents: 4926
diff changeset
735 gtk_widget_add_events(GTK_WIDGET(imhtml), GDK_LEAVE_NOTIFY_MASK);
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
736
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
737 imhtml->tip = NULL;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
738 imhtml->tip_timer = 0;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
739 imhtml->tip_window = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
740
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
741 imhtml->edit.bold = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
742 imhtml->edit.italic = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
743 imhtml->edit.underline = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
744 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
745 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
746 imhtml->edit.fontface = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
747 imhtml->edit.sizespan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
748 imhtml->edit.fontsize = 3;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
749
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
750 imhtml->format_spans = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
751
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
752 imhtml->scalables = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
753
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
754 gtk_imhtml_set_editable(imhtml, FALSE);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
755 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
756
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
757 GtkWidget *gtk_imhtml_new(void *a, void *b)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
758 {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
759 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
760 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
761
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
762 GType gtk_imhtml_get_type()
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
763 {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
764 static GType imhtml_type = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
765
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
766 if (!imhtml_type) {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
767 static const GTypeInfo imhtml_info = {
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
768 sizeof(GtkIMHtmlClass),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
769 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
770 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
771 (GClassInitFunc) gtk_imhtml_class_init,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
772 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
773 NULL,
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
774 sizeof (GtkIMHtml),
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
775 0,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
776 (GInstanceInitFunc) gtk_imhtml_init
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
777 };
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
778
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
779 imhtml_type = g_type_register_static(gtk_text_view_get_type(),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
780 "GtkIMHtml", &imhtml_info, 0);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
781 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
782
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
783 return imhtml_type;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
784 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
785
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
786 struct url_data {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
787 GObject *object;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
788 gchar *url;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
789 };
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
790
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
791 static void url_open(GtkWidget *w, struct url_data *data) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
792 if(!data) return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
793 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
794
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
795 g_object_unref(data->object);
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
796 g_free(data->url);
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
797 g_free(data);
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
798 }
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
799
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
800 static void url_copy(GtkWidget *w, gchar *url) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
801 GtkClipboard *clipboard;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
802
5293
53c5041ea95a [gaim-migrate @ 5665]
Etan Reisner <deryni@pidgin.im>
parents: 5282
diff changeset
803 clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
804 gtk_clipboard_set_text(clipboard, url, -1);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
805
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
806 clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
807 gtk_clipboard_set_text(clipboard, url, -1);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
808 }
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
809
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
810 /* The callback for an event on a link tag. */
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
811 gboolean tag_event(GtkTextTag *tag, GObject *imhtml, GdkEvent *event, GtkTextIter *arg2, char *url) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
812 GdkEventButton *event_button = (GdkEventButton *) event;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
813 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
814 return FALSE;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
815 if (event->type == GDK_BUTTON_RELEASE) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
816 if (event_button->button == 1) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
817 GtkTextIter start, end;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
818 /* we shouldn't open a URL if the user has selected something: */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
819 gtk_text_buffer_get_selection_bounds(
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
820 gtk_text_iter_get_buffer(arg2), &start, &end);
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
821 if(gtk_text_iter_get_offset(&start) !=
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
822 gtk_text_iter_get_offset(&end))
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
823 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
824
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
825 /* A link was clicked--we emit the "url_clicked" signal
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
826 * with the URL as the argument */
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
827 g_signal_emit(imhtml, signals[URL_CLICKED], 0, url);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
828 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
829 } else if(event_button->button == 3) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
830 GtkWidget *img, *item, *menu;
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
831 struct url_data *tempdata = g_new(struct url_data, 1);
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
832 tempdata->object = g_object_ref(imhtml);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
833 tempdata->url = g_strdup(url);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
834
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
835 /* 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
836 if (GTK_IMHTML(imhtml)->tip_window) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
837 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
838 GTK_IMHTML(imhtml)->tip_window = NULL;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
839 }
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
840 if (GTK_IMHTML(imhtml)->tip_timer) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
841 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
842 GTK_IMHTML(imhtml)->tip_timer = 0;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
843 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
844 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
845 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
846 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
847 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
848 menu = gtk_menu_new();
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
849
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
850 /* buttons and such */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
851
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
852 if (!strncmp(url, "mailto:", 7))
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
853 {
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
854 /* Copy E-Mail Address */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
855 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
856 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
857 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
858 _("_Copy E-Mail Address"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
859 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
860 g_signal_connect(G_OBJECT(item), "activate",
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
861 G_CALLBACK(url_copy), url + 7);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
862 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
863 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
864 else
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
865 {
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
866 /* Copy Link Location */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
867 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
868 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
869 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
870 _("_Copy Link Location"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
871 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
872 g_signal_connect(G_OBJECT(item), "activate",
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
873 G_CALLBACK(url_copy), url);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
874 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
875
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
876 /* Open Link in Browser */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
877 img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
878 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
879 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
880 _("_Open Link in Browser"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
881 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
882 g_signal_connect(G_OBJECT(item), "activate",
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
883 G_CALLBACK(url_open), tempdata);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
884 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
885 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
886
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
887
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
888 gtk_widget_show_all(menu);
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
889 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
890 event_button->button, event_button->time);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
891
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
892 return TRUE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
893 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
894 }
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
895 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
896 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
897 be caught by the regular GtkTextView menu */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
898 else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
899 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
900 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
901
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
902 static void
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
903 gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y,
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
904 GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml)
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
905 {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
906 if(gtk_imhtml_get_editable(imhtml) && sd->data){
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
907 gchar **links;
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
908 gchar *link;
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
909
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
910 gaim_str_strip_cr(sd->data);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
911
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
912 links = g_strsplit(sd->data, "\n", 0);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
913 while((link = *links++) != NULL){
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
914 if(gaim_str_has_prefix(link, "http://") ||
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
915 gaim_str_has_prefix(link, "https://") ||
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
916 gaim_str_has_prefix(link, "ftp://")){
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
917 gtk_imhtml_insert_link(imhtml, link, link);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
918 } else if (link=='\0') {
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
919 /* Ignore blank lines */
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
920 } else {
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
921 /* Special reasons, aka images being put in via other tag, etc. */
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
922 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
923 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
924
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
925 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
926 } else {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
927 gtk_drag_finish(dc, FALSE, FALSE, t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
928 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
929 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
930
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
931 /* this isn't used yet
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
932 static void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
933 gtk_smiley_tree_remove (GtkSmileyTree *tree,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
934 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
935 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
936 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
937 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
938 gint len = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
939
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
940 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
941 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
942
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
943 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
944 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
945
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
946 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
947 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
948 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
949 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
950 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
951
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
952 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
953 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
954
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
955 if (t->image) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
956 t->image = NULL;
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
957 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
958 }
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
959 */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
960
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
961
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
962 static gint
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
963 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
964 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
965 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
966 GtkSmileyTree *t = tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
967 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
968 gint len = 0;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
969 gchar *amp;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
970 gint alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
971
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
972 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
973 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
974
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
975 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
976 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
977
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
978 if(*x == '&' && gtk_imhtml_is_amp_escape(x, &amp, &alen)) {
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
979 len += alen - strlen(amp);
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
980 x += alen - strlen(amp);
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
981 pos = strchr (t->values->str, *amp);
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
982 }
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
983 else
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
984 pos = strchr (t->values->str, *x);
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
985
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
986 if (pos)
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
987 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
988 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
989 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
990
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
991 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
992 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
993
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
994 if (t->image)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
995 return len;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
996
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
997 return 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
998 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
999
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1000 void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1001 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1002 gchar *sml,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1003 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1004 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1005 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1006 g_return_if_fail (imhtml != NULL);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1007 g_return_if_fail (GTK_IS_IMHTML (imhtml));
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1008
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1009 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1010 tree = imhtml->default_smilies;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1011 else if ((tree = g_hash_table_lookup(imhtml->smiley_data, sml))) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1012 } else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1013 tree = gtk_smiley_tree_new();
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1014 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
1015 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1016
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1017 gtk_smiley_tree_insert (tree, smiley);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1018 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1019
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1020 static gboolean
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1021 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1022 GSList *fonts,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1023 const gchar *text,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1024 gint *len)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1025 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1026 GtkSmileyTree *tree;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1027 GtkIMHtmlFontDetail *font;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1028 char *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1029
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1030 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1031 font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1032 sml = font->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1033 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1034
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1035 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1036 tree = imhtml->default_smilies;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1037 else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1038 tree = g_hash_table_lookup(imhtml->smiley_data, sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1039 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1040 if (tree == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1041 return FALSE;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1042
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1043 *len = gtk_smiley_tree_lookup (tree, text);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1044 return (*len > 0);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1045 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1046
6814
8520a41fd75d [gaim-migrate @ 7354]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6648
diff changeset
1047 GdkPixbufAnimation *
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1048 gtk_smiley_tree_image (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1049 const gchar *sml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1050 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1051 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1052 GtkSmileyTree *t;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1053 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1054 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1055 t = imhtml->default_smilies;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1056 else
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1057 t = g_hash_table_lookup(imhtml->smiley_data, sml);
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1058
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1059
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1060 if (t == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1061 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1062
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1063 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1064 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1065
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1066 if (!t->values) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1067 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1068 }
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1069
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1070 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1071 if (pos) {
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1072 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
1073 } else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1074 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1075 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1076 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1077 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1078
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1079 if (!t->image->icon)
6814
8520a41fd75d [gaim-migrate @ 7354]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6648
diff changeset
1080 t->image->icon = gdk_pixbuf_animation_new_from_file(t->image->file, NULL);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1081
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1082 return t->image->icon;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1083 }
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1084 #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
1085 *tag = g_strndup (string, strlen (x)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1086 *len = strlen (x) + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1087 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1088 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1089 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1090
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1091 #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
1092 const gchar *c = string + strlen (x " "); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1093 gchar e = '"'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1094 gboolean quote = FALSE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1095 while (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1096 if (*c == '"' || *c == '\'') { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1097 if (quote && (*c == e)) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1098 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1099 else if (!quote) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1100 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1101 e = *c; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1102 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1103 } else if (!quote && (*c == '>')) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1104 break; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1105 c++; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1106 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1107 if (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1108 *tag = g_strndup (string, c - string); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1109 *len = c - string + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1110 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1111 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1112 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1113 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1114
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1115
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1116 static gboolean
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1117 gtk_imhtml_is_amp_escape (const gchar *string,
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1118 gchar **replace,
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1119 gint *length)
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1120 {
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1121 static char buf[7];
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1122 g_return_val_if_fail (string != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1123 g_return_val_if_fail (replace != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1124 g_return_val_if_fail (length != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1125
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1126 if (!g_ascii_strncasecmp (string, "&amp;", 5)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1127 *replace = "&";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1128 *length = 5;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1129 } else if (!g_ascii_strncasecmp (string, "&lt;", 4)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1130 *replace = "<";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1131 *length = 4;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1132 } else if (!g_ascii_strncasecmp (string, "&gt;", 4)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1133 *replace = ">";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1134 *length = 4;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1135 } else if (!g_ascii_strncasecmp (string, "&nbsp;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1136 *replace = " ";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1137 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1138 } else if (!g_ascii_strncasecmp (string, "&copy;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1139 *replace = "©";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1140 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1141 } else if (!g_ascii_strncasecmp (string, "&quot;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1142 *replace = "\"";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1143 *length = 6;
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1144 } else if (!g_ascii_strncasecmp (string, "&reg;", 5)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1145 *replace = "®";
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1146 *length = 5;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1147 } else if (!g_ascii_strncasecmp (string, "&apos;", 6)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1148 *replace = "\'";
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1149 *length = 6;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1150 } else if (*(string + 1) == '#') {
2022
c47ca971fd2f [gaim-migrate @ 2032]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2002
diff changeset
1151 guint pound = 0;
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 3000
diff changeset
1152 if ((sscanf (string, "&#%u;", &pound) == 1) && pound != 0) {
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1153 int buflen;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1154 if (*(string + 3 + (gint)log10 (pound)) != ';')
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1155 return FALSE;
7287
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1156 buflen = g_unichar_to_utf8((gunichar)pound, buf);
abe4e3c069d4 [gaim-migrate @ 7868]
Nathan Walp <nwalp@pidgin.im>
parents: 7281
diff changeset
1157 buf[buflen] = '\0';
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1158 *replace = buf;
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1159 *length = 2;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1160 while (isdigit ((gint) string [*length])) (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1161 if (string [*length] == ';') (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1162 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1163 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1164 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1165 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1166 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1167 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1168
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1169 return TRUE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1170 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1171
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1172 static gboolean
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1173 gtk_imhtml_is_tag (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1174 gchar **tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1175 gint *len,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1176 gint *type)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1177 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1178 char *close;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1179 *type = 1;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1180
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1181
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1182 if (!(close = strchr (string, '>')))
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1183 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1184
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1185 VALID_TAG ("B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1186 VALID_TAG ("BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1187 VALID_TAG ("/B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1188 VALID_TAG ("/BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1189 VALID_TAG ("I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1190 VALID_TAG ("ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1191 VALID_TAG ("/I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1192 VALID_TAG ("/ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1193 VALID_TAG ("U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1194 VALID_TAG ("UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1195 VALID_TAG ("/U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1196 VALID_TAG ("/UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1197 VALID_TAG ("S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1198 VALID_TAG ("STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1199 VALID_TAG ("/S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1200 VALID_TAG ("/STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1201 VALID_TAG ("SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1202 VALID_TAG ("/SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1203 VALID_TAG ("SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1204 VALID_TAG ("/SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1205 VALID_TAG ("PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1206 VALID_TAG ("/PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1207 VALID_TAG ("TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1208 VALID_TAG ("/TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1209 VALID_TAG ("BR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1210 VALID_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1211 VALID_TAG ("/FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1212 VALID_TAG ("/A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1213 VALID_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1214 VALID_TAG ("/P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1215 VALID_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1216 VALID_TAG ("/H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1217 VALID_TAG ("HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1218 VALID_TAG ("/HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1219 VALID_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1220 VALID_TAG ("/BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1221 VALID_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1222 VALID_TAG ("HEAD");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1223 VALID_TAG ("/HEAD");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1224 VALID_TAG ("BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1225 VALID_TAG ("/BINARY");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1226
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1227 VALID_OPT_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1228 VALID_OPT_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1229 VALID_OPT_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1230 VALID_OPT_TAG ("A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1231 VALID_OPT_TAG ("IMG");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1232 VALID_OPT_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1233 VALID_OPT_TAG ("H3");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1234 VALID_OPT_TAG ("HTML");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1235
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1236 VALID_TAG ("CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1237 VALID_TAG ("/CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1238 VALID_TAG ("EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1239 VALID_TAG ("/EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1240 VALID_TAG ("STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1241 VALID_TAG ("/STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1242
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
1243 VALID_OPT_TAG ("SPAN");
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
1244 VALID_TAG ("/SPAN");
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
1245 VALID_TAG ("BR/"); /* hack until gtkimhtml handles things better */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1246 VALID_TAG ("IMG");
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
1247 VALID_TAG("SPAN");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1248 VALID_OPT_TAG("BR");
7988
fe4616ea76c3 [gaim-migrate @ 8665]
Nathan Walp <nwalp@pidgin.im>
parents: 7961
diff changeset
1249
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1250 if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) {
2954
fc07d855731d [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
1251 gchar *e = strstr (string + strlen("!--"), "-->");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1252 if (e) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1253 *len = e - string + strlen ("-->");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1254 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1255 return TRUE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1256 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1257 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1258
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1259 *type = -1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1260 *len = close - string + 1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1261 *tag = g_strndup(string, *len - 1);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1262 return TRUE;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1263 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1264
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1265 static gchar*
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1266 gtk_imhtml_get_html_opt (gchar *tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1267 const gchar *opt)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1268 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1269 gchar *t = tag;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1270 gchar *e, *a;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1271 gchar *val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1272 gint len;
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1273 gchar *c;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1274 GString *ret;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1275
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1276 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1277 gboolean quote = FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1278 if (*t == '\0') break;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1279 while (*t && !((*t == ' ') && !quote)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1280 if (*t == '\"')
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1281 quote = ! quote;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1282 t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1283 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1284 while (*t && (*t == ' ')) t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1285 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1286
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1287 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1288 t += strlen (opt);
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1289 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1290 return NULL;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1291 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1292
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1293 if ((*t == '\"') || (*t == '\'')) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1294 e = a = ++t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1295 while (*e && (*e != *(t - 1))) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1296 if (*e == '\0') {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1297 return NULL;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1298 } else
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1299 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1300 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1301 e = a = t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1302 while (*e && !isspace ((gint) *e)) e++;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1303 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1304 }
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1305
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1306 ret = g_string_new("");
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1307 e = val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1308 while(*e) {
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1309 if(gtk_imhtml_is_amp_escape(e, &c, &len)) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1310 ret = g_string_append(ret, c);
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1311 e += len;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1312 } else {
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1313 ret = g_string_append_c(ret, *e);
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1314 e++;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1315 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1316 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1317
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
1318 g_free(val);
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
1319
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
1320 return g_string_free(ret, FALSE);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1321 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1322
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1323 /* Inline CSS Support - Douglas Thrift */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1324 static gchar*
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1325 gtk_imhtml_get_css_opt (gchar *style,
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1326 const gchar *opt)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1327 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1328 gchar *t = style;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1329 gchar *e, *a;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1330 gchar *val;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1331 gint len;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1332 gchar *c;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1333 GString *ret;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1334
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1335 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1336 /* gboolean quote = FALSE; */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1337 if (*t == '\0') break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1338 while (*t && !((*t == ' ') /*&& !quote*/)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1339 /* if (*t == '\"')
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1340 quote = ! quote; */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1341 t++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1342 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1343 while (*t && (*t == ' ')) t++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1344 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1345
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1346 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1347 t += strlen (opt);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1348 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1349 return NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1350 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1351
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1352 /* if ((*t == '\"') || (*t == '\'')) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1353 e = a = ++t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1354 while (*e && (*e != *(t - 1))) e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1355 if (*e == '\0') {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1356 return NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1357 } else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1358 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1359 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1360 e = a = t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1361 while (*e && !isspace ((gint) *e)) e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1362 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1363 }*/
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1364
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1365 e = a = t;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1366 while (*e && *e != ';') e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1367 val = g_strndup(a, e - a);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1368
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1369 ret = g_string_new("");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1370 e = val;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1371 while(*e) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1372 if(gtk_imhtml_is_amp_escape(e, &c, &len)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1373 ret = g_string_append(ret, c);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1374 e += len;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1375 } else {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1376 ret = g_string_append_c(ret, *e);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1377 e++;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1378 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1379 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1380
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1381 g_free(val);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1382 val = ret->str;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1383 g_string_free(ret, FALSE);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1384 return val;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1385 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1386
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1387 static const char *accepted_protocols[] = {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1388 "http://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1389 "https://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1390 "ftp://"
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1391 };
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1392
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1393 static const int accepted_protocols_size = 3;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1394
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1395 /* 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
1396 the caller knows how long the protocol string is. */
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1397 int gtk_imhtml_is_protocol(const char *text)
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1398 {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1399 gint i;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1400
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1401 for(i=0; i<accepted_protocols_size; i++){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1402 if( strncasecmp(text, accepted_protocols[i], strlen(accepted_protocols[i])) == 0 ){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1403 return strlen(accepted_protocols[i]);
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1404 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1405 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1406 return 0;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1407 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1408
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1409 GString* gtk_imhtml_append_text_with_images (GtkIMHtml *imhtml,
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1410 const gchar *text,
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1411 GtkIMHtmlOptions options,
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1412 GSList *images)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1413 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1414 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1415 GtkTextIter insert;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1416 GdkRectangle rect;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1417 gint pos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1418 GString *str = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1419 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1420 GtkTextMark *mark;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1421 gchar *ws;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1422 gchar *tag;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1423 gchar *url = NULL;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1424 gchar *bg = NULL;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1425 gint len;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1426 gint tlen, smilelen, wpos=0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1427 gint type;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1428 const gchar *c;
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1429 gchar *amp;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1430 gint len_protocol;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1431
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1432 guint bold = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1433 italics = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1434 underline = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1435 strike = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1436 sub = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1437 sup = 0,
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
1438 title = 0,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1439 pre = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1440
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1441 GSList *fonts = NULL;
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1442 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1443 GtkIMHtmlScalable *scalable = NULL;
4612
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1444 int y, height;
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1445
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1446 g_return_val_if_fail (imhtml != NULL, NULL);
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1447 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1448 g_return_val_if_fail (text != NULL, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1449 c = text;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1450 len = strlen(text);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1451 ws = g_malloc(len + 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1452 ws[0] = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1453
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1454 if (options & GTK_IMHTML_RETURN_LOG)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1455 str = g_string_new("");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1456
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1457 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &insert, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1458
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1459 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1460 mark = gtk_text_buffer_create_mark (imhtml->text_buffer, NULL, &iter, /* right grav */ FALSE);
4612
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1461
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1462 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
4612
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1463 gtk_text_view_get_line_yrange(GTK_TEXT_VIEW(imhtml), &iter, &y, &height);
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1464
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1465 #if GTK_CHECK_VERSION(2,2,0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1466 gtk_imhtml_primary_clipboard_clear(NULL, imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1467 #endif
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1468 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1469 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1470 &iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1471
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1472 if(((y + height) - (rect.y + rect.height)) > height
4612
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1473 && gtk_text_buffer_get_char_count(imhtml->text_buffer)){
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1474 options |= GTK_IMHTML_NO_SCROLL;
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1475 }
c27625e13a26 [gaim-migrate @ 4901]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4477
diff changeset
1476
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1477 while (pos < len) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1478 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1479 c++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1480 pos++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1481 ws[wpos] = '\0';
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1482 switch (type)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1483 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1484 case 1: /* B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1485 case 2: /* BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1486 case 54: /* STRONG */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1487 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1488 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1489 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1490 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1491 if (bold == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1492 gtk_imhtml_toggle_bold(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1493 bold++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1494 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1495 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1496 case 3: /* /B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1497 case 4: /* /BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1498 case 55: /* /STRONG */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1499 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1500 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1501 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1502 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1503 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1504
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1505 if (bold)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1506 bold--;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1507 if (bold == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1508 gtk_imhtml_toggle_bold(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1509 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1510 case 5: /* I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1511 case 6: /* ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1512 case 52: /* EM */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1513 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1514 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1515 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1516 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1517 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1518 if (italics == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1519 gtk_imhtml_toggle_italic(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1520 italics++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1521 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1522 case 7: /* /I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1523 case 8: /* /ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1524 case 53: /* /EM */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1525 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1526 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1527 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1528 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1529 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1530 if (italics)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1531 italics--;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1532 if (italics == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1533 gtk_imhtml_toggle_italic(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1534 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1535 case 9: /* U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1536 case 10: /* UNDERLINE */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1537 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1538 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1539 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1540 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1541 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1542 if (underline == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1543 gtk_imhtml_toggle_underline(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1544 underline++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1545 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1546 case 11: /* /U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1547 case 12: /* /UNDERLINE */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1548 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1549 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1550 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1551 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1552 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1553 if (underline)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1554 underline--;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1555 if (underline == 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1556 gtk_imhtml_toggle_underline(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1557 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1558 case 13: /* S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1559 case 14: /* STRIKE */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1560 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1561 strike++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1562 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1563 case 15: /* /S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1564 case 16: /* /STRIKE */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1565 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1566 if (strike)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1567 strike--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1568 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1569 case 17: /* SUB */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1570 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1571 sub++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1572 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1573 case 18: /* /SUB */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1574 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1575 if (sub)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1576 sub--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1577 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1578 case 19: /* SUP */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1579 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1580 sup++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1581 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1582 case 20: /* /SUP */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1583 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1584 if (sup)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1585 sup--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1586 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1587 case 21: /* PRE */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1588 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1589 pre++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1590 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1591 case 22: /* /PRE */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1592 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1593 if (pre)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1594 pre--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1595 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1596 case 23: /* TITLE */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1597 /* NEW_BIT (NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1598 title++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1599 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1600 case 24: /* /TITLE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1601 if (title) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1602 if (options & GTK_IMHTML_NO_TITLE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1603 wpos = 0;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1604 ws [wpos] = '\0';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1605 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1606 title--;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1607 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1608 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1609 case 25: /* BR */
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
1610 case 58: /* BR/ */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1611 case 61: /* BR (opt) */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1612 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1613 wpos++;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1614 /* NEW_BIT (NEW_TEXT_BIT); */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1615 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1616 case 26: /* HR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1617 case 42: /* HR (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1618 ws[wpos++] = '\n';
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1619 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1620 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1621 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1622 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1623 scalable = gtk_imhtml_hr_new();
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1624 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1625 scalable->add_to(scalable, imhtml, &iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1626 scalable->scale(scalable, rect.width, rect.height);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1627 imhtml->scalables = g_list_append(imhtml->scalables, scalable);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1628 ws[0] = '\0'; wpos = 0;
7942
e6c3c6ab87af [gaim-migrate @ 8613]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7914
diff changeset
1629 ws[wpos++] = '\n';
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1630
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1631 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1632 case 27: /* /FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1633 if (fonts) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1634 GtkIMHtmlFontDetail *font = fonts->data;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1635 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1636 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1637 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1638 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1639 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1640 /* NEW_BIT (NEW_TEXT_BIT); */
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1641
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1642 if (font->face) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1643 gtk_imhtml_toggle_fontface(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1644 g_free (font->face);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1645 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1646 if (font->fore) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1647 gtk_imhtml_toggle_forecolor(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1648 g_free (font->fore);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1649 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1650 if (font->back) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1651 gtk_imhtml_toggle_backcolor(imhtml, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1652 g_free (font->back);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1653 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1654 if (font->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1655 g_free (font->sml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1656 g_free (font);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1657
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1658 if (font->size != 3)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1659 gtk_imhtml_font_set_size(imhtml, 3);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1660
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1661 fonts = fonts->next;
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1662 if (fonts) {
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1663 GtkIMHtmlFontDetail *font = fonts->data;
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1664
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1665 if (font->face)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1666 gtk_imhtml_toggle_fontface(imhtml, font->face);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1667 if (font->fore)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1668 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1669 if (font->back)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1670 gtk_imhtml_toggle_backcolor(imhtml, font->back);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1671 if (font->size != 3)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1672 gtk_imhtml_font_set_size(imhtml, font->size);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1673 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1674 }
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1675 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1676 case 28: /* /A */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1677 if (url) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1678 gtk_imhtml_insert_link(imhtml, url, ws);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1679 g_free(url);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1680 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1681 url = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1682 ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1683 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1684 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1685 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1686
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1687 case 29: /* P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1688 case 30: /* /P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1689 case 31: /* H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1690 case 32: /* /H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1691 case 33: /* HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1692 case 34: /* /HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1693 case 35: /* BODY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1694 case 36: /* /BODY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1695 case 37: /* FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1696 case 38: /* HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1697 case 39: /* /HEAD */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1698 case 40: /* BINARY */
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1699 case 41: /* /BINARY */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1700 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1701 case 43: /* FONT (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1702 {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1703 gchar *color, *back, *face, *size, *sml;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1704 GtkIMHtmlFontDetail *font, *oldfont = NULL;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1705 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1706 back = gtk_imhtml_get_html_opt (tag, "BACK=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1707 face = gtk_imhtml_get_html_opt (tag, "FACE=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1708 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1709 sml = gtk_imhtml_get_html_opt (tag, "SML=");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1710 if (!(color || back || face || size || sml))
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1711 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1712
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1713 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1714 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1715 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1716 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1717 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1718
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1719 font = g_new0 (GtkIMHtmlFontDetail, 1);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1720 if (fonts)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1721 oldfont = fonts->data;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1722
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1723 if (color && !(options & GTK_IMHTML_NO_COLOURS)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1724 font->fore = color;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1725 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1726 }
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1727 //else if (oldfont && oldfont->fore)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1728 // font->fore = g_strdup(oldfont->fore);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1729
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1730 if (back && !(options & GTK_IMHTML_NO_COLOURS)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1731 font->back = back;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1732 gtk_imhtml_toggle_backcolor(imhtml, font->back);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1733 }
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1734 //else if (oldfont && oldfont->back)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1735 // font->back = g_strdup(oldfont->back);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1736
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1737 if (face && !(options & GTK_IMHTML_NO_FONTS)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1738 font->face = face;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1739 gtk_imhtml_toggle_fontface(imhtml, font->face);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1740 }
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1741 //else if (oldfont && oldfont->face)
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1742 // font->face = g_strdup(oldfont->face);
4032
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 if (sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1745 font->sml = sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1746 else if (oldfont && oldfont->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1747 font->sml = g_strdup(oldfont->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1748
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1749 if (size && !(options & GTK_IMHTML_NO_SIZES)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1750 if (*size == '+') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1751 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1752 font->size += 3;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1753 } else if (*size == '-') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1754 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1755 font->size = MAX (0, 3 - font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1756 } else if (isdigit (*size)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1757 sscanf (size, "%hd", &font->size);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1758 }
6042
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
1759 if (font->size > 100)
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
1760 font->size = 100;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1761 } else if (oldfont)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1762 font->size = oldfont->size;
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1763 else
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1764 font->size = 3;
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
1765 gtk_imhtml_font_set_size(imhtml, font->size);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1766 g_free(size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1767 fonts = g_slist_prepend (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1768 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1769 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1770 case 44: /* BODY (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1771 if (!(options & GTK_IMHTML_NO_COLOURS)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1772 char *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1773 if (bgcolor) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1774 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1775 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1776 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1777 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1778 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1779 /* NEW_BIT(NEW_TEXT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1780 if (bg)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1781 g_free(bg);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1782 bg = bgcolor;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1783 gtk_imhtml_toggle_backcolor(imhtml, bg);
2885
213e2a58cbf6 [gaim-migrate @ 2898]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2871
diff changeset
1784 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1785 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1786 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1787 case 45: /* A (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1788 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1789 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1790 if (href) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1791 if (url) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1792 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1793 g_free(url);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1794 } else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1795 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1796 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1797 url = href;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1798 }
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1799 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1800 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1801 case 46: /* IMG (opt) */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1802 case 59: /* IMG */
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1803 {
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1804 GdkPixbuf *img = NULL;
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1805 const gchar *filename = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1806
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1807 if (images && images->data) {
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1808 img = images->data;
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1809 images = images->next;
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1810 filename = g_object_get_data(G_OBJECT(img), "filename");
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1811 g_object_ref(G_OBJECT(img));
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1812 } else {
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1813 img = gtk_widget_render_icon(GTK_WIDGET(imhtml),
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1814 GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON,
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1815 "gtkimhtml-missing-image");
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1816 }
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1817
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1818 scalable = gtk_imhtml_image_new(img, filename);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1819 /* NEW_BIT(NEW_SCALABLE_BIT); */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
1820 g_object_unref(G_OBJECT(img));
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1821 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1822 case 47: /* P (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1823 case 48: /* H3 (opt) */
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
1824 case 49: /* HTML (opt) */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1825 case 50: /* CITE */
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
1826 case 51: /* /CITE */
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
1827 case 56: /* SPAN (opt) */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1828 /* Inline CSS Support - Douglas Thrift
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1829 *
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1830 * color
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1831 * font-family
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1832 * font-size
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1833 */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1834 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1835 gchar *style, *color, *family, *size;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1836 GtkIMHtmlFontDetail *font, *oldfont = NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1837 style = gtk_imhtml_get_html_opt (tag, "style=");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1838
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1839 if (!style) break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1840
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1841 color = gtk_imhtml_get_css_opt (style, "color: ");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1842 family = gtk_imhtml_get_css_opt (style,
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1843 "font-family: ");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1844 size = gtk_imhtml_get_css_opt (style, "font-size: ");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1845
8120
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
1846 if (!(color || family || size)) {
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
1847 g_free(style);
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
1848 break;
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
1849 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1850
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1851 if (url)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1852 gtk_imhtml_insert_link(imhtml, url, ws);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1853 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1854 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1855 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1856 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1857
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1858 font = g_new0 (GtkIMHtmlFontDetail, 1);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1859 if (fonts)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1860 oldfont = fonts->data;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1861
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1862 if (color && !(options & GTK_IMHTML_NO_COLOURS))
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1863 font->fore = color;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1864 else if (oldfont && oldfont->fore)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1865 font->fore = g_strdup(oldfont->fore);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1866
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1867 if (oldfont && oldfont->back)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1868 font->back = g_strdup(oldfont->back);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1869
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1870 if (family && !(options & GTK_IMHTML_NO_FONTS))
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1871 font->face = family;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1872 else if (oldfont && oldfont->face)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1873 font->face = g_strdup(oldfont->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1874 if (font->face && (atoi(font->face) > 100)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1875 g_free(font->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1876 font->face = g_strdup("100");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1877 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1878
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1879 if (oldfont && oldfont->sml)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1880 font->sml = g_strdup(oldfont->sml);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1881
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1882 if (size && !(options & GTK_IMHTML_NO_SIZES)) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1883 if (g_ascii_strcasecmp(size, "smaller") == 0)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1884 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1885 font->size = 2;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1886 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1887 else if (g_ascii_strcasecmp(size, "larger") == 0)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1888 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1889 font->size = 4;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1890 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1891 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1892 {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1893 font->size = 3;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1894 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1895 } else if (oldfont)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1896 font->size = oldfont->size;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1897
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1898 g_free(style);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1899 g_free(size);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1900 fonts = g_slist_prepend (fonts, font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1901 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1902 break;
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
1903 case 57: /* /SPAN */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1904 /* Inline CSS Support - Douglas Thrift */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1905 if (fonts) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1906 GtkIMHtmlFontDetail *font = fonts->data;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1907 if (url)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1908 gtk_imhtml_insert_link(imhtml, url, ws);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1909 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1910 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1911 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1912 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1913 fonts = g_slist_remove (fonts, font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1914 if (font->face)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1915 g_free (font->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1916 if (font->fore)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1917 g_free (font->fore);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1918 if (font->back)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1919 g_free (font->back);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1920 if (font->sml)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1921 g_free (font->sml);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1922 g_free (font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1923 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1924 break;
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
1925 case 60: /* SPAN */
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1926 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1927 case 62: /* comment */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1928 /* NEW_BIT (NEW_TEXT_BIT); */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
1929 ws[wpos] = '\0';
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
1930 if (url)
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
1931 gtk_imhtml_insert_link(imhtml, url, ws);
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
1932 else
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
1933 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
1934 if (imhtml->show_comments)
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
1935 wpos = g_snprintf (ws, len, "%s", tag);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1936 /* NEW_BIT (NEW_COMMENT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1937 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1938 default:
6882
b6d0ac441869 [gaim-migrate @ 7428]
Tim Ringenbach <marv@pidgin.im>
parents: 6839
diff changeset
1939 break;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1940 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1941 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1942 pos += tlen;
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1943 if(tag)
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1944 g_free(tag); /* This was allocated back in VALID_TAG() */
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1945 } else if (imhtml->show_smileys && (gtk_imhtml_is_smiley (imhtml, fonts, c, &smilelen) || gtk_imhtml_is_smiley(imhtml, NULL, c, &smilelen))) {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1946 GtkIMHtmlFontDetail *fd;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1947
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1948 gchar *sml = NULL;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1949 if (fonts) {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1950 fd = fonts->data;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1951 sml = fd->sml;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1952 }
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1953 if (url)
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1954 gtk_imhtml_insert_link(imhtml, url, ws);
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1955 else {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1956 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1957 }
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1958 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1959
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1960 gtk_imhtml_insert_smiley(imhtml, sml, ws);
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1961
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1962 ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1963 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1964
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1965 c += smilelen;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1966 pos += smilelen;
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1967 wpos = 0;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
1968 ws[0] = 0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1969 } 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
1970 while(*amp) {
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1971 ws [wpos++] = *amp++;
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
1972 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1973 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1974 pos += tlen;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1975 } else if (*c == '\n') {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1976 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1977 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1978 wpos++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1979 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1980 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1981 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1982 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1983 ws[0] = '\0';
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1984 wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
1985 /* NEW_BIT (NEW_TEXT_BIT); */
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1986 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1987 c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1988 pos++;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1989 } else if ((len_protocol = gtk_imhtml_is_protocol(c)) > 0){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1990 while(len_protocol--){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1991 /* Skip the next len_protocol characters, but make sure they're
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1992 copied into the ws array.
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1993 */
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1994 ws [wpos++] = *c++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1995 pos++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
1996 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1997 } else if (*c) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1998 ws [wpos++] = *c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1999 pos++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2000 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2001 break;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2002 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2003 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2004 if (url)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2005 gtk_imhtml_insert_link(imhtml, url, ws);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2006 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2007 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, wpos);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2008 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2009
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2010 /* NEW_BIT(NEW_TEXT_BIT); */
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2011 if (url) {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2012 g_free (url);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2013 if (str)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2014 str = g_string_append (str, "</A>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2015 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2016
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2017 while (fonts) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2018 GtkIMHtmlFontDetail *font = fonts->data;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2019 fonts = g_slist_remove (fonts, font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2020 if (font->face)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2021 g_free (font->face);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2022 if (font->fore)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2023 g_free (font->fore);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2024 if (font->back)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2025 g_free (font->back);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2026 if (font->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2027 g_free (font->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2028 g_free (font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2029 if (str)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2030 str = g_string_append (str, "</FONT>");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2031 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2032
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2033 if (str) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2034 while (bold) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2035 str = g_string_append (str, "</B>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2036 bold--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2037 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2038 while (italics) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2039 str = g_string_append (str, "</I>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2040 italics--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2041 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2042 while (underline) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2043 str = g_string_append (str, "</U>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2044 underline--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2045 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2046 while (strike) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2047 str = g_string_append (str, "</S>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2048 strike--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2049 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2050 while (sub) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2051 str = g_string_append (str, "</SUB>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2052 sub--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2053 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2054 while (sup) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2055 str = g_string_append (str, "</SUP>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2056 sup--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2057 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2058 while (title) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2059 str = g_string_append (str, "</TITLE>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2060 title--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2061 }
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2062 while (pre) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2063 str = g_string_append (str, "</PRE>");
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2064 pre--;
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2065 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2066 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2067 g_free (ws);
4630
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4629
diff changeset
2068 if(bg)
14945964677b [gaim-migrate @ 4921]
Nathan Walp <nwalp@pidgin.im>
parents: 4629
diff changeset
2069 g_free(bg);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2070 /* this shouldn't be necessary if we want to be able to continue
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2071 * using the format if it was unclosed. But seeing as removing this
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2072 * line does not help the ctrl-up/down from enabling open tags, I'm
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2073 * leaving it up to sean, or unless I find some time to look into it
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2074 * more -Gary */
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2075 gtk_imhtml_close_tags(imhtml);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2076 if (!(options & GTK_IMHTML_NO_SCROLL))
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2077 gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (imhtml), mark,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2078 0, TRUE, 0.0, 1.0);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2079 gtk_text_buffer_delete_mark (imhtml->text_buffer, mark);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2080 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2081 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2082 &iter);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2083
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2084 object = g_object_ref(G_OBJECT(imhtml));
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2085 g_signal_emit(object, signals[UPDATE_FORMAT], 0);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2086 g_object_unref(object);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2087
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2088 return str;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2089 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2090
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
2091 void gtk_imhtml_remove_smileys(GtkIMHtml *imhtml)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
2092 {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
2093 g_hash_table_destroy(imhtml->smiley_data);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
2094 gtk_smiley_tree_destroy(imhtml->default_smilies);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
2095 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
2096 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
2097 imhtml->default_smilies = gtk_smiley_tree_new();
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
2098 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2099
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2100 void gtk_imhtml_show_smileys (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2101 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2102 {
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2103 imhtml->show_smileys = show;
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2104 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2105
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2106 void gtk_imhtml_show_comments (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2107 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2108 {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
2109 imhtml->show_comments = show;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
2110 }
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
2111
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2112 void gtk_imhtml_html_shortcuts (GtkIMHtml *imhtml,
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2113 gboolean allow)
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2114 {
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2115 imhtml->html_shortcuts = allow;
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2116 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2117
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2118 void gtk_imhtml_smiley_shortcuts (GtkIMHtml *imhtml,
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2119 gboolean allow)
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2120 {
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2121 imhtml->smiley_shortcuts = allow;
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2122 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2123
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2124 void
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2125 gtk_imhtml_set_protocol_name(GtkIMHtml *imhtml, gchar *protocol_name) {
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2126 imhtml->protocol_name = protocol_name;
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2127 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
2128
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
2129 void
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
2130 gtk_imhtml_clear (GtkIMHtml *imhtml)
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
2131 {
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2132 GList *del;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2133 GtkTextIter start, end;
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
2134 GObject *object = g_object_ref(G_OBJECT(imhtml));
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2135
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2136 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2137 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2138 gtk_text_buffer_delete(imhtml->text_buffer, &start, &end);
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2139
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2140 for(del = imhtml->format_spans; del; del = del->next) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2141 GtkIMHtmlFormatSpan *span = del->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2142 if (span->start_tag)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2143 g_free(span->start_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2144 if (span->end_tag)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2145 g_free(span->end_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2146 g_free(span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2147 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2148 g_list_free(imhtml->format_spans);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2149 imhtml->format_spans = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2150
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2151 for(del = imhtml->scalables; del; del = del->next) {
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2152 GtkIMHtmlScalable *scale = del->data;
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2153 scale->free(scale);
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2154 }
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2155 g_list_free(imhtml->scalables);
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
2156 imhtml->scalables = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2157
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2158 imhtml->edit.bold = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2159 imhtml->edit.italic = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2160 imhtml->edit.underline = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2161 imhtml->edit.fontface = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2162 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2163 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2164 imhtml->edit.sizespan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2165 imhtml->edit.fontsize = 3;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2166
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
2167 g_signal_emit(object, signals[CLEAR_FORMAT], 0);
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
2168 g_object_unref(object);
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
2169 }
2363
0767c14d7879 [gaim-migrate @ 2376]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2349
diff changeset
2170
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
2171 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
2172 {
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2173 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2174 GtkTextIter iter;
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
2175
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2176 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
2177 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
2178 rect.y - rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2179 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
2180
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
2181 }
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2182 void gtk_imhtml_page_down (GtkIMHtml *imhtml)
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2183 {
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2184 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2185 GtkTextIter iter;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2186
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2187 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
2188 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
2189 rect.y + rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
2190 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
2191 }
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
2192
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2193 /* GtkIMHtmlScalable, gtk_imhtml_image, gtk_imhtml_hr */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2194 GtkIMHtmlScalable *gtk_imhtml_image_new(GdkPixbuf *img, const gchar *filename)
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
2195 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2196 GtkIMHtmlImage *im_image = g_malloc(sizeof(GtkIMHtmlImage));
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2197 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
2198
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2199 GTK_IMHTML_SCALABLE(im_image)->scale = gtk_imhtml_image_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2200 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
2201 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
2202
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
2203 im_image->pixbuf = img;
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2204 im_image->image = image;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2205 im_image->width = gdk_pixbuf_get_width(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2206 im_image->height = gdk_pixbuf_get_height(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2207 im_image->mark = NULL;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2208 im_image->filename = filename ? g_strdup(filename) : NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2209
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
2210 g_object_ref(img);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2211 return GTK_IMHTML_SCALABLE(im_image);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2212 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2213
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2214 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
2215 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2216 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2217
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2218 if(image->width > width || image->height > height){
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2219 GdkPixbuf *new_image = NULL;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2220 float factor;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2221 int new_width = image->width, new_height = image->height;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2222
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
2223 if(image->width > (width - 2)){
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2224 factor = (float)(width)/image->width;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2225 new_width = width;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2226 new_height = image->height * factor;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2227 }
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
2228 if(new_height >= (height - 2)){
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2229 factor = (float)(height)/new_height;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2230 new_height = height;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2231 new_width = new_width * factor;
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2232 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2233
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
2234 new_image = gdk_pixbuf_scale_simple(image->pixbuf, new_width, new_height, GDK_INTERP_BILINEAR);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2235 gtk_image_set_from_pixbuf(image->image, new_image);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2236 g_object_unref(G_OBJECT(new_image));
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2237 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2238 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2239
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2240 static void write_img_to_file(GtkWidget *w, GtkFileSelection *sel)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2241 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2242 const gchar *filename = gtk_file_selection_get_filename(sel);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2243 gchar *dirname;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2244 GtkIMHtmlImage *image = g_object_get_data(G_OBJECT(sel), "GtkIMHtmlImage");
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2245 gchar *type = NULL;
5019
ac3e5e1f588a [gaim-migrate @ 5355]
Luke Schierer <lschiere@pidgin.im>
parents: 5015
diff changeset
2246 GError *error = NULL;
5015
3a8f6559f866 [gaim-migrate @ 5351]
Nathan Walp <nwalp@pidgin.im>
parents: 5012
diff changeset
2247 #if GTK_CHECK_VERSION(2,2,0)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2248 GSList *formats = gdk_pixbuf_get_formats();
6162
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
2249 #else
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
2250 char *basename = g_path_get_basename(filename);
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
2251 char *ext = strrchr(basename, '.');
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
2252 #endif
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2253
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2254 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2255 /* append a / if needed */
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2256 if (filename[strlen(filename) - 1] != '/') {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2257 dirname = g_strconcat(filename, "/", NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2258 } else {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2259 dirname = g_strdup(filename);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2260 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2261 gtk_file_selection_set_filename(sel, dirname);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2262 g_free(dirname);
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
2263 return;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2264 }
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
2265
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
2266 #if GTK_CHECK_VERSION(2,2,0)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2267 while(formats){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2268 GdkPixbufFormat *format = formats->data;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2269 gchar **extensions = gdk_pixbuf_format_get_extensions(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2270 gpointer p = extensions;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2271
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2272 while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2273 gchar *fmt_ext = extensions[0];
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2274 const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2275
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2276 if(!strcmp(fmt_ext, file_ext)){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2277 type = gdk_pixbuf_format_get_name(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2278 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2279 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2280
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2281 extensions++;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2282 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2283
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2284 g_strfreev(p);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2285
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2286 if(type)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2287 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2288
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2289 formats = formats->next;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2290 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2291
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2292 g_slist_free(formats);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2293 #else
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2294 /* this is really ugly code, but I think it will work */
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2295 if(ext) {
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2296 ext++;
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2297 if(!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg"))
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2298 type = g_strdup("jpeg");
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2299 else if(!g_ascii_strcasecmp(ext, "png"))
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2300 type = g_strdup("png");
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2301 }
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2302
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2303 g_free(basename);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2304 #endif
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
2305
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2306 /* 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
2307 it's a png */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2308 if(!type){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2309 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2310 _("Unable to guess the image type based on the file extension supplied. Defaulting to PNG."));
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2311 type = g_strdup("png");
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2312 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2313
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
2314 gdk_pixbuf_save(image->pixbuf, filename, type, &error, NULL);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2315
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2316 if(error){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2317 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2318 _("Error saving image: %s"), error->message);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2319 g_error_free(error);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2320 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2321
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2322 g_free(type);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2323 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2324
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2325 static void gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImage *image)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2326 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2327 GtkWidget *sel = gtk_file_selection_new(_("Save Image"));
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2328
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2329 if (image->filename)
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2330 gtk_file_selection_set_filename(GTK_FILE_SELECTION(sel), image->filename);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2331 g_object_set_data(G_OBJECT(sel), "GtkIMHtmlImage", image);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2332 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(sel)->ok_button), "clicked",
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2333 G_CALLBACK(write_img_to_file), sel);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2334
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2335 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(sel)->ok_button), "clicked",
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2336 G_CALLBACK(gtk_widget_destroy), sel);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2337 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(sel)->cancel_button), "clicked",
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2338 G_CALLBACK(gtk_widget_destroy), sel);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2339
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2340 gtk_widget_show(sel);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2341 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2342
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2343 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
2344 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2345 GdkEventButton *event_button = (GdkEventButton *) event;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2346
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2347 if (event->type == GDK_BUTTON_RELEASE) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2348 if(event_button->button == 3) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2349 GtkWidget *img, *item, *menu;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2350 gchar *text = g_strdup_printf(_("_Save Image..."));
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2351 menu = gtk_menu_new();
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2352
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2353 /* buttons and such */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2354 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
2355 item = gtk_image_menu_item_new_with_mnemonic(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2356 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
2357 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
2358 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2359
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2360 gtk_widget_show_all(menu);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2361 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2362 event_button->button, event_button->time);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2363
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2364 g_free(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2365 return TRUE;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2366 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2367 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2368 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2369 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
2370 be caught by the regular GtkTextView menu */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2371 else
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2372 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
2373
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
2374 }
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2375 void gtk_imhtml_image_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2376 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2377 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2378
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2379 g_object_unref(image->pixbuf);
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2380 if (image->filename)
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2381 g_free(image->filename);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2382 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2383 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2384
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2385 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
2386 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2387 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2388 GtkWidget *box = gtk_event_box_new();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2389 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
2390
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2391 gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(image->image));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2392
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2393 gtk_widget_show(GTK_WIDGET(image->image));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2394 gtk_widget_show(box);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2395
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2396 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
2397 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
2398 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2399
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2400 GtkIMHtmlScalable *gtk_imhtml_hr_new()
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2401 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2402 GtkIMHtmlHr *hr = g_malloc(sizeof(GtkIMHtmlHr));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2403
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2404 GTK_IMHTML_SCALABLE(hr)->scale = gtk_imhtml_hr_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2405 GTK_IMHTML_SCALABLE(hr)->add_to = gtk_imhtml_hr_add_to;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2406 GTK_IMHTML_SCALABLE(hr)->free = gtk_imhtml_hr_free;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2407
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2408 hr->sep = gtk_hseparator_new();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2409 gtk_widget_set_size_request(hr->sep, 5000, 2);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2410 gtk_widget_show(hr->sep);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2411
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2412 return GTK_IMHTML_SCALABLE(hr);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2413 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2414
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2415 void gtk_imhtml_hr_scale(GtkIMHtmlScalable *scale, int width, int height)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2416 {
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
2417 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
2418 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2419
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2420 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
2421 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2422 GtkIMHtmlHr *hr = (GtkIMHtmlHr *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2423 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2424 g_object_set_data(G_OBJECT(anchor), "text_tag", "<hr>");
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2425 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
2426 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2427
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2428 void gtk_imhtml_hr_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2429 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2430 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2431 }
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2432
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2433 gboolean gtk_imhtml_search_find(GtkIMHtml *imhtml, const gchar *text)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2434 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2435 GtkTextIter iter, start, end;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2436 gboolean new_search = TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2437
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2438 g_return_val_if_fail(imhtml != NULL, FALSE);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2439 g_return_val_if_fail(text != NULL, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2440
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2441 if (imhtml->search_string && !strcmp(text, imhtml->search_string))
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2442 new_search = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2443
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2444 if (new_search) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2445 gtk_imhtml_search_clear(imhtml);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2446 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2447 } else {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2448 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
2449 gtk_text_buffer_get_mark(imhtml->text_buffer, "search"));
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2450 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2451 imhtml->search_string = g_strdup(text);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2452
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
2453 if (gtk_source_iter_forward_search(&iter, imhtml->search_string,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
2454 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2455 &start, &end, NULL)) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2456
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2457 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
2458 gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &end, FALSE);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2459 if (new_search) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2460 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
2461 do
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2462 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
2463 while (gtk_source_iter_forward_search(&end, imhtml->search_string,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2464 GTK_SOURCE_SEARCH_VISIBLE_ONLY |
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
2465 GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2466 &start, &end, NULL));
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2467 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2468 return TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2469 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2470
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2471 gtk_imhtml_search_clear(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2472
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2473 return FALSE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2474 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2475
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2476 void gtk_imhtml_search_clear(GtkIMHtml *imhtml)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2477 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2478 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2479
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2480 g_return_if_fail(imhtml != NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2481
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2482 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2483 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2484
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2485 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "search", &start, &end);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2486 if (imhtml->search_string)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2487 g_free(imhtml->search_string);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2488 imhtml->search_string = NULL;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
2489 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2490
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2491 /* Editable stuff */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2492 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2493 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2494 GtkIMHtmlFormatSpan *span = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2495 GtkTextIter end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2496
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2497 gtk_text_iter_forward_chars(iter, len);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2498 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2499 gtk_text_iter_forward_char(&end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2500
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2501 if (!gtk_text_iter_equal(&end, iter))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2502 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2503
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2504
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2505 if ((span = imhtml->edit.bold)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2506 GtkTextIter bold;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2507 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &bold, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2508 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &bold, iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2509 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2510
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2511 if ((span = imhtml->edit.italic)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2512 GtkTextIter italic;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2513 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &italic, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2514 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &italic,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2515 iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2516 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2517
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2518 if ((span = imhtml->edit.underline)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2519 GtkTextIter underline;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2520 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &underline, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2521 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &underline,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2522 iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2523 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2524
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2525 if ((span = imhtml->edit.forecolor)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2526 GtkTextIter fore;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2527 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &fore, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2528 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &fore, iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2529 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2530
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2531 if ((span = imhtml->edit.backcolor)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2532 GtkTextIter back;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2533 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &back, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2534 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &back, iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2535 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2536
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2537 if ((span = imhtml->edit.fontface)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2538 GtkTextIter face;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2539 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &face, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2540 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &face, iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2541 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2542
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2543 if ((span = imhtml->edit.sizespan)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2544 GtkTextIter size;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2545 /* We create the tags here so that one can grow font or shrink font several times
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2546 * in a row without creating unnecessary tags */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2547 if (span->tag == NULL) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2548 span->tag = gtk_text_buffer_create_tag
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2549 (imhtml->text_buffer, NULL, "scale", (double)_point_sizes [imhtml->edit.fontsize-1], NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2550 span->start_tag = g_strdup_printf("<font size=\"%d\">", imhtml->edit.fontsize);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2551 span->end_tag = g_strdup("</font>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2552 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2553 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &size, span->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2554 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &size, iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2555 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2556 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2557
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2558 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2559 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2560 gtk_text_view_set_editable(GTK_TEXT_VIEW(imhtml), editable);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2561 /*
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2562 * We need a visible caret for accessibility, so mouseless
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2563 * people can highlight stuff.
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2564 */
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2565 /* 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
2566 imhtml->editable = editable;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2567 imhtml->format_functions = !editable ? 0 : -1;
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2568 }
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2569
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2570 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2571 {
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2572 GObject *object = g_object_ref(G_OBJECT(imhtml));
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2573 g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2574 imhtml->format_functions = buttons;
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
2575 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2576 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2577
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2578 static gboolean
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2579 gtk_imhtml_has_open_tags(GtkIMHtml *imhtml) {
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2580 if(imhtml->edit.bold && imhtml->edit.bold->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2581 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2582
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2583 if(imhtml->edit.italic && imhtml->edit.italic->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2584 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2585
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2586 if(imhtml->edit.underline && imhtml->edit.underline->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2587 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2588
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2589 if(imhtml->edit.forecolor && imhtml->edit.forecolor->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2590 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2591
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2592 if(imhtml->edit.backcolor && imhtml->edit.backcolor->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2593 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2594
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2595 if(imhtml->edit.fontface && imhtml->edit.fontface->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2596 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2597
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2598 if(imhtml->edit.sizespan && imhtml->edit.sizespan->end == NULL)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2599 return TRUE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2600
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2601 return FALSE;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2602 }
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2603
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2604 void gtk_imhtml_get_current_format(GtkIMHtml *imhtml, gboolean *bold,
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2605 gboolean *italic, gboolean *underline)
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2606 {
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2607 GtkTextMark *ins_mark;
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2608 GtkTextIter ins_iter;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2609 GSList *tags;
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2610
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2611 ins_mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2612 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &ins_iter, ins_mark);
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2613
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2614 if(gtk_imhtml_has_open_tags(imhtml)) {
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2615 GtkTextIter end_iter;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2616 gint position, length;
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2617
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2618 position = gtk_text_iter_get_offset(&ins_iter);
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2619
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2620 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end_iter);
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2621 length = gtk_text_iter_get_offset(&end_iter);
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2622
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2623 if(position == length)
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2624 gtk_text_buffer_get_iter_at_offset(imhtml->text_buffer, &ins_iter,
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2625 length - 1);
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2626 }
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2627
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
2628 for(tags = gtk_text_iter_get_tags(&ins_iter);
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2629 tags != NULL; tags = tags->next)
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2630 {
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2631 GtkTextTag *tag = GTK_TEXT_TAG(tags->data);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2632 if(tag->name) {
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2633 if(g_ascii_strcasecmp(tag->name, "BOLD") == 0)
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2634 (*bold) = TRUE;
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2635 if(g_ascii_strcasecmp(tag->name, "ITALICS") == 0)
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2636 (*italic) = TRUE;
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2637 if(g_ascii_strcasecmp(tag->name, "UNDERLINE") == 0)
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2638 (*underline) = TRUE;
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2639 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2640 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2641 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2642
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2643 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2644 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2645 return imhtml->editable;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2646 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2647
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2648 gboolean gtk_imhtml_toggle_bold(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2649 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2650 GtkIMHtmlFormatSpan *span;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2651 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2652 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2653 GtkTextIter iter;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2654
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2655 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2656
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2657 if (!imhtml->edit.bold) {
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2658 span = g_new0(GtkIMHtmlFormatSpan, 1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2659 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2660 span->start_tag = g_strdup("<b>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2661 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2662 span->end_tag = g_strdup("</b>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2663 span->buffer = imhtml->text_buffer;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2664 span->tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), "BOLD");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2665 imhtml->edit.bold = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2666 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2667 } else {
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2668 GtkTextIter start;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2669 span = imhtml->edit.bold;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2670 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2671 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, span->start);
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2672 if (gtk_text_iter_equal(&start, &iter)) {
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2673 /* Format turned off before any text was entered, so remove the tag */
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2674 imhtml->format_spans = g_list_remove(imhtml->format_spans, span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2675 if (span->start_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2676 g_free(span->start_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2677 if (span->end_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2678 g_free(span->end_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2679 g_free(span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2680 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2681 imhtml->edit.bold = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2682 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2683
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2684 object = g_object_ref(G_OBJECT(imhtml));
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2685 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_BOLD);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2686 g_object_unref(object);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2687
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2688 return (imhtml->edit.bold != NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2689 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2690
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2691 gboolean gtk_imhtml_toggle_italic(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2692 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2693 GtkIMHtmlFormatSpan *span;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2694 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2695 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2696 GtkTextIter iter;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2697
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2698 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2699
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2700 if (!imhtml->edit.italic) {
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2701 span = g_new0(GtkIMHtmlFormatSpan, 1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2702 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2703 span->start_tag = g_strdup("<i>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2704 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2705 span->end_tag = g_strdup("</i>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2706 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2707 span->tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), "ITALIC");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2708 imhtml->edit.italic = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2709 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2710 } else {
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2711 GtkTextIter start;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2712 span = imhtml->edit.italic;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2713 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2714 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, span->start);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2715 if (gtk_text_iter_equal(&start, &iter)) { /* Format turned off before any text was entered, so remove the tag */
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2716 imhtml->format_spans = g_list_remove(imhtml->format_spans, span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2717 if (span->start_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2718 g_free(span->start_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2719 if (span->end_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2720 g_free(span->end_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2721 g_free(span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2722 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2723 imhtml->edit.italic = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2724 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2725
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2726 object = g_object_ref(G_OBJECT(imhtml));
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2727 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_ITALIC);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2728 g_object_unref(object);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2729
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2730 return imhtml->edit.italic != NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2731 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2732
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2733 gboolean gtk_imhtml_toggle_underline(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2734 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2735 GtkIMHtmlFormatSpan *span;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2736 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2737 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2738 GtkTextIter iter;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2739
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2740 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2741
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2742 if (!imhtml->edit.underline) {
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2743 span = g_new0(GtkIMHtmlFormatSpan, 1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2744 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2745 span->start_tag = g_strdup("<u>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2746 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2747 span->end_tag = g_strdup("</u>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2748 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2749 span->tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), "UNDERLINE");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2750 imhtml->edit.underline = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2751 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2752 } else {
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2753 GtkTextIter start;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2754 span = imhtml->edit.underline;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2755 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
8428
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2756 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, span->start);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2757 if (gtk_text_iter_equal(&start, &iter)) { /* Format turned off before any text was entered, so remove the tag */
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2758 imhtml->format_spans = g_list_remove(imhtml->format_spans, span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2759 if (span->start_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2760 g_free(span->start_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2761 if (span->end_tag)
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2762 g_free(span->end_tag);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2763 g_free(span);
8578d515f5bd [gaim-migrate @ 9158]
Sean Egan <seanegan@pidgin.im>
parents: 8427
diff changeset
2764 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2765 imhtml->edit.underline = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2766 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2767
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2768 object = g_object_ref(G_OBJECT(imhtml));
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2769 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_UNDERLINE);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2770 g_object_unref(object);
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
2771
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2772 return imhtml->edit.underline != NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2773 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2774
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2775 void gtk_imhtml_font_set_size(GtkIMHtml *imhtml, gint size)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2776 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2777 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2778 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2779 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2780 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2781
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2782 imhtml->edit.fontsize = size;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2783
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2784 if (imhtml->edit.sizespan) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2785 GtkTextIter iter2;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2786 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2787 if (gtk_text_iter_equal(&iter2, &iter))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2788 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2789 span = imhtml->edit.sizespan;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2790 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2791 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2792 if (size != -1) {
8250
e855dcce1fa0 [gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents: 8177
diff changeset
2793 span = g_malloc0(sizeof(GtkIMHtmlFormatSpan));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2794 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2795 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2796 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2797 span->tag = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2798 imhtml->edit.sizespan = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2799 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2800 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2801 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2802
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2803 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2804 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2805 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2806 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2807 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2808 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2809 if (imhtml->edit.fontsize == 1)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2810 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2811
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2812 imhtml->edit.fontsize--;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2813
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2814 if (imhtml->edit.sizespan) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2815 GtkTextIter iter2;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2816 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2817 if (gtk_text_iter_equal(&iter2, &iter))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2818 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2819 span = imhtml->edit.sizespan;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2820 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2821 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2822
8250
e855dcce1fa0 [gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents: 8177
diff changeset
2823 span = g_malloc0(sizeof(GtkIMHtmlFormatSpan));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2824 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2825 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2826 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2827 span->tag = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2828 imhtml->edit.sizespan = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2829 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2830 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2831
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2832 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2833 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2834 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2835 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2836 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2837 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2838 if (imhtml->edit.fontsize == MAX_FONT_SIZE)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2839 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2840
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2841 imhtml->edit.fontsize++;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2842 if (imhtml->edit.sizespan) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2843 GtkTextIter iter2;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2844 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2845 if (gtk_text_iter_equal(&iter2, &iter))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2846 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2847 span = imhtml->edit.sizespan;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2848 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2849 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2850
8250
e855dcce1fa0 [gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents: 8177
diff changeset
2851 span = g_malloc0(sizeof(GtkIMHtmlFormatSpan));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2852 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2853 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2854 span->tag = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2855 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2856 imhtml->edit.sizespan = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2857 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2858 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2859
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2860 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2861 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2862 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2863 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2864 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2865 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
2866 if (color) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2867 span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2868 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2869 span->start_tag = g_strdup_printf("<font color=\"%s\">", color);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2870 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2871 span->end_tag = g_strdup("</font>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2872 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2873 span->tag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "foreground", color, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2874 imhtml->edit.forecolor = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2875 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2876 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2877 span = imhtml->edit.forecolor;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2878 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2879 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2880 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2881
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2882
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2883 return imhtml->edit.forecolor != NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2884 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2885
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2886 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2887 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2888 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2889 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2890 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2891 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
2892 if (color) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2893 span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2894 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2895 span->start_tag = g_strdup_printf("<font back=\"%s\">", color);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2896 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2897 span->end_tag = g_strdup("</font>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2898 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2899 span->tag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "background", color, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2900 imhtml->edit.backcolor = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2901 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2902 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2903 span = imhtml->edit.backcolor;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2904 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2905 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2906 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2907 return imhtml->edit.backcolor != NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2908 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2909
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2910 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2911 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2912 GtkIMHtmlFormatSpan *span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2913 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2914 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2915 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
2916 if (face) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2917 span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2918 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2919 span->start_tag = g_strdup_printf("<font face=\"%s\">", face);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2920 span->end = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2921 span->end_tag = g_strdup("</font>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2922 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2923 span->tag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "family", face, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2924 imhtml->edit.fontface = span;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2925 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2926 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2927 span = imhtml->edit.fontface;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2928 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2929 imhtml->edit.fontface = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2930 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2931 return imhtml->edit.fontface != NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2932 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2933
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2934 void gtk_imhtml_insert_link(GtkIMHtml *imhtml, const char *url, const char *text)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2935 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2936 GtkIMHtmlFormatSpan *span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2937 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2938 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2939 GtkTextTag *tag, *linktag;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2940
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2941 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2942 g_object_set_data(G_OBJECT(tag), "link_url", g_strdup(url));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2943
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2944 linktag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), "LINK");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2945
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2946 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2947 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2948 span->buffer = imhtml->text_buffer;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2949 span->start_tag = g_strdup_printf("<a href=\"%s\">", url);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2950 span->end_tag = g_strdup("</a>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2951 g_signal_connect(G_OBJECT(tag), "event", G_CALLBACK(tag_event), g_strdup(url));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2952
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2953 gtk_text_buffer_insert_with_tags(imhtml->text_buffer, &iter, text, strlen(text), linktag, tag, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2954 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2955 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2956 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2957
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2958 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
2959 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2960 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2961 GtkTextIter iter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2962 GdkPixbuf *pixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2963 GdkPixbufAnimation *annipixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2964 GtkWidget *icon = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2965 GtkTextChildAnchor *anchor;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2966 char *unescaped = gaim_unescape_html(smiley);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2967
8515
3a00a6062845 [gaim-migrate @ 9253]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8506
diff changeset
2968 if (!imhtml->show_smileys) {
3a00a6062845 [gaim-migrate @ 9253]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8506
diff changeset
2969 gtk_text_buffer_insert_at_cursor(imhtml->text_buffer, smiley, strlen(smiley));
3a00a6062845 [gaim-migrate @ 9253]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8506
diff changeset
2970 return;
3a00a6062845 [gaim-migrate @ 9253]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8506
diff changeset
2971 }
3a00a6062845 [gaim-migrate @ 9253]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8506
diff changeset
2972
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2973 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2974 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, &iter);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2975 g_object_set_data(G_OBJECT(anchor), "text_tag", unescaped);
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2976
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2977 annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2978 if(annipixbuf) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2979 if(gdk_pixbuf_animation_is_static_image(annipixbuf)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2980 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2981 if(pixbuf)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2982 icon = gtk_image_new_from_pixbuf(pixbuf);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2983 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2984 icon = gtk_image_new_from_animation(annipixbuf);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2985 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2986 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2987
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2988 if (icon) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2989 gtk_widget_show(icon);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2990 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2991 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2992 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2993
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2994 int span_compare_begin(const GtkIMHtmlFormatSpan *a, const GtkIMHtmlFormatSpan *b, GtkTextBuffer *buffer)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2995 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2996 GtkTextIter ia, ib;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2997 gtk_text_buffer_get_iter_at_mark(buffer, &ia, a->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2998 gtk_text_buffer_get_iter_at_mark(buffer, &ib, b->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2999 return gtk_text_iter_compare(&ia, &ib);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3000 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3001
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3002 int span_compare_end(GtkIMHtmlFormatSpan *a, GtkIMHtmlFormatSpan *b)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3003 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3004 GtkTextIter ia, ib;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3005 gtk_text_buffer_get_iter_at_mark(a->buffer, &ia, a->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3006 gtk_text_buffer_get_iter_at_mark(b->buffer, &ib, b->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3007 /* The -1 here makes it so that if I have two spans that close at the same point, the
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3008 * span added second will be closed first, as in <b><i>Hello</i></b>. Without this,
8548
9dcba6838fb7 [gaim-migrate @ 9290]
Sean Egan <seanegan@pidgin.im>
parents: 8539
diff changeset
3009 * it would be <b><i>Hello</b></i> I took it out. It started breaking things, and I don't know why*/
9dcba6838fb7 [gaim-migrate @ 9290]
Sean Egan <seanegan@pidgin.im>
parents: 8539
diff changeset
3010 return gtk_text_iter_compare(&ia, &ib);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3011 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3012
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3013 /* 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
3014 * as smileys and IM images are represented by the Unicode "unknown" character. Handle them. Else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3015 * check the list of formatted strings, sorted by the position of the starting tags and apply them as
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3016 * needed. After applying the start tags, add the end tags to the "closers" list, which is sorted by
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3017 * location of ending tags. These get applied in a similar fashion. Finally, replace <, >, &, and "
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3018 * with their HTML equivilent. */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3019 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
3020 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3021 gunichar c;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3022 GtkIMHtmlFormatSpan *sspan = NULL, *espan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3023 GtkTextIter iter, siter, eiter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3024 GList *starters = imhtml->format_spans;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3025 GList *closers = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3026 GString *str = g_string_new("");
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3027
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3028 g_list_sort_with_data(starters, (GCompareDataFunc)span_compare_begin, imhtml->text_buffer);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3029
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3030 gtk_text_iter_order(start, end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3031 iter = *start;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3032
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3033
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3034 /* Initialize these to the end iter */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3035 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &siter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3036 eiter = siter;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3037
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
3038 if (starters) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3039 while (starters) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3040 GtkTextIter tagend;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3041 sspan = (GtkIMHtmlFormatSpan*)starters->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3042 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &siter, sspan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3043 if (gtk_text_iter_compare(&siter, start) > 0)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3044 break;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3045 if (sspan->end)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3046 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &tagend, sspan->end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3047 if (sspan->end == NULL || gtk_text_iter_compare(&tagend, start) > 0) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3048 str = g_string_append(str, sspan->start_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3049 closers = g_list_insert_sorted(closers, sspan, (GCompareFunc)span_compare_end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3050 espan = (GtkIMHtmlFormatSpan*)closers->data;
8365
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3051 /*
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3052 * When sending an IM, the following line causes the following warning:
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3053 * Gtk: file gtktextbuffer.c: line 1794
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3054 * (gtk_text_buffer_get_iter_at_mark): assertion `GTK_IS_TEXT_MARK (mark)' failed
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3055 *
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3056 * The callback path thingy to get here is:
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3057 * gtkconv.c, send(), "buf = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry));"
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3058 * gtkimhtml.c, gtk_imthml_get_markup(), "return gtk_imhtml_get_markup_range(imhtml, &start, &end);"
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3059 *
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3060 * I don't really know anything about gtkimhtml, but it almost seems like
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3061 * the line above this comments expects to find a closing html tag, but
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3062 * can't, for some reason. The warning depends on how much HTML I send
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3063 * in my message, kind of.
5931fed9e507 [gaim-migrate @ 9090]
Mark Doliner <markdoliner@pidgin.im>
parents: 8363
diff changeset
3064 */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3065 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3066 sspan = (GtkIMHtmlFormatSpan*)starters->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3067 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &siter, sspan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3068 starters = starters->next;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3069 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3070 if (!starters) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3071 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &siter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3072 sspan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3073 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3074 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3075
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3076 while ((c = gtk_text_iter_get_char(&iter)) != 0 && !gtk_text_iter_equal(&iter, end)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3077 if (c == 0xFFFC) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3078 GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(&iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3079 char *text = g_object_get_data(G_OBJECT(anchor), "text_tag");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3080 str = g_string_append(str, text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3081 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3082 while (gtk_text_iter_equal(&eiter, &iter)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3083 /* This is where we shall insert the ending tag of
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3084 * this format span */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3085 str = g_string_append(str, espan->end_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3086 closers = g_list_remove(closers, espan);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3087 if (!closers) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3088 espan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3089 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &eiter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3090 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3091 espan = (GtkIMHtmlFormatSpan*)closers->data;
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
3092 if (espan->end)
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
3093 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &eiter, espan->end);
8548
9dcba6838fb7 [gaim-migrate @ 9290]
Sean Egan <seanegan@pidgin.im>
parents: 8539
diff changeset
3094 else {
8429
19c62f0402c1 [gaim-migrate @ 9159]
Sean Egan <seanegan@pidgin.im>
parents: 8428
diff changeset
3095 gtk_text_iter_forward_to_end(&eiter);
8548
9dcba6838fb7 [gaim-migrate @ 9290]
Sean Egan <seanegan@pidgin.im>
parents: 8539
diff changeset
3096 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3097 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3098 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3099 while (gtk_text_iter_equal(&siter, &iter)) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3100 /* This is where we shall insert the starting tag of
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3101 * this format span */
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3102 str = g_string_append(str, sspan->start_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3103 if (sspan->end) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3104 closers = g_list_insert_sorted(closers, sspan, (GCompareFunc)span_compare_end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3105 espan = (GtkIMHtmlFormatSpan*)closers->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3106 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &eiter, espan->end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3107
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3108 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3109 starters = starters->next;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3110 if (starters) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3111 sspan = (GtkIMHtmlFormatSpan*)starters->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3112 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &siter, sspan->start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3113 } else {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3114 sspan = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3115 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &siter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3116 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3117
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3118 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3119
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3120 if (c == '<')
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3121 str = g_string_append(str, "&lt;");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3122 else if (c == '>')
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3123 str = g_string_append(str, "&gt;");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3124 else if (c == '&')
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3125 str = g_string_append(str, "&amp;");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3126 else if (c == '"')
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3127 str = g_string_append(str, "&quot;");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3128 else if (c == '\n')
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3129 str = g_string_append(str, "<br>");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3130 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3131 str = g_string_append_unichar(str, c);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3132 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3133 gtk_text_iter_forward_char(&iter);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3134 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3135 while (closers) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3136 GtkIMHtmlFormatSpan *span = (GtkIMHtmlFormatSpan*)closers->data;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3137 str = g_string_append(str, span->end_tag);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3138 closers = g_list_remove(closers, span);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3139
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3140 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3141 return g_string_free(str, FALSE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3142 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3143
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3144 void gtk_imhtml_close_tags(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3145 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3146
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3147 if (imhtml->edit.bold)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3148 gtk_imhtml_toggle_bold(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3149
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3150 if (imhtml->edit.italic)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3151 gtk_imhtml_toggle_italic(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3152
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3153 if (imhtml->edit.underline)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3154 gtk_imhtml_toggle_underline(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3155
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3156 if (imhtml->edit.forecolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3157 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3158
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3159 if (imhtml->edit.backcolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3160 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3161
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3162 if (imhtml->edit.fontface)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3163 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3164
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3165 if (imhtml->edit.sizespan)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3166 gtk_imhtml_font_set_size(imhtml, -1);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3167
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3168 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3169
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3170 char *gtk_imhtml_get_markup(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3171 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3172 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3173
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3174 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3175 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3176 return gtk_imhtml_get_markup_range(imhtml, &start, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3177 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3178
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3179 char *gtk_imhtml_get_text(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3180 {
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3181 GString *str = g_string_new("");
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3182 GtkTextIter iter, end;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3183 gunichar c;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3184
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3185 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3186 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3187
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3188 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
3189 if (c == 0xFFFC) {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3190 GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(&iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3191 char *text = g_object_get_data(G_OBJECT(anchor), "text_tag");
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3192 str = g_string_append(str, text);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3193 } else {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3194 g_string_append_unichar(str, c);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3195 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3196 gtk_text_iter_forward_char(&iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3197 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3198
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
3199 return g_string_free(str, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3200 }

mercurial