pidgin/gtkimhtml.c

Wed, 27 Jun 2007 18:52:12 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Wed, 27 Jun 2007 18:52:12 +0000
changeset 18371
4af4ad27f3c0
parent 18363
3e2a0ab4d6f8
child 18543
c590aed61aa4
permissions
-rw-r--r--

Removes the 'remove all buffer tags' function from gtkimhtml's close_tags() function. The problem was that the BACKGROUND tag is always at the end iter, and we don't want to remove that. The toggle functions called above it should do the trick of properly resetting everything, and it does seem to. Fixes #1034

1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
10297
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
2 * @file gtkimhtml.c GTK+ IMHtml
16254
eeb2bba4dc94 Rename the Doxygen group from gtkui to pidgin.
Richard Laager <rlaager@pidgin.im>
parents: 16144
diff changeset
3 * @ingroup pidgin
10297
b36800725b7a [gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents: 10243
diff changeset
4 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
5 * pidgin
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
7 * Pidgin is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8026
diff changeset
9 * source distribution.
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * under the terms of the GNU General Public License as published by
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * (at your option) any later version.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * GNU General Public License for more details.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 */
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
27 #ifdef HAVE_CONFIG_H
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
28 #include <config.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
29 #endif
18119
699d876e3db0 Include pidgin.h to make this compile.
Richard Laager <rlaager@pidgin.im>
parents: 18108
diff changeset
30
699d876e3db0 Include pidgin.h to make this compile.
Richard Laager <rlaager@pidgin.im>
parents: 18108
diff changeset
31 #include "pidgin.h"
18273
e61c53184c52 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18240
diff changeset
32 #include "internal.h"
18119
699d876e3db0 Include pidgin.h to make this compile.
Richard Laager <rlaager@pidgin.im>
parents: 18108
diff changeset
33
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
34 #include "debug.h"
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
35 #include "util.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #include "gtkimhtml.h"
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
37 #include "gtksourceiter.h"
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
38 #include "gtksourceundomanager.h"
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
39 #include "gtksourceview-marshal.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 #include <gtk/gtk.h>
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
41 #include <glib/gerror.h>
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
42 #include <gdk/gdkkeysyms.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 #include <string.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 #include <ctype.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #include <stdio.h>
4629
7ac4830de853 [gaim-migrate @ 4920]
Mark Doliner <markdoliner@pidgin.im>
parents: 4612
diff changeset
46 #include <stdlib.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 #include <math.h>
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
48 #ifdef HAVE_LANGINFO_CODESET
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
49 #include <langinfo.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
50 #include <locale.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
51 #endif
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
52 #ifdef _WIN32
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
53 #include <gdk/gdkwin32.h>
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
54 #include <windows.h>
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
55 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
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
15577
b8129373f65e More pidgin changes
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
59 /* GTK+ < 2.4.x hack, see pidgin.h for details. */
10062
144767f0643a [gaim-migrate @ 11037]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10016
diff changeset
60 #if (!GTK_CHECK_VERSION(2,4,0))
5105
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
8786
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
66 /* GTK+ 2.0 hack */
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
67 #if (!GTK_CHECK_VERSION(2,2,0))
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
68 #define gtk_widget_get_clipboard(x, y) gtk_clipboard_get(y)
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
69 #endif
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
70
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
71 static GtkTextViewClass *parent_class = NULL;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
72
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
73 struct scalable_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
74 GtkIMHtmlScalable *scalable;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
75 GtkTextMark *mark;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
76 };
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
77
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
78
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
79 struct im_image_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
80 int id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
81 GtkTextMark *mark;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
82 };
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
83
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
84 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
85 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
86 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
87 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
88 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
89 guint time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
90
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
91 static void preinsert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
92 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
93 static void delete_cb(GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextIter *end, GtkIMHtml *imhtml);
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
94 static void insert_ca_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextChildAnchor *arg2, gpointer user_data);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
95 static void gtk_imhtml_apply_tags_on_insert(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
96 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
97 static void gtk_imhtml_link_drop_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
98 static void gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
99 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark, GtkIMHtml *imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
100 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
101 static void paste_received_cb (GtkClipboard *clipboard, GtkSelectionData *selection_data, gpointer data);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
102 static void paste_plaintext_received_cb (GtkClipboard *clipboard, const gchar *text, gpointer data);
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
103 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
104 static void imhtml_toggle_bold(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
105 static void imhtml_toggle_italic(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
106 static void imhtml_toggle_strike(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
107 static void imhtml_toggle_underline(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
108 static void imhtml_font_grow(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
109 static void imhtml_font_shrink(GtkIMHtml *imhtml);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
110 static void imhtml_clear_formatting(GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
111
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
112 /* POINT_SIZE converts from AIM font sizes to a point size scale factor. */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
113 #define MAX_FONT_SIZE 7
10900
cc19dfd83910 [gaim-migrate @ 12621]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10899
diff changeset
114 #define POINT_SIZE(x) (_point_sizes [MIN ((x > 0 ? x : 1), MAX_FONT_SIZE) - 1])
14741
29b0a10d78ce [gaim-migrate @ 17428]
Sean Egan <seanegan@pidgin.im>
parents: 14519
diff changeset
115 static gdouble _point_sizes [] = { .85, .95, 1, 1.2, 1.44, 1.728, 2.0736};
2349
9832b57ded64 [gaim-migrate @ 2362]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2348
diff changeset
116
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
117 enum {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
118 TARGET_HTML,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
119 TARGET_UTF8_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
120 TARGET_COMPOUND_TEXT,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
121 TARGET_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
122 TARGET_TEXT
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
123 };
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
124
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
125 enum {
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
126 URL_CLICKED,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
127 BUTTONS_UPDATE,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
128 TOGGLE_FORMAT,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
129 CLEAR_FORMAT,
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
130 UPDATE_FORMAT,
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
131 MESSAGE_SEND,
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
132 UNDO,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
133 REDO,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
134 LAST_SIGNAL
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
135 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
136 static guint signals [LAST_SIGNAL] = { 0 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
137
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
138 static char *html_clipboard = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
139 static char *text_clipboard = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
140 GtkClipboard *clipboard_selection = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
141
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
142 static GtkTargetEntry selection_targets[] = {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
143 #ifndef _WIN32
8566
d174105077ff [gaim-migrate @ 9313]
Sean Egan <seanegan@pidgin.im>
parents: 8548
diff changeset
144 { "text/html", 0, TARGET_HTML },
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
145 #else
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
146 { "HTML Format", 0, TARGET_HTML },
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
147 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
148 { "UTF8_STRING", 0, TARGET_UTF8_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
149 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
150 { "STRING", 0, TARGET_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
151 { "TEXT", 0, TARGET_TEXT}};
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
152
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
153 static GtkTargetEntry link_drag_drop_targets[] = {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
154 GTK_IMHTML_DND_TARGETS
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
155 };
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
156
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
157 #ifdef _WIN32
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
158 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
159 clipboard_win32_to_html(char *clipboard) {
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
160 const char *header;
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
161 const char *begin, *end;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
162 gint start = 0;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
163 gint finish = 0;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
164 gchar *html;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
165 gchar **split;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
166 int clipboard_length = 0;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
167
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
168 #if 0 /* Debugging for Windows clipboard */
9467
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
169 FILE *fd;
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
170
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
171 purple_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
172
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
173 fd = g_fopen("e:\\purplecb.txt", "wb");
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
174 fprintf(fd, "%s", clipboard);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
175 fclose(fd);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
176 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
177
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
178 clipboard_length = strlen(clipboard);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
179
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
180 if (!(header = strstr(clipboard, "StartFragment:")) || (header - clipboard) >= clipboard_length)
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
181 return NULL;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
182 sscanf(header, "StartFragment:%d", &start);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
183
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
184 if (!(header = strstr(clipboard, "EndFragment:")) || (header - clipboard) >= clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
185 return NULL;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
186 sscanf(header, "EndFragment:%d", &finish);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
187
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
188 if (finish > clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
189 finish = clipboard_length;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
190
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
191 if (start > finish)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
192 start = finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
193
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
194 begin = clipboard + start;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
195
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
196 end = clipboard + finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
197
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
198 html = g_strndup(begin, end - begin);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
199
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
200 /* any newlines in the string will now be \r\n, so we need to strip out the \r */
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
201 split = g_strsplit(html, "\r\n", 0);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
202 g_free(html);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
203 html = g_strjoinv("\n", split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
204 g_strfreev(split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
205
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
206 html = g_strstrip(html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
207
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
208 #if 0 /* Debugging for Windows clipboard */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
209 purple_debug_info("imhtml clipboard", "HTML fragment: '%s'\n", html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
210 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
211
8707
024f6481c017 [gaim-migrate @ 9460]
Kevin Stange <kstange@pidgin.im>
parents: 8698
diff changeset
212 return html;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
213 }
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
214
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
215 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
216 clipboard_html_to_win32(char *html) {
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
217 int length;
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
218 GString *clipboard;
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
219 gchar *tmp;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
220
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
221 if (html == NULL)
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
222 return NULL;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
223
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
224 length = strlen(html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
225 clipboard = g_string_new ("Version:1.0\r\n");
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
226 g_string_append(clipboard, "StartHTML:0000000105\r\n");
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
227 tmp = g_strdup_printf("EndHTML:%010d\r\n", 147 + length);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
228 g_string_append(clipboard, tmp);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
229 g_free(tmp);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
230 g_string_append(clipboard, "StartFragment:0000000127\r\n");
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
231 tmp = g_strdup_printf("EndFragment:%010d\r\n", 127 + length);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
232 g_string_append(clipboard, tmp);
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
233 g_free(tmp);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
234 g_string_append(clipboard, "<!--StartFragment-->\r\n");
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
235 g_string_append(clipboard, html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
236 g_string_append(clipboard, "\r\n<!--EndFragment-->");
14101
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
237
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
238 return g_string_free(clipboard, FALSE);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
239 }
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
240
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
241 static gboolean clipboard_paste_html_win32(GtkIMHtml *imhtml) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
242 gboolean pasted = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
243
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
244 /* Win32 clipboard format value, and functions to convert back and
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
245 * forth between HTML and the clipboard format.
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
246 */
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
247 static UINT win_html_fmt = 0;
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
248
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
249 /* Register HTML Format as desired clipboard format */
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
250 if (!win_html_fmt)
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
251 win_html_fmt = RegisterClipboardFormat("HTML Format");
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
252
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
253 if (gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml))
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
254 && IsClipboardFormatAvailable(win_html_fmt)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
255 gboolean error_reading_clipboard = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
256 HWND hwnd = GDK_WINDOW_HWND(GTK_WIDGET(imhtml)->window);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
257
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
258 if (OpenClipboard(hwnd)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
259 HGLOBAL hdata = GetClipboardData(win_html_fmt);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
260 if (hdata == NULL) {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
261 if (GetLastError() != ERROR_SUCCESS)
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
262 error_reading_clipboard = TRUE;
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
263 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
264 char *buffer = GlobalLock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
265 if (buffer == NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
266 error_reading_clipboard = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
267 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
268 char *text = clipboard_win32_to_html(
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
269 buffer);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
270 imhtml_paste_insert(imhtml, text,
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
271 FALSE);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
272 g_free(text);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
273 pasted = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
274 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
275 GlobalUnlock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
276 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
277
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
278 CloseClipboard();
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
279 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
280 error_reading_clipboard = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
281 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
282
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
283 if (error_reading_clipboard) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
284 gchar *err_msg = g_win32_error_message(GetLastError());
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
285 purple_debug_info("html clipboard",
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
286 "Unable to read clipboard data: %s\n",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
287 err_msg ? err_msg : "Unknown Error");
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
288 g_free(err_msg);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
289 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
290 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
291
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
292 return pasted;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
293 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
294 #endif
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
295
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
296 static GtkSmileyTree*
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
297 gtk_smiley_tree_new ()
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
298 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
299 return g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
300 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
301
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
302 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
303 gtk_smiley_tree_insert (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
304 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
305 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
306 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
307 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
308
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
309 if (!(*x))
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
310 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
311
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
312 do {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
313 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
314 gint index;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
315
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
316 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
317 t->values = g_string_new ("");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
318
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
319 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
320 if (!pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
321 t->values = g_string_append_c (t->values, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
322 index = t->values->len - 1;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
323 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
324 t->children [index] = g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
325 } else
7386
9cccb3792018 [gaim-migrate @ 7981]
Luke Schierer <lschiere@pidgin.im>
parents: 7384
diff changeset
326 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
327
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
328 t = t->children [index];
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
329
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
330 x++;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
331 } while (*x);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
332
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
333 t->image = smiley;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
334 }
4041
6336d3d3785e [gaim-migrate @ 4249]
Sean Egan <seanegan@pidgin.im>
parents: 4032
diff changeset
335
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
336
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
337 static void
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
338 gtk_smiley_tree_destroy (GtkSmileyTree *tree)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
339 {
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
340 GSList *list = g_slist_prepend (NULL, tree);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
341
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
342 while (list) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
343 GtkSmileyTree *t = list->data;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
344 gsize i;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
345 list = g_slist_remove(list, t);
7384
c2ed41f62aae [gaim-migrate @ 7979]
Nathan Walp <nwalp@pidgin.im>
parents: 7371
diff changeset
346 if (t && t->values) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
347 for (i = 0; i < t->values->len; i++)
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
348 list = g_slist_prepend (list, t->children [i]);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
349 g_string_free (t->values, TRUE);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
350 g_free (t->children);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
351 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
352 g_free (t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
353 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
354 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
355
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
356 static void gtk_size_allocate_cb(GtkIMHtml *widget, GtkAllocation *alloc, gpointer user_data)
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
357 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
358 GdkRectangle rect;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
359 int xminus;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
360
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
361 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &rect);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
362 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
363 GList *iter = GTK_IMHTML(widget)->scalables;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
364
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
365 xminus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(widget)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
366 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(widget));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
367
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
368 while(iter){
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
369 struct scalable_data *sd = iter->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
370 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
371 scale->scale(scale, rect.width - xminus, rect.height);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
372
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
373 iter = iter->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
374 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
375 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
376
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
377 widget->old_rect = rect;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
378 return;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
379 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
380
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
381 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
382 gtk_imhtml_tip_paint (GtkIMHtml *imhtml)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
383 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
384 PangoLayout *layout;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
385
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
386 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
387
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
388 layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
389
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
390 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
391 GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, imhtml->tip_window,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
392 "tooltip", 0, 0, -1, -1);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
393
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
394 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
395 FALSE, NULL, imhtml->tip_window, NULL, 4, 4, layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
396
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
397 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
398 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
399 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
400
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
401 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
402 gtk_imhtml_tip (gpointer data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
403 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
404 GtkIMHtml *imhtml = data;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
405 PangoFontMetrics *font_metrics;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
406 PangoLayout *layout;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
407 PangoFont *font;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
408
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
409 gint gap, x, y, h, w, scr_w, baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
410
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
411 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
412
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
413 if (!imhtml->tip || !GTK_WIDGET_DRAWABLE (GTK_WIDGET(imhtml))) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
414 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
415 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
416 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
417
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
418 if (imhtml->tip_window){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
419 gtk_widget_destroy (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
420 imhtml->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
421 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
422
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
423 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
424 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
425 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
426 gtk_window_set_resizable (GTK_WINDOW (imhtml->tip_window), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
427 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
428 g_signal_connect_swapped (G_OBJECT (imhtml->tip_window), "expose_event",
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
429 G_CALLBACK (gtk_imhtml_tip_paint), imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
430
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
431 gtk_widget_ensure_style (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
432 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
433 font = pango_context_load_font(pango_layout_get_context(layout),
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
434 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
435
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
436 if (font == NULL) {
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
437 char *tmp = pango_font_description_to_string(
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
438 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
439
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
440 purple_debug(PURPLE_DEBUG_ERROR, "gtk_imhtml_tip",
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
441 "pango_context_load_font() couldn't load font: '%s'\n",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
442 tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
443 g_free(tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
444
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
445 return FALSE;
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
446 }
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
447
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
448 font_metrics = pango_font_get_metrics(font, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
449
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
450 pango_layout_get_pixel_size(layout, &scr_w, NULL);
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
451 gap = PANGO_PIXELS((pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
452 pango_font_metrics_get_descent(font_metrics))/ 4);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
453
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
454 if (gap < 2)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
455 gap = 2;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
456 baseline_skip = PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
457 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
458 w = 8 + scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
459 h = 8 + baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
460
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
461 gdk_window_get_pointer (NULL, &x, &y, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
462 if (GTK_WIDGET_NO_WINDOW (GTK_WIDGET(imhtml)))
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
463 y += GTK_WIDGET(imhtml)->allocation.y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
464
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
465 scr_w = gdk_screen_width();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
466
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
467 x -= ((w >> 1) + 4);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
468
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
469 if ((x + w) > scr_w)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
470 x -= (x + w) - scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
471 else if (x < 0)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
472 x = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
473
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
474 y = y + PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
475 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
476
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
477 gtk_widget_set_size_request (imhtml->tip_window, w, h);
15865
e046bdae3964 Move the tooltip window before showing the tooltip to avoid a transient
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15577
diff changeset
478 gtk_window_move (GTK_WINDOW(imhtml->tip_window), x, y);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
479 gtk_widget_show (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
480
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
481 pango_font_metrics_unref(font_metrics);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
482 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
483
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
484 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
485 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
486
11844
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
487 static gboolean
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
488 gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
489 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
490 GtkTextIter iter;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
491 GdkWindow *win = event->window;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
492 int x, y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
493 char *tip = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
494 GSList *tags = NULL, *templist = NULL;
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
495 GdkColor *norm, *pre;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
496 GtkTextTag *tag = NULL, *oldprelit_tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
497
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
498 oldprelit_tag = GTK_IMHTML(imhtml)->prelit_tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
499
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
500 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
501 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET,
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
502 event->x, event->y, &x, &y);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
503 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
504 tags = gtk_text_iter_get_tags(&iter);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
505
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
506 templist = tags;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
507 while (templist) {
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
508 tag = templist->data;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
509 tip = g_object_get_data(G_OBJECT(tag), "link_url");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
510 if (tip)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
511 break;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
512 templist = templist->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
513 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
514
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
515 if (tip) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
516 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-prelight-color", &pre, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
517 GTK_IMHTML(imhtml)->prelit_tag = tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
518 if (tag != oldprelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
519 if (pre)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
520 g_object_set(G_OBJECT(tag), "foreground-gdk", pre, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
521 else
12253
5025434b18f8 [gaim-migrate @ 14555]
Mark Doliner <markdoliner@pidgin.im>
parents: 12230
diff changeset
522 g_object_set(G_OBJECT(tag), "foreground", "#70a0ff", NULL);
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
523 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
524 } else {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
525 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
526 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
527
10834
5fd1dfd395e8 [gaim-migrate @ 12505]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10826
diff changeset
528 if ((oldprelit_tag != NULL) && (GTK_IMHTML(imhtml)->prelit_tag != oldprelit_tag)) {
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
529 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
530 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
531 g_object_set(G_OBJECT(oldprelit_tag), "foreground-gdk", norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
532 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
533 g_object_set(G_OBJECT(oldprelit_tag), "foreground", "blue", NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
534 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
535
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
536 if (GTK_IMHTML(imhtml)->tip) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
537 if ((tip == GTK_IMHTML(imhtml)->tip)) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
538 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
539 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
540 /* 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
541 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
542 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
543 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
544 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
545 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
546 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
547 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
548 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
549 if (GTK_IMHTML(imhtml)->tip_timer)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
550 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
551 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
552 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
553
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
554 if (tip){
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
555 if (!GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
556 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
557 GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
558 gtk_imhtml_tip, imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
559 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
560
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
561 GTK_IMHTML(imhtml)->tip = tip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
562 g_slist_free(tags);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
563 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
564 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
565
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
566 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
567 gtk_enter_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
568 {
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
569 if (GTK_IMHTML(imhtml)->editable)
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
570 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
571 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
572 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
573 GTK_IMHTML(imhtml)->text_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
574 else
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
575 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
576 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
577 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
578 GTK_IMHTML(imhtml)->arrow_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
579
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
580 /* propagate the event normally */
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
581 return FALSE;
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
582 }
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
583
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
584 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
585 gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
586 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
587 /* when leaving the widget, clear any current & pending tooltips and restore the cursor */
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
588 if (GTK_IMHTML(imhtml)->prelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
589 GdkColor *norm;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
590 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
591 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
592 g_object_set(G_OBJECT(GTK_IMHTML(imhtml)->prelit_tag), "foreground-gdk", norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
593 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
594 g_object_set(G_OBJECT(GTK_IMHTML(imhtml)->prelit_tag), "foreground", "blue", NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
595 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
596 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
597
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
598 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
599 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
600 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
601 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
602 if (GTK_IMHTML(imhtml)->tip_timer) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
603 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
604 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
605 }
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
606 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
607 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
608 GTK_TEXT_WINDOW_TEXT), NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
609
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
610 /* propagate the event normally */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
611 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
612 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
613
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
614 #if (!GTK_CHECK_VERSION(2,2,0))
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
615 /*
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
616 * XXX - This should be removed eventually.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
617 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
618 * This function exists to work around a gross bug in GtkTextView.
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
619 * 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
620 * el program go boom.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
621 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
622 * 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
623 * http://bugzilla.gnome.org/show_bug.cgi?id=107939
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
624 */
10849
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
625 static gboolean
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
626 gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
627 {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
628 if (event->state & GDK_CONTROL_MASK) {
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
629 switch (event->keyval) {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
630 case 'a':
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
631 case GDK_Home:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
632 case GDK_End:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
633 return TRUE;
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
634 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
635 }
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
636 return FALSE;
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
637 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
638 #endif /* !(GTK+ >= 2.2.0) */
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
639
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
640 static gint
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
641 gtk_imhtml_expose_event (GtkWidget *widget,
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
642 GdkEventExpose *event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
643 {
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
644 GtkTextIter start, end, cur;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
645 int buf_x, buf_y;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
646 GdkRectangle visible_rect;
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
647 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
648 GdkColor gcolor;
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
649
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
650 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
651 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
652 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
653 visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
654 visible_rect.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
655 &visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
656 &visible_rect.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
657
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
658 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
659 event->area.x, event->area.y, &buf_x, &buf_y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
660
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
661 if (GTK_IMHTML(widget)->editable || GTK_IMHTML(widget)->wbfo) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
662
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
663 if (GTK_IMHTML(widget)->edit.background) {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
664 gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
665 gdk_gc_set_rgb_fg_color(gc, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
666 } else {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
667 gdk_gc_set_rgb_fg_color(gc, &(widget->style->base[GTK_WIDGET_STATE(widget)]));
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
668 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
669
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
670 gdk_draw_rectangle(event->window,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
671 gc,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
672 TRUE,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
673 visible_rect.x, visible_rect.y, visible_rect.width, visible_rect.height);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
674 gdk_gc_unref(gc);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
675
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
676 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
677 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
678 (widget, event);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
679 return FALSE;
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
680
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
681 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
682
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
683 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
684 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
685 buf_x + event->area.width, buf_y + event->area.height);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
686
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
687
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
688
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
689 cur = start;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
690
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
691 while (gtk_text_iter_in_range(&cur, &start, &end)) {
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
692 GSList *tags = gtk_text_iter_get_tags(&cur);
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
693 GSList *l;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
694
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
695 for (l = tags; l; l = l->next) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
696 GtkTextTag *tag = l->data;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
697 GdkRectangle rect;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
698 GdkRectangle tag_area;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
699 const char *color;
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
700
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
701 if (strncmp(tag->name, "BACKGROUND ", 11))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
702 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
703
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
704 if (gtk_text_iter_ends_tag(&cur, tag))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
705 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
706
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
707 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
708 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
709 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
710 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
711 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
712 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
713 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
714 rect.x = visible_rect.x;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
715 rect.y = tag_area.y;
11768
b45e26d7a4c9 [gaim-migrate @ 14059]
Gary Kramlich <grim@reaperworld.com>
parents: 11760
diff changeset
716 rect.width = visible_rect.width;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
717
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
718 do
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
719 gtk_text_iter_forward_to_tag_toggle(&cur, tag);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
720 while (!gtk_text_iter_is_end(&cur) && gtk_text_iter_begins_tag(&cur, tag));
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
721
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
722 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
723 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
724 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
725 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
726 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
727 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
728 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
729
11760
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
730
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
731 rect.height = tag_area.y + tag_area.height - rect.y
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
732 + gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(widget));
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
733
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
734 color = tag->name + 11;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
735
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
736 if (!gdk_color_parse(color, &gcolor)) {
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
737 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
738 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
739 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
740 tmp[7] = '\0';
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
741 if (!gdk_color_parse(tmp, &gcolor))
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
742 gdk_color_parse("white", &gcolor);
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
743 }
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
744 gdk_gc_set_rgb_fg_color(gc, &gcolor);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
745
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
746 gdk_draw_rectangle(event->window,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
747 gc,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
748 TRUE,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
749 rect.x, rect.y, rect.width, rect.height);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
750 gtk_text_iter_backward_char(&cur); /* go back one, in case the end is the begining is the end
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
751 * note that above, we always moved cur ahead by at least
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
752 * one character */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
753 break;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
754 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
755
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
756 g_slist_free(tags);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
757
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
758 /* loop until another tag begins, or no tag begins */
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
759 while (gtk_text_iter_forward_to_tag_toggle(&cur, NULL) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
760 !gtk_text_iter_is_end(&cur) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
761 !gtk_text_iter_begins_tag(&cur, NULL));
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
762 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
763
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
764 gdk_gc_unref(gc);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
765
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
766 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
767 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
768 (widget, event);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
769
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
770 return FALSE;
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
771 }
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
772
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
773
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
774 static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
775 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
776 GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
777
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
778 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
779
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
780 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
781
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
782 static void clear_formatting_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
783 {
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
784 gtk_imhtml_clear_formatting(imhtml);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
785 }
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
786
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
787 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
788 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
789 GtkWidget *menuitem;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
790
12635
5b2fbc3da55b [gaim-migrate @ 14971]
Richard Laager <rlaager@pidgin.im>
parents: 12605
diff changeset
791 menuitem = gtk_menu_item_new_with_mnemonic(_("Paste as Plain _Text"));
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
792 gtk_widget_show(menuitem);
14970
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
793 /*
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
794 * TODO: gtk_clipboard_wait_is_text_available() iterates the glib
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
795 * mainloop, which tends to be a source of bugs. It would
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
796 * be good to audit this or change it to not wait.
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
797 */
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
798 gtk_widget_set_sensitive(menuitem,
12836
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
799 (imhtml->editable &&
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
800 gtk_clipboard_wait_is_text_available(
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
801 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD))));
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
802 /* put it after "Paste" */
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
803 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 3);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
804
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
805 g_signal_connect(G_OBJECT(menuitem), "activate",
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
806 G_CALLBACK(paste_unformatted_cb), imhtml);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
807
13539
8036a635a316 [gaim-migrate @ 15915]
Richard Laager <rlaager@pidgin.im>
parents: 13340
diff changeset
808 menuitem = gtk_menu_item_new_with_mnemonic(_("_Reset formatting"));
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
809 gtk_widget_show(menuitem);
13340
e18166659513 [gaim-migrate @ 15709]
Richard Laager <rlaager@pidgin.im>
parents: 13336
diff changeset
810 gtk_widget_set_sensitive(menuitem, imhtml->editable);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
811 /* put it after Delete */
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
812 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 5);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
813
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
814 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(clear_formatting_cb), imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
815 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
816
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
817 static char *
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
818 ucs2_order(gboolean swap)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
819 {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
820 gboolean be;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
821
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
822 be = G_BYTE_ORDER == G_BIG_ENDIAN;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
823 be = swap ? be : !be;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
824
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
825 if (be)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
826 return "UCS-2BE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
827 else
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
828 return "UCS-2LE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
829
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
830 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
831
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
832 /* Convert from UCS-2 to UTF-8, stripping the BOM if one is present.*/
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
833 static gchar *
11586
9e221fc0e2f8 [gaim-migrate @ 13856]
Nathan Walp <nwalp@pidgin.im>
parents: 11572
diff changeset
834 ucs2_to_utf8_with_bom_check(gchar *data, guint len) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
835 char *fromcode = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
836 GError *error = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
837 guint16 c;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
838 gchar *utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
839
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
840 /*
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
841 * Unicode Techinical Report 20
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
842 * ( http://www.unicode.org/unicode/reports/tr20/ ) says to treat an
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
843 * initial 0xfeff (ZWNBSP) as a byte order indicator so that is
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
844 * what we do. If there is no indicator assume it is in the default
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
845 * order
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
846 */
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
847
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
848 memcpy(&c, data, 2);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
849 switch (c) {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
850 case 0xfeff:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
851 case 0xfffe:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
852 fromcode = ucs2_order(c == 0xfeff);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
853 data += 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
854 len -= 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
855 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
856 default:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
857 fromcode = "UCS-2";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
858 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
859 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
860
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
861 utf8_ret = g_convert(data, len, "UTF-8", fromcode, NULL, NULL, &error);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
862
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
863 if (error) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
864 purple_debug_warning("gtkimhtml", "g_convert error: %s\n", error->message);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
865 g_error_free(error);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
866 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
867 return utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
868 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
869
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
870
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
871 static void gtk_imhtml_clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, GtkIMHtml *imhtml) {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
872 char *text = NULL;
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
873 gboolean primary = (clipboard != clipboard_selection);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
874 GtkTextIter start, end;
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
875 GtkTextMark *sel = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
876 GtkTextMark *ins = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
877
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
878 if (primary) {
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
879 ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
880 sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
881 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
882 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
883 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
884
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
885 if (info == TARGET_HTML) {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
886 char *selection;
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
887 #ifndef _WIN32
8907
17b9da22de1e [gaim-migrate @ 9677]
Gary Kramlich <grim@pidgin.im>
parents: 8890
diff changeset
888 gsize len;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
889 GString *str = g_string_new(NULL);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
890 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
891 text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
10013
6927760cd4fd [gaim-migrate @ 10930]
Gary Kramlich <grim@pidgin.im>
parents: 9924
diff changeset
892 } else
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
893 text = html_clipboard;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
894
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
895 /* 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
896 str = g_string_append_unichar(str, 0xfeff);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
897 str = g_string_append(str, text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
898 str = g_string_append_unichar(str, 0x0000);
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
899 selection = g_convert(str->str, str->len, "UCS-2", "UTF-8", NULL, &len, NULL);
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
900 gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), 16, (const guchar *)selection, len);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
901 g_string_free(str, TRUE);
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
902 #else
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
903 selection = clipboard_html_to_win32(imhtml->clipboard_html_string);
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
904 gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE), 8, (const guchar *)selection, strlen(selection));
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
905 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
906 g_free(selection);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
907 } else {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
908 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
909 text = gtk_imhtml_get_text(imhtml, &start, &end);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
910 } else
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
911 text = text_clipboard;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
912 gtk_selection_data_set_text(selection_data, text, strlen(text));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
913 }
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
914 if (primary) /* This was allocated here */
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
915 g_free(text);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
916 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
917
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
918 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
919 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
920 GtkTextIter insert;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
921 GtkTextIter selection_bound;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
922
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
923 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &insert,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
924 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
925 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
926 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
927
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
928 if (!gtk_text_iter_equal (&insert, &selection_bound))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
929 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
930 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
931 &insert);
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
932 }
7742
0289c206bcff [gaim-migrate @ 8387]
Sean Egan <seanegan@pidgin.im>
parents: 7740
diff changeset
933
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
934 static void gtk_imhtml_clipboard_clear (GtkClipboard *clipboard, GtkSelectionData *sel_data,
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
935 guint info, gpointer user_data_or_owner)
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
936 {
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
937 clipboard_selection = NULL;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
938 }
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
939
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
940 static void copy_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
941 {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
942 GtkTextIter start, end;
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
943 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
944 if (!clipboard_selection)
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
945 clipboard_selection = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
946 gtk_clipboard_set_with_owner(clipboard_selection,
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
947 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
948 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
949 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml));
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
950
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
951 g_free(imhtml->clipboard_html_string);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
952 g_free(imhtml->clipboard_text_string);
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
953
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
954 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
955 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
956
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
957 text_clipboard = imhtml->clipboard_text_string;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
958 html_clipboard = imhtml->clipboard_html_string;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
959
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
960 }
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
961
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
962 g_signal_stop_emission_by_name(imhtml, "copy-clipboard");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
963 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
964
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
965 static void cut_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
966 {
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
967 GtkTextIter start, end;
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
968 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
969 if (!clipboard_selection)
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
970 clipboard_selection = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
971 gtk_clipboard_set_with_owner(clipboard_selection,
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
972 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
973 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
974 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml));
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
975
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
976 g_free(imhtml->clipboard_html_string);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
977 g_free(imhtml->clipboard_text_string);
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
978
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
979 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
980 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
981
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
982 text_clipboard = imhtml->clipboard_text_string;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
983 html_clipboard = imhtml->clipboard_html_string;
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
984
17288
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
985 if (imhtml->editable)
ffda972c2fb4 Ignore copy/cut requests when there is no selection instead of clearing the clipboard. This is consistent with the rest of how GTK+ works. Fixes #1030
Daniel Atallah <datallah@pidgin.im>
parents: 17189
diff changeset
986 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
987 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
988
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
989 g_signal_stop_emission_by_name(imhtml, "cut-clipboard");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
990 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
991
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
992 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
993 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
994 GtkTextIter iter;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
995 GtkIMHtmlOptions flags = plaintext ? 0 : (GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_COMMENTS);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
996
9028
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
997 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
998 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
999
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1000 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer));
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1001 if (!imhtml->wbfo && !plaintext)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1002 gtk_imhtml_close_tags(imhtml, &iter);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1003
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1004 gtk_imhtml_insert_html_at_iter(imhtml, text, flags, &iter);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1005 gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "insert", &iter);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1006 gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(imhtml), gtk_text_buffer_get_insert(imhtml->text_buffer),
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1007 0, FALSE, 0.0, 0.0);
18363
3e2a0ab4d6f8 Re-arrange a few lines in gtkimhtml's paste function so that we reset formatting after moving the cursor to the new location. Fixes #1198
Sean Egan <seanegan@pidgin.im>
parents: 18283
diff changeset
1008 if (!imhtml->wbfo && !plaintext)
3e2a0ab4d6f8 Re-arrange a few lines in gtkimhtml's paste function so that we reset formatting after moving the cursor to the new location. Fixes #1198
Sean Egan <seanegan@pidgin.im>
parents: 18283
diff changeset
1009 gtk_imhtml_close_tags(imhtml, &iter);
3e2a0ab4d6f8 Re-arrange a few lines in gtkimhtml's paste function so that we reset formatting after moving the cursor to the new location. Fixes #1198
Sean Egan <seanegan@pidgin.im>
parents: 18283
diff changeset
1010
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1011 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1012
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1013 static void paste_plaintext_received_cb (GtkClipboard *clipboard, const gchar *text, gpointer data)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1014 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1015 char *tmp;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1016
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1017 if (text == NULL)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1018 return;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1019
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1020 tmp = g_markup_escape_text(text, -1);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1021 imhtml_paste_insert(data, tmp, TRUE);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1022 g_free(tmp);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1023 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1024
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1025 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
1026 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1027 char *text;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1028 GtkIMHtml *imhtml = data;
7809
f4f6ac8d112a [gaim-migrate @ 8456]
Nathan Walp <nwalp@pidgin.im>
parents: 7808
diff changeset
1029
8123
e09c75f511c2 [gaim-migrate @ 8827]
Mark Doliner <markdoliner@pidgin.im>
parents: 8120
diff changeset
1030 if (!gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml)))
8105
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1031 return;
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1032
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1033 if (selection_data->length < 0) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1034 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1035 return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1036 } else {
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1037 #if 0
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1038 /* Here's some debug code, for figuring out what sent to us over the clipboard. */
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1039 {
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1040 int i;
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1041
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1042 purple_debug_misc("gtkimhtml", "In paste_received_cb():\n\tformat = %d, length = %d\n\t",
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1043 selection_data->format, selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1044
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1045 for (i = 0; i < (/*(selection_data->format / 8) **/ selection_data->length); i++) {
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1046 if ((i % 70) == 0)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1047 printf("\n\t");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1048 if (selection_data->data[i] == '\0')
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1049 printf(".");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1050 else
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1051 printf("%c", selection_data->data[i]);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1052 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1053 printf("\n");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1054 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1055 #endif
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1056 text = g_malloc(selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1057 memcpy(text, selection_data->data, selection_data->length);
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1058 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1059
8869
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1060 if (selection_data->length >= 2 &&
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1061 (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) {
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1062 /* This is UCS-2 */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1063 char *utf8 = ucs2_to_utf8_with_bom_check(text, selection_data->length);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1064 g_free(text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1065 text = utf8;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1066 if (!text) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1067 purple_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in paste_received_cb\n");
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1068 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1069 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1070 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1071
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1072 if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1073 purple_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in paste_received_cb\n");
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1074 g_free(text);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1075 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1076 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1077
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1078 imhtml_paste_insert(imhtml, text, FALSE);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1079 g_free(text);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1080 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1081
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1082 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1083 {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1084 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1085 /* If we're on windows, let's see if we can get data from the HTML Format
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1086 clipboard before we try to paste from the GTK buffer */
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1087 if (!clipboard_paste_html_win32(imhtml)) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1088 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1089 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
1090 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1091 paste_received_cb, imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1092 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1093 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1094 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1095 g_signal_stop_emission_by_name(imhtml, "paste-clipboard");
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1096 }
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1097
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1098 static void imhtml_realized_remove_primary(GtkIMHtml *imhtml, gpointer unused)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1099 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1100 gtk_text_buffer_remove_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1101 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1102
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1103 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1104
8740
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1105 static void imhtml_destroy_add_primary(GtkIMHtml *imhtml, gpointer unused)
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1106 {
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1107 gtk_text_buffer_add_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1108 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1109 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1110
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1111 static void mark_set_so_update_selection_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1112 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1113 if (gtk_text_buffer_get_selection_bounds(buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1114 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1115 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1116 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1117 (GtkClipboardClearFunc)gtk_imhtml_primary_clipboard_clear, G_OBJECT(imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1118 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1119 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1120
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1121 static gboolean gtk_imhtml_button_press_event(GtkIMHtml *imhtml, GdkEventButton *event, gpointer unused)
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1122 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1123 if (event->button == 2) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1124 int x, y;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1125 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1126 GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1127
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1128 if (!imhtml->editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1129 return FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1130
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1131 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1132 GTK_TEXT_WINDOW_TEXT,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1133 event->x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1134 event->y,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1135 &x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1136 &y);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1137 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1138 gtk_text_buffer_place_cursor(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1139
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1140 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1141 paste_received_cb, imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1142
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1143 return TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1144 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1145
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1146 return FALSE;
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1147 }
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1148
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1149 static void
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1150 gtk_imhtml_undo(GtkIMHtml *imhtml) {
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1151 g_return_if_fail(GTK_IS_IMHTML(imhtml));
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1152 g_return_if_fail(imhtml->editable);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1153
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1154 gtk_source_undo_manager_undo(imhtml->undo_manager);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1155 }
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1156
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1157 static void
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1158 gtk_imhtml_redo(GtkIMHtml *imhtml) {
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1159 g_return_if_fail(GTK_IS_IMHTML(imhtml));
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1160 g_return_if_fail(imhtml->editable);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1161
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1162 gtk_source_undo_manager_redo(imhtml->undo_manager);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1163
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1164 }
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1165
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1166 static gboolean imhtml_message_send(GtkIMHtml *imhtml)
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1167 {
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1168 return FALSE;
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1169 }
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1170
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1171 static void imhtml_toggle_format(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1172 {
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1173 /* since this function is the handler for the formatting keystrokes,
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1174 we need to check here that the formatting attempted is permitted */
11275
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
1175 buttons &= imhtml->format_functions;
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1176
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1177 switch (buttons) {
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1178 case GTK_IMHTML_BOLD:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1179 imhtml_toggle_bold(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1180 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1181 case GTK_IMHTML_ITALIC:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1182 imhtml_toggle_italic(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1183 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1184 case GTK_IMHTML_UNDERLINE:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1185 imhtml_toggle_underline(imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1186 break;
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1187 case GTK_IMHTML_STRIKE:
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1188 imhtml_toggle_strike(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1189 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1190 case GTK_IMHTML_SHRINK:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1191 imhtml_font_shrink(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1192 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1193 case GTK_IMHTML_GROW:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1194 imhtml_font_grow(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1195 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1196 default:
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1197 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1198 }
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1199 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1200
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1201 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1202 gtk_imhtml_finalize (GObject *object)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1203 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1204 GtkIMHtml *imhtml = GTK_IMHTML(object);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1205 GList *scalables;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1206 GSList *l;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1207
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1208 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1209 g_source_remove(imhtml->scroll_src);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1210 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1211 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1212
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1213 g_hash_table_destroy(imhtml->smiley_data);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1214 gtk_smiley_tree_destroy(imhtml->default_smilies);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1215 gdk_cursor_unref(imhtml->hand_cursor);
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1216 gdk_cursor_unref(imhtml->arrow_cursor);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1217 gdk_cursor_unref(imhtml->text_cursor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1218
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1219 if(imhtml->tip_window){
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1220 gtk_widget_destroy(imhtml->tip_window);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1221 }
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1222 if(imhtml->tip_timer)
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1223 gtk_timeout_remove(imhtml->tip_timer);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1224
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1225 for(scalables = imhtml->scalables; scalables; scalables = scalables->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1226 struct scalable_data *sd = scalables->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1227 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1228 scale->free(scale);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1229 g_free(sd);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1230 }
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
1231
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1232 for (l = imhtml->im_images; l; l = l->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1233 struct im_image_data *img_data = l->data;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1234 if (imhtml->funcs->image_unref)
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1235 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1236 g_free(img_data);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1237 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1238
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1239 g_list_free(imhtml->scalables);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1240 g_slist_free(imhtml->im_images);
16385
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
1241 g_queue_free(imhtml->animations);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1242 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1243 g_free(imhtml->search_string);
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1244 g_object_unref(imhtml->undo_manager);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1245 G_OBJECT_CLASS(parent_class)->finalize (object);
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1246 if (clipboard_selection)
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1247 gtk_clipboard_set_with_owner(clipboard_selection,
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1248 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1249 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1250 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
1251
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1252 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1253
10814
7e17cb56b019 [gaim-migrate @ 12468]
Luke Schierer <lschiere@pidgin.im>
parents: 10799
diff changeset
1254 /* Boring GTK+ stuff */
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1255 static void gtk_imhtml_class_init (GtkIMHtmlClass *klass)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1256 {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1257 GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1258 GtkObjectClass *object_class;
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1259 GtkBindingSet *binding_set;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1260 GObjectClass *gobject_class;
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1261 object_class = (GtkObjectClass*) klass;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1262 gobject_class = (GObjectClass*) klass;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1263 parent_class = gtk_type_class(GTK_TYPE_TEXT_VIEW);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1264 signals[URL_CLICKED] = g_signal_new("url_clicked",
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1265 G_TYPE_FROM_CLASS(gobject_class),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1266 G_SIGNAL_RUN_FIRST,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1267 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1268 NULL,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1269 0,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1270 g_cclosure_marshal_VOID__POINTER,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1271 G_TYPE_NONE, 1,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1272 G_TYPE_POINTER);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1273 signals[BUTTONS_UPDATE] = g_signal_new("format_buttons_update",
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1274 G_TYPE_FROM_CLASS(gobject_class),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1275 G_SIGNAL_RUN_FIRST,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1276 G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1277 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1278 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1279 g_cclosure_marshal_VOID__INT,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1280 G_TYPE_NONE, 1,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1281 G_TYPE_INT);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1282 signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1283 G_TYPE_FROM_CLASS(gobject_class),
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1284 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1285 G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1286 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1287 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1288 g_cclosure_marshal_VOID__INT,
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1289 G_TYPE_NONE, 1,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1290 G_TYPE_INT);
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1291 signals[CLEAR_FORMAT] = g_signal_new("format_function_clear",
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1292 G_TYPE_FROM_CLASS(gobject_class),
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1293 G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1294 G_STRUCT_OFFSET(GtkIMHtmlClass, clear_format),
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1295 NULL,
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1296 0,
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1297 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1298 G_TYPE_NONE, 0);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1299 signals[UPDATE_FORMAT] = g_signal_new("format_function_update",
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1300 G_TYPE_FROM_CLASS(gobject_class),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1301 G_SIGNAL_RUN_FIRST,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1302 G_STRUCT_OFFSET(GtkIMHtmlClass, update_format),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1303 NULL,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1304 0,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1305 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1306 G_TYPE_NONE, 0);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1307 signals[MESSAGE_SEND] = g_signal_new("message_send",
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1308 G_TYPE_FROM_CLASS(gobject_class),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1309 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1310 G_STRUCT_OFFSET(GtkIMHtmlClass, message_send),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1311 NULL,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1312 0, g_cclosure_marshal_VOID__VOID,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1313 G_TYPE_NONE, 0);
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1314 signals [UNDO] = g_signal_new ("undo",
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1315 G_TYPE_FROM_CLASS (klass),
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1316 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1317 G_STRUCT_OFFSET (GtkIMHtmlClass, undo),
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1318 NULL,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1319 NULL,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1320 gtksourceview_marshal_VOID__VOID,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1321 G_TYPE_NONE,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1322 0);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1323 signals [REDO] = g_signal_new ("redo",
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1324 G_TYPE_FROM_CLASS (klass),
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1325 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1326 G_STRUCT_OFFSET (GtkIMHtmlClass, redo),
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1327 NULL,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1328 NULL,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1329 gtksourceview_marshal_VOID__VOID,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1330 G_TYPE_NONE,
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1331 0);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1332
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1333
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1334
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1335 klass->toggle_format = imhtml_toggle_format;
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1336 klass->message_send = imhtml_message_send;
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
1337 klass->clear_format = imhtml_clear_formatting;
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1338 klass->undo = gtk_imhtml_undo;
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1339 klass->redo = gtk_imhtml_redo;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1340
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1341 gobject_class->finalize = gtk_imhtml_finalize;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1342 widget_class->drag_motion = gtk_text_view_drag_motion;
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
1343 widget_class->expose_event = gtk_imhtml_expose_event;
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1344 gtk_widget_class_install_style_property(widget_class, g_param_spec_boxed("hyperlink-color",
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1345 _("Hyperlink color"),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1346 _("Color to draw hyperlinks."),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1347 GDK_TYPE_COLOR, G_PARAM_READABLE));
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1348 gtk_widget_class_install_style_property(widget_class, g_param_spec_boxed("hyperlink-prelight-color",
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1349 _("Hyperlink prelight color"),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1350 _("Color to draw hyperlinks when mouse is over them."),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1351 GDK_TYPE_COLOR, G_PARAM_READABLE));
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1352
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1353 binding_set = gtk_binding_set_by_class (parent_class);
10110
5869fb4a575d [gaim-migrate @ 11143]
Sean Egan <seanegan@pidgin.im>
parents: 10108
diff changeset
1354 gtk_binding_entry_add_signal (binding_set, GDK_b, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_BOLD);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1355 gtk_binding_entry_add_signal (binding_set, GDK_i, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_ITALIC);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1356 gtk_binding_entry_add_signal (binding_set, GDK_u, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_UNDERLINE);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1357 gtk_binding_entry_add_signal (binding_set, GDK_plus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1358 gtk_binding_entry_add_signal (binding_set, GDK_equal, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW);
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1359 gtk_binding_entry_add_signal (binding_set, GDK_minus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_SHRINK);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1360 binding_set = gtk_binding_set_by_class(klass);
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1361 gtk_binding_entry_add_signal (binding_set, GDK_r, GDK_CONTROL_MASK, "format_function_clear", 0);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1362 gtk_binding_entry_add_signal (binding_set, GDK_KP_Enter, 0, "message_send", 0);
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1363 gtk_binding_entry_add_signal (binding_set, GDK_Return, 0, "message_send", 0);
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1364 gtk_binding_entry_add_signal (binding_set, GDK_z, GDK_CONTROL_MASK, "undo", 0);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1365 gtk_binding_entry_add_signal (binding_set, GDK_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "redo", 0);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1366 gtk_binding_entry_add_signal (binding_set, GDK_F14, 0, "undo", 0);
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1367
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1368 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1369
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1370 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1371 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1372 GtkTextIter iter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1373 imhtml->text_buffer = gtk_text_buffer_new(NULL);
17880
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1374 imhtml->undo_manager = gtk_source_undo_manager_new(imhtml->text_buffer);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1375 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1376 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
1377 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
1378 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1379 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(imhtml), 2);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1380 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(imhtml), 2);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1381 /*gtk_text_view_set_indent(GTK_TEXT_VIEW(imhtml), -15);*/
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1382 /*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
1383
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1384 /* These tags will be used often and can be reused--we create them on init and then apply them by name
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
1385 * other tags (color, size, face, etc.) will have to be created and applied dynamically
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
1386 * Note that even though we created SUB, SUP, and PRE tags here, we don't really
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
1387 * apply them anywhere yet. */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1388 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
1389 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
1390 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
1391 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
1392 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
1393 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
1394 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
1395 gtk_text_buffer_create_tag(imhtml->text_buffer, "search", "background", "#22ff00", "weight", "bold", NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1396
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1397 /* 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
1398 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1399 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1400 imhtml->text_cursor = gdk_cursor_new (GDK_XTERM);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1401
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
1402 imhtml->show_comments = TRUE;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1403
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1404 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
1405 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1406 imhtml->default_smilies = gtk_smiley_tree_new();
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1407
4944
032dac83798e [gaim-migrate @ 5278]
Robert McQueen <robot101@debian.org>
parents: 4926
diff changeset
1408 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
1409 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
1410 g_signal_connect(G_OBJECT(imhtml), "leave-notify-event", G_CALLBACK(gtk_leave_event_notify), NULL);
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1411 g_signal_connect(G_OBJECT(imhtml), "enter-notify-event", G_CALLBACK(gtk_enter_event_notify), NULL);
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1412 #if (!GTK_CHECK_VERSION(2,2,0))
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1413 /* See the comment for gtk_key_pressed_cb */
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
1414 g_signal_connect(G_OBJECT(imhtml), "key_press_event", G_CALLBACK(gtk_key_pressed_cb), NULL);
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1415 #endif
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1416 g_signal_connect(G_OBJECT(imhtml), "button_press_event", G_CALLBACK(gtk_imhtml_button_press_event), NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1417 g_signal_connect(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(preinsert_cb), imhtml);
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
1418 g_signal_connect(G_OBJECT(imhtml->text_buffer), "delete_range", G_CALLBACK(delete_cb), imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1419 g_signal_connect_after(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(insert_cb), imhtml);
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
1420 g_signal_connect_after(G_OBJECT(imhtml->text_buffer), "insert-child-anchor", G_CALLBACK(insert_ca_cb), imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1421 gtk_drag_dest_set(GTK_WIDGET(imhtml), 0,
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1422 link_drag_drop_targets, sizeof(link_drag_drop_targets) / sizeof(GtkTargetEntry),
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1423 GDK_ACTION_COPY);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1424 g_signal_connect(G_OBJECT(imhtml), "drag_data_received", G_CALLBACK(gtk_imhtml_link_drag_rcv_cb), imhtml);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1425 g_signal_connect(G_OBJECT(imhtml), "drag_drop", G_CALLBACK(gtk_imhtml_link_drop_cb), imhtml);
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1426
7353
53cb39c73cf3 [gaim-migrate @ 7944]
Sean Egan <seanegan@pidgin.im>
parents: 7346
diff changeset
1427 g_signal_connect(G_OBJECT(imhtml), "copy-clipboard", G_CALLBACK(copy_clipboard_cb), NULL);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1428 g_signal_connect(G_OBJECT(imhtml), "cut-clipboard", G_CALLBACK(cut_clipboard_cb), NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1429 g_signal_connect(G_OBJECT(imhtml), "paste-clipboard", G_CALLBACK(paste_clipboard_cb), NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1430 g_signal_connect_after(G_OBJECT(imhtml), "realize", G_CALLBACK(imhtml_realized_remove_primary), NULL);
8740
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1431 g_signal_connect(G_OBJECT(imhtml), "unrealize", G_CALLBACK(imhtml_destroy_add_primary), NULL);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1432
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1433 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set",
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1434 G_CALLBACK(mark_set_so_update_selection_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1435
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1436 gtk_widget_add_events(GTK_WIDGET(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1437 GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1438
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1439 imhtml->clipboard_text_string = NULL;
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1440 imhtml->clipboard_html_string = NULL;
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1441
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1442 imhtml->tip = NULL;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1443 imhtml->tip_timer = 0;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1444 imhtml->tip_window = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1445
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1446 imhtml->edit.bold = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1447 imhtml->edit.italic = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1448 imhtml->edit.underline = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1449 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1450 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1451 imhtml->edit.fontface = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1452 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1453 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1454
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1455
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1456 imhtml->scalables = NULL;
16385
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
1457 imhtml->animations = g_queue_new();
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1458 gtk_imhtml_set_editable(imhtml, FALSE);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1459 g_signal_connect(G_OBJECT(imhtml), "populate-popup",
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1460 G_CALLBACK(hijack_menu_cb), NULL);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1461 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1462
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1463 GtkWidget *gtk_imhtml_new(void *a, void *b)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1464 {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1465 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1466 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1467
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1468 GType gtk_imhtml_get_type()
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1469 {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1470 static GType imhtml_type = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1471
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1472 if (!imhtml_type) {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1473 static const GTypeInfo imhtml_info = {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1474 sizeof(GtkIMHtmlClass),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1475 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1476 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1477 (GClassInitFunc) gtk_imhtml_class_init,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1478 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1479 NULL,
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1480 sizeof (GtkIMHtml),
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1481 0,
12600
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1482 (GInstanceInitFunc) gtk_imhtml_init,
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1483 NULL
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1484 };
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1485
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1486 imhtml_type = g_type_register_static(gtk_text_view_get_type(),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1487 "GtkIMHtml", &imhtml_info, 0);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1488 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1489
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1490 return imhtml_type;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1491 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1492
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1493 struct url_data {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1494 GObject *object;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1495 gchar *url;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1496 };
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1497
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1498 static void url_data_destroy(gpointer mydata)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1499 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1500 struct url_data *data = mydata;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1501 g_object_unref(data->object);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1502 g_free(data->url);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1503 g_free(data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1504 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1505
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1506 static void url_open(GtkWidget *w, struct url_data *data) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1507 if(!data) return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1508 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
1509
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1510 }
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1511
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1512 static void url_copy(GtkWidget *w, gchar *url) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1513 GtkClipboard *clipboard;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1514
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1515 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_PRIMARY);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1516 gtk_clipboard_set_text(clipboard, url, -1);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1517
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1518 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_CLIPBOARD);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1519 gtk_clipboard_set_text(clipboard, url, -1);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1520 }
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1521
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1522 /* The callback for an event on a link tag. */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
1523 static gboolean tag_event(GtkTextTag *tag, GObject *imhtml, GdkEvent *event, GtkTextIter *arg2, gpointer unused) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1524 GdkEventButton *event_button = (GdkEventButton *) event;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1525 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1526 return FALSE;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1527 if (event->type == GDK_BUTTON_RELEASE) {
8957
b65a01270451 [gaim-migrate @ 9731]
Tim Ringenbach <marv@pidgin.im>
parents: 8932
diff changeset
1528 if ((event_button->button == 1) || (event_button->button == 2)) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1529 GtkTextIter start, end;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1530 /* we shouldn't open a URL if the user has selected something: */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1531 if (gtk_text_buffer_get_selection_bounds(
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1532 gtk_text_iter_get_buffer(arg2), &start, &end))
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1533 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1534
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1535 /* A link was clicked--we emit the "url_clicked" signal
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1536 * with the URL as the argument */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1537 g_object_ref(G_OBJECT(tag));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1538 g_signal_emit(imhtml, signals[URL_CLICKED], 0, g_object_get_data(G_OBJECT(tag), "link_url"));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1539 g_object_unref(G_OBJECT(tag));
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1540 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1541 } else if(event_button->button == 3) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1542 GtkWidget *img, *item, *menu;
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1543 struct url_data *tempdata = g_new(struct url_data, 1);
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1544 tempdata->object = g_object_ref(imhtml);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1545 tempdata->url = g_strdup(g_object_get_data(G_OBJECT(tag), "link_url"));
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1546
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1547 /* 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
1548 if (GTK_IMHTML(imhtml)->tip_window) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1549 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1550 GTK_IMHTML(imhtml)->tip_window = NULL;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1551 }
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1552 if (GTK_IMHTML(imhtml)->tip_timer) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1553 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1554 GTK_IMHTML(imhtml)->tip_timer = 0;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1555 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1556 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1557 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
1558 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1559 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
1560 menu = gtk_menu_new();
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1561 g_object_set_data_full(G_OBJECT(menu), "x-imhtml-url-data", tempdata, url_data_destroy);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1562
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1563 /* buttons and such */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1564
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1565 if (!strncmp(tempdata->url, "mailto:", 7))
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1566 {
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1567 /* Copy E-Mail Address */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1568 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1569 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1570 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1571 _("_Copy E-Mail Address"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1572 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
1573 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1574 G_CALLBACK(url_copy), tempdata->url + 7);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1575 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1576 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1577 else
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1578 {
10936
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1579 /* Open Link in Browser */
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1580 img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1581 GTK_ICON_SIZE_MENU);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1582 item = gtk_image_menu_item_new_with_mnemonic(
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1583 _("_Open Link in Browser"));
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1584 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1585 g_signal_connect(G_OBJECT(item), "activate",
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1586 G_CALLBACK(url_open), tempdata);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1587 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1588
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1589 /* Copy Link Location */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1590 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1591 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1592 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1593 _("_Copy Link Location"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1594 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
1595 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1596 G_CALLBACK(url_copy), tempdata->url);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1597 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1598 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1599
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1600
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1601 gtk_widget_show_all(menu);
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1602 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1603 event_button->button, event_button->time);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1604
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1605 return TRUE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1606 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1607 }
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1608 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1609 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
1610 be caught by the regular GtkTextView menu */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1611 else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1612 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
1613 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1614
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1615 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1616 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1617 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1618 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1619 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1620 guint time)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1621 {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1622 GdkDragAction suggested_action = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1623
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1624 if (gtk_drag_dest_find_target (widget, context, NULL) == GDK_NONE) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1625 /* can't accept any of the offered targets */
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1626 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1627 GtkWidget *source_widget;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1628 suggested_action = context->suggested_action;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1629 source_widget = gtk_drag_get_source_widget (context);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1630 if (source_widget == widget) {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1631 /* Default to MOVE, unless the user has
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1632 * pressed ctrl or alt to affect available actions
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1633 */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1634 if ((context->actions & GDK_ACTION_MOVE) != 0)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1635 suggested_action = GDK_ACTION_MOVE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1636 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1637 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1638
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1639 gdk_drag_status (context, suggested_action, time);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1640
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1641 /* TRUE return means don't propagate the drag motion to parent
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1642 * widgets that may also be drop sites.
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1643 */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1644 return TRUE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1645 }
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1646
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1647 static void
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1648 gtk_imhtml_link_drop_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1649 {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1650 GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1651
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1652 if (target != GDK_NONE)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1653 gtk_drag_get_data (widget, context, target, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1654 else
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1655 gtk_drag_finish (context, FALSE, FALSE, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1656
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1657 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1658 }
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1659
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1660 static void
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1661 gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y,
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1662 GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml)
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1663 {
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1664 gchar **links;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1665 gchar *link;
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1666 char *text = (char *)sd->data;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1667 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1668 GtkTextIter iter;
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1669 gint i = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1670
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1671 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1672
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1673 if(gtk_imhtml_get_editable(imhtml) && sd->data){
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1674 switch (info) {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1675 case GTK_IMHTML_DRAG_URL:
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1676 /* TODO: Is it really ok to change sd->data...? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1677 purple_str_strip_char((char *)sd->data, '\r');
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1678
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1679 links = g_strsplit((char *)sd->data, "\n", 0);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1680 while((link = links[i]) != NULL){
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1681 if(purple_str_has_prefix(link, "http://") ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1682 purple_str_has_prefix(link, "https://") ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1683 purple_str_has_prefix(link, "ftp://"))
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1684 {
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1685 gchar *label;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1686
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1687 if(links[i + 1])
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1688 i++;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1689
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1690 label = links[i];
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1691
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1692 gtk_imhtml_insert_link(imhtml, mark, link, label);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1693 } else if (link=='\0') {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1694 /* Ignore blank lines */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1695 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1696 /* Special reasons, aka images being put in via other tag, etc. */
10345
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1697 /* ... don't pretend we handled it if we didn't */
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1698 gtk_drag_finish(dc, FALSE, FALSE, t);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1699 g_strfreev(links);
10345
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1700 return;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1701 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1702
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1703 i++;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1704 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1705 g_strfreev(links);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1706 break;
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1707 case GTK_IMHTML_DRAG_HTML:
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1708 {
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1709 char *utf8 = NULL;
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1710 /* Ewww. This is all because mozilla thinks that text/html is 'for internal use only.'
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1711 * as explained by this comment in gtkhtml:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1712 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1713 * FIXME This hack decides the charset of the selection. It seems that
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1714 * mozilla/netscape alway use ucs2 for text/html
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1715 * and openoffice.org seems to always use utf8 so we try to validate
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1716 * the string as utf8 and if that fails we assume it is ucs2
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1717 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1718 * See also the comment on text/html here:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1719 * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1720 */
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1721 if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1722 utf8 = ucs2_to_utf8_with_bom_check(text, sd->length);
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1723
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1724 if (!utf8) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1725 purple_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in drag_rcv_cb\n");
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1726 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1727 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1728 } else if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1729 purple_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1730 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1731 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1732
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1733 gtk_imhtml_insert_html_at_iter(imhtml, utf8 ? utf8 : text, 0, &iter);
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1734 g_free(utf8);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1735 break;
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1736 }
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1737 case GTK_IMHTML_DRAG_TEXT:
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1738 if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1739 purple_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1740 return;
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1741 } else {
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1742 char *tmp = g_markup_escape_text(text, -1);
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1743 gtk_imhtml_insert_html_at_iter(imhtml, tmp, 0, &iter);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1744 g_free(tmp);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1745 }
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1746 break;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1747 default:
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1748 gtk_drag_finish(dc, FALSE, FALSE, t);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1749 return;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1750 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1751 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1752 } else {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1753 gtk_drag_finish(dc, FALSE, FALSE, t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1754 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1755 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1756
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1757 /* this isn't used yet
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1758 static void gtk_smiley_tree_remove (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1759 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1760 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1761 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1762 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1763 gint len = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1764
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1765 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1766 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1767
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1768 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1769 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1770
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1771 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1772 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1773 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1774 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1775 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1776
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1777 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1778 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1779
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1780 if (t->image) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1781 t->image = NULL;
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1782 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1783 }
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1784 */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1785
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1786
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1787 static gint
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1788 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1789 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1790 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1791 GtkSmileyTree *t = tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1792 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1793 gint len = 0;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
1794 const gchar *amp;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1795 gint alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1796
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1797 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1798 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1799
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1800 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1801 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1802
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
1803 if(*x == '&' && (amp = purple_markup_unescape_entity(x, &alen))) {
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1804 gboolean matched = TRUE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1805 /* Make sure all chars of the unescaped value match */
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1806 while (*(amp + 1)) {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1807 pos = strchr (t->values->str, *amp);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1808 if (pos)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1809 t = t->children [GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1810 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1811 matched = FALSE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1812 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1813 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1814 amp++;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1815 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1816 if (!matched)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1817 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1818
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1819 pos = strchr (t->values->str, *amp);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1820 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1821 else if (*x == '<') /* Because we're all WYSIWYG now, a '<'
9636
1648147987cd [gaim-migrate @ 10480]
Sean Egan <seanegan@pidgin.im>
parents: 9621
diff changeset
1822 * char should only appear as the start of a tag. Perhaps a safer (but costlier)
1648147987cd [gaim-migrate @ 10480]
Sean Egan <seanegan@pidgin.im>
parents: 9621
diff changeset
1823 * check would be to call gtk_imhtml_is_tag on it */
10600
0c0053f3316c [gaim-migrate @ 12022]
Tim Ringenbach <marv@pidgin.im>
parents: 10589
diff changeset
1824 break;
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1825 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1826 alen = 1;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1827 pos = strchr (t->values->str, *x);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1828 }
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1829
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1830 if (pos)
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1831 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
1832 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1833 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1834
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1835 x += alen;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1836 len += alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1837 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1838
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1839 if (t->image)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1840 return len;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1841
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1842 return 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1843 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1844
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1845 void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1846 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
10537
9ece7671fa62 [gaim-migrate @ 11890]
Mark Doliner <markdoliner@pidgin.im>
parents: 10526
diff changeset
1847 const gchar *sml,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1848 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1849 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1850 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1851 g_return_if_fail (imhtml != NULL);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1852 g_return_if_fail (GTK_IS_IMHTML (imhtml));
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1853
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1854 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1855 tree = imhtml->default_smilies;
12833
1f461f275b90 [gaim-migrate @ 15181]
Richard Laager <rlaager@pidgin.im>
parents: 12796
diff changeset
1856 else if (!(tree = g_hash_table_lookup(imhtml->smiley_data, sml))) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1857 tree = gtk_smiley_tree_new();
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1858 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
1859 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1860
12335
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1861 smiley->imhtml = imhtml;
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1862
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1863 gtk_smiley_tree_insert (tree, smiley);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1864 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1865
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1866 static gboolean
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1867 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1868 GSList *fonts,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1869 const gchar *text,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1870 gint *len)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1871 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1872 GtkSmileyTree *tree;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1873 GtkIMHtmlFontDetail *font;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1874 char *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1875
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1876 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1877 font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1878 sml = font->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1879 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1880
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1881 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1882 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1883
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1884 if (!sml || !(tree = g_hash_table_lookup(imhtml->smiley_data, sml)))
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1885 tree = imhtml->default_smilies;
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1886
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1887 if (tree == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1888 return FALSE;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1889
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1890 *len = gtk_smiley_tree_lookup (tree, text);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1891 return (*len > 0);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1892 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1893
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1894 GtkIMHtmlSmiley *
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1895 gtk_imhtml_smiley_get(GtkIMHtml *imhtml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1896 const gchar *sml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1897 const gchar *text)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1898 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1899 GtkSmileyTree *t;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1900 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1901 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1902 t = imhtml->default_smilies;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1903 else
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1904 t = g_hash_table_lookup(imhtml->smiley_data, sml);
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1905
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1906
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1907 if (t == NULL)
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1908 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1909
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1910 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1911 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1912
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1913 if (!t->values) {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1914 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1915 }
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1916
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1917 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1918 if (pos) {
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1919 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
1920 } else {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1921 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1922 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1923 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1924 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1925
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1926 return t->image;
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1927 }
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1928
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
1929 static GdkPixbufAnimation *
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1930 gtk_smiley_get_image(GtkIMHtmlSmiley *smiley)
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1931 {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1932 if (!smiley->icon && smiley->file) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1933 smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1934 } else if (!smiley->icon && smiley->loader) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1935 smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1936 if (smiley->icon)
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1937 g_object_ref(G_OBJECT(smiley->icon));
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1938 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1939
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1940 return smiley->icon;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1941 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
1942
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1943 static GdkPixbufAnimation *
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1944 gtk_smiley_tree_image (GtkIMHtml *imhtml,
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1945 const gchar *sml,
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1946 const gchar *text)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1947 {
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1948 GtkIMHtmlSmiley *smiley;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1949
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1950 smiley = gtk_imhtml_smiley_get(imhtml,sml,text);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1951
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1952 if (!smiley)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1953 return NULL;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1954
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1955 return gtk_smiley_get_image(smiley);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1956 }
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
1957
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1958 #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
1959 *tag = g_strndup (string, strlen (x)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1960 *len = strlen (x) + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1961 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1962 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1963 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1964
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1965 #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
1966 const gchar *c = string + strlen (x " "); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1967 gchar e = '"'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1968 gboolean quote = FALSE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1969 while (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1970 if (*c == '"' || *c == '\'') { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1971 if (quote && (*c == e)) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1972 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1973 else if (!quote) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1974 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1975 e = *c; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1976 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1977 } else if (!quote && (*c == '>')) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1978 break; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1979 c++; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1980 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1981 if (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1982 *tag = g_strndup (string, c - string); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1983 *len = c - string + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1984 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1985 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1986 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1987 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1988
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1989
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
1990 static gboolean
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1991 gtk_imhtml_is_tag (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1992 gchar **tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1993 gint *len,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1994 gint *type)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1995 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1996 char *close;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1997 *type = 1;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
1998
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
1999
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2000 if (!(close = strchr (string, '>')))
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2001 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2002
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2003 VALID_TAG ("B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2004 VALID_TAG ("BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2005 VALID_TAG ("/B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2006 VALID_TAG ("/BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2007 VALID_TAG ("I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2008 VALID_TAG ("ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2009 VALID_TAG ("/I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2010 VALID_TAG ("/ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2011 VALID_TAG ("U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2012 VALID_TAG ("UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2013 VALID_TAG ("/U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2014 VALID_TAG ("/UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2015 VALID_TAG ("S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2016 VALID_TAG ("STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2017 VALID_TAG ("/S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2018 VALID_TAG ("/STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2019 VALID_TAG ("SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2020 VALID_TAG ("/SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2021 VALID_TAG ("SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2022 VALID_TAG ("/SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2023 VALID_TAG ("PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2024 VALID_TAG ("/PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2025 VALID_TAG ("TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2026 VALID_TAG ("/TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2027 VALID_TAG ("BR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2028 VALID_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2029 VALID_TAG ("/FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2030 VALID_TAG ("/A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2031 VALID_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2032 VALID_TAG ("/P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2033 VALID_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2034 VALID_TAG ("/H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2035 VALID_TAG ("HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2036 VALID_TAG ("/HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2037 VALID_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2038 VALID_TAG ("/BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2039 VALID_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2040 VALID_TAG ("HEAD");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2041 VALID_TAG ("/HEAD");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2042 VALID_TAG ("BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2043 VALID_TAG ("/BINARY");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2044
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2045 VALID_OPT_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2046 VALID_OPT_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2047 VALID_OPT_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2048 VALID_OPT_TAG ("A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2049 VALID_OPT_TAG ("IMG");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2050 VALID_OPT_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2051 VALID_OPT_TAG ("H3");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2052 VALID_OPT_TAG ("HTML");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2053
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2054 VALID_TAG ("CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2055 VALID_TAG ("/CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2056 VALID_TAG ("EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2057 VALID_TAG ("/EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2058 VALID_TAG ("STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2059 VALID_TAG ("/STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2060
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2061 VALID_OPT_TAG ("SPAN");
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2062 VALID_TAG ("/SPAN");
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2063 VALID_TAG ("BR/"); /* hack until gtkimhtml handles things better */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2064 VALID_TAG ("IMG");
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2065 VALID_TAG("SPAN");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2066 VALID_OPT_TAG("BR");
7988
fe4616ea76c3 [gaim-migrate @ 8665]
Nathan Walp <nwalp@pidgin.im>
parents: 7961
diff changeset
2067
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2068 if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) {
2954
fc07d855731d [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2069 gchar *e = strstr (string + strlen("!--"), "-->");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2070 if (e) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2071 *len = e - string + strlen ("-->");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2072 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2073 return TRUE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2074 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2075 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2076
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2077 *type = -1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2078 *len = close - string + 1;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2079 *tag = g_strndup(string, *len - 1);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2080 return TRUE;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2081 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2082
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2083 static gchar*
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2084 gtk_imhtml_get_html_opt (gchar *tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2085 const gchar *opt)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2086 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2087 gchar *t = tag;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2088 gchar *e, *a;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2089 gchar *val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2090 gint len;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2091 const gchar *c;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2092 GString *ret;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2093
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2094 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2095 gboolean quote = FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2096 if (*t == '\0') break;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2097 while (*t && !((*t == ' ') && !quote)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2098 if (*t == '\"')
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2099 quote = ! quote;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2100 t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2101 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2102 while (*t && (*t == ' ')) t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2103 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2104
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2105 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2106 t += strlen (opt);
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2107 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2108 return NULL;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2109 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2110
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2111 if ((*t == '\"') || (*t == '\'')) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2112 e = a = ++t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2113 while (*e && (*e != *(t - 1))) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2114 if (*e == '\0') {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2115 return NULL;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2116 } else
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2117 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2118 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2119 e = a = t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2120 while (*e && !isspace ((gint) *e)) e++;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2121 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2122 }
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2123
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2124 ret = g_string_new("");
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2125 e = val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2126 while(*e) {
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2127 if((c = purple_markup_unescape_entity(e, &len))) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2128 ret = g_string_append(ret, c);
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2129 e += len;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2130 } else {
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2131 ret = g_string_append_c(ret, *e);
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2132 e++;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2133 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2134 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2135
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2136 g_free(val);
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2137
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2138 return g_string_free(ret, FALSE);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2139 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2140
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2141 static const char *accepted_protocols[] = {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2142 "http://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2143 "https://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2144 "ftp://"
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2145 };
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2146
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2147 static const int accepted_protocols_size = 3;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2148
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2149 /* 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
2150 the caller knows how long the protocol string is. */
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12335
diff changeset
2151 static int gtk_imhtml_is_protocol(const char *text)
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2152 {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2153 gint i;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2154
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2155 for(i=0; i<accepted_protocols_size; i++){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2156 if( strncasecmp(text, accepted_protocols[i], strlen(accepted_protocols[i])) == 0 ){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2157 return strlen(accepted_protocols[i]);
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2158 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2159 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2160 return 0;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2161 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2162
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2163 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
2164 <KingAnt> marv: The two IM image functions in oscar are purple_odc_send_im and purple_odc_incoming
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2165
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2166
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2167 [19:58] <Robot101> marv: images go into the imgstore, a refcounted... well.. hash. :)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2168 [19:59] <KingAnt> marv: I think the image tag used by the core is something like <img id="#"/>
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2169 [19:59] Ro0tSiEgE robert42 RobFlynn Robot101 ross22 roz
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
2170 [20:00] <KingAnt> marv: Where the ID is the what is returned when you add the image to the imgstore using purple_imgstore_add
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2171 [20:00] <marv> Robot101: so how does the image get passed to serv_got_im() and serv_send_im()? just as the <img id="#" and then the prpl looks it up from the store?
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2172 [20:00] <KingAnt> marv: Right
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2173 [20:00] <marv> alright
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2174
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2175 Here's my plan with IMImages. make gtk_imhtml_[append|insert]_text_with_images instead just
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2176 gtkimhtml_[append|insert]_text (hrm maybe it should be called html instead of text), add a
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
2177 function for purple to register for look up images, i.e. gtk_imhtml_set_get_img_fnc, so that
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2178 images can be looked up like that, instead of passing a GSList of them.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2179 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2180
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2181 void gtk_imhtml_append_text_with_images (GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2182 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2183 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2184 GSList *unused)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2185 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2186 GtkTextIter iter, ins, sel;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2187 GdkRectangle rect;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2188 int y, height, ins_offset = 0, sel_offset = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2189 gboolean fixins = FALSE, fixsel = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2190
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2191 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2192 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2193 g_return_if_fail (text != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2194
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2195
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2196 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2197 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &ins, gtk_text_buffer_get_insert(imhtml->text_buffer));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2198 if (gtk_text_iter_equal(&iter, &ins) && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2199 fixins = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2200 ins_offset = gtk_text_iter_get_offset(&ins);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2201 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2202
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2203 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &sel, gtk_text_buffer_get_selection_bound(imhtml->text_buffer));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2204 if (gtk_text_iter_equal(&iter, &sel) && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2205 fixsel = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2206 sel_offset = gtk_text_iter_get_offset(&sel);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2207 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2208
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2209 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2210 gtk_text_view_get_line_yrange(GTK_TEXT_VIEW(imhtml), &iter, &y, &height);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2211
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2212
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2213 if(((y + height) - (rect.y + rect.height)) > height
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2214 && gtk_text_buffer_get_char_count(imhtml->text_buffer)){
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2215 options |= GTK_IMHTML_NO_SCROLL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2216 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2217
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2218 gtk_imhtml_insert_html_at_iter(imhtml, text, options, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2219
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2220 if (fixins) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2221 gtk_text_buffer_get_iter_at_offset(imhtml->text_buffer, &ins, ins_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2222 gtk_text_buffer_move_mark(imhtml->text_buffer, gtk_text_buffer_get_insert(imhtml->text_buffer), &ins);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2223 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2224
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2225 if (fixsel) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2226 gtk_text_buffer_get_iter_at_offset(imhtml->text_buffer, &sel, sel_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2227 gtk_text_buffer_move_mark(imhtml->text_buffer, gtk_text_buffer_get_selection_bound(imhtml->text_buffer), &sel);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2228 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2229
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2230 if (!(options & GTK_IMHTML_NO_SCROLL)) {
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2231 gtk_imhtml_scroll_to_end(imhtml, (options & GTK_IMHTML_USE_SMOOTHSCROLLING));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2232 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2233 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2234
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2235 #define MAX_SCROLL_TIME 0.4 /* seconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2236 #define SCROLL_DELAY 33 /* milliseconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2237
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2238 /*
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2239 * Smoothly scroll a GtkIMHtml.
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2240 *
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2241 * @return TRUE if the window needs to be scrolled further, FALSE if we're at the bottom.
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2242 */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
2243 static gboolean scroll_cb(gpointer data)
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2244 {
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2245 GtkIMHtml *imhtml = data;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2246 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2247 gdouble max_val = adj->upper - adj->page_size;
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2248
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2249 g_return_val_if_fail(imhtml->scroll_time != NULL, FALSE);
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2250
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2251 if (g_timer_elapsed(imhtml->scroll_time, NULL) > MAX_SCROLL_TIME) {
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2252 /* time's up. jump to the end and kill the timer */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2253 gtk_adjustment_set_value(adj, max_val);
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2254 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2255 imhtml->scroll_time = NULL;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2256 return FALSE;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2257 }
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2258
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2259 /* scroll by 1/3rd the remaining distance */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2260 gtk_adjustment_set_value(adj, gtk_adjustment_get_value(adj) + ((max_val - gtk_adjustment_get_value(adj)) / 3));
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2261 return TRUE;
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2262 }
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2263
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2264 static gboolean smooth_scroll_idle_cb(gpointer data)
10797
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2265 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2266 GtkIMHtml *imhtml = data;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2267 imhtml->scroll_src = g_timeout_add(SCROLL_DELAY, scroll_cb, imhtml);
10797
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2268 return FALSE;
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2269 }
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2270
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2271 static gboolean scroll_idle_cb(gpointer data)
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2272 {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2273 GtkIMHtml *imhtml = data;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2274 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2275 if(adj) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2276 gtk_adjustment_set_value(adj, adj->upper - adj->page_size);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2277 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2278 imhtml->scroll_src = 0;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2279 return FALSE;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2280 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2281
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2282 void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml, gboolean smooth)
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2283 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2284 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2285 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2286 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2287 g_source_remove(imhtml->scroll_src);
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2288 if(smooth) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2289 imhtml->scroll_time = g_timer_new();
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2290 imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, smooth_scroll_idle_cb, imhtml, NULL);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2291 } else {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2292 imhtml->scroll_time = NULL;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2293 imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, scroll_idle_cb, imhtml, NULL);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2294 }
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2295 }
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2296
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2297 void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2298 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2299 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2300 GtkTextIter *iter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2301 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2302 GdkRectangle rect;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2303 gint pos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2304 gchar *ws;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2305 gchar *tag;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2306 gchar *bg = NULL;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2307 gint len;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2308 gint tlen, smilelen, wpos=0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2309 gint type;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2310 const gchar *c;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2311 const gchar *amp;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2312 gint len_protocol;
15379
4be41dcd3794 [gaim-migrate @ 18108]
Sean Egan <seanegan@pidgin.im>
parents: 15331
diff changeset
2313
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2314 guint bold = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2315 italics = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2316 underline = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2317 strike = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2318 sub = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2319 sup = 0,
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2320 title = 0,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2321 pre = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2322
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2323 gboolean br = FALSE;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2324 gboolean align_right = FALSE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2325 gboolean rtl_direction = FALSE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2326 gint align_line = 0;
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
2327
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2328 GSList *fonts = NULL;
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2329 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2330 GtkIMHtmlScalable *scalable = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2331
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2332 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2333 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2334 g_return_if_fail (text != NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2335 c = text;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2336 len = strlen(text);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2337 ws = g_malloc(len + 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2338 ws[0] = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2339
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2340 while (pos < len) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2341 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2342 c++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2343 pos++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2344 ws[wpos] = '\0';
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2345 br = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2346 switch (type)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2347 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2348 case 1: /* B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2349 case 2: /* BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2350 case 54: /* STRONG */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2351 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2352 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2353
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2354 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2355 gtk_imhtml_toggle_bold(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2356 bold++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2357 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2358 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2359 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2360 case 3: /* /B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2361 case 4: /* /BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2362 case 55: /* /STRONG */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2363 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2364 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2365 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2366
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2367 if (bold) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2368 bold--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2369 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2370 gtk_imhtml_toggle_bold(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2371 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2372 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2373 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2374 case 5: /* I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2375 case 6: /* ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2376 case 52: /* EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2377 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2378 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2379 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2380 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2381 gtk_imhtml_toggle_italic(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2382 italics++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2383 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2384 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2385 case 7: /* /I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2386 case 8: /* /ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2387 case 53: /* /EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2388 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2389 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2390 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2391 if (italics) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2392 italics--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2393 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2394 gtk_imhtml_toggle_italic(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2395 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2396 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2397 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2398 case 9: /* U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2399 case 10: /* UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2400 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2401 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2402 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2403 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2404 gtk_imhtml_toggle_underline(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2405 underline++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2406 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2407 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2408 case 11: /* /U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2409 case 12: /* /UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2410 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2411 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2412 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2413 if (underline) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2414 underline--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2415 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2416 gtk_imhtml_toggle_underline(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2417 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2418 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2419 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2420 case 13: /* S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2421 case 14: /* STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2422 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2423 ws[0] = '\0'; wpos = 0;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2424 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE))
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2425 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2426 strike++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2427 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2428 case 15: /* /S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2429 case 16: /* /STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2430 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2431 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2432 if (strike)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2433 strike--;
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2434 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE) && !imhtml->wbfo)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2435 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2436 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2437 case 17: /* SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2438 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2439 sub++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2440 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2441 case 18: /* /SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2442 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2443 if (sub)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2444 sub--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2445 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2446 case 19: /* SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2447 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2448 sup++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2449 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2450 case 20: /* /SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2451 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2452 if (sup)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2453 sup--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2454 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2455 case 21: /* PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2456 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2457 pre++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2458 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2459 case 22: /* /PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2460 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2461 if (pre)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2462 pre--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2463 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2464 case 23: /* TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2465 /* FIXME: what was this supposed to do anyway? */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2466 title++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2467 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2468 case 24: /* /TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2469 /* FIXME: make this undo whatever 23 was supposed to do */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2470 if (title) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2471 if (options & GTK_IMHTML_NO_TITLE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2472 wpos = 0;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2473 ws [wpos] = '\0';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2474 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2475 title--;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2476 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2477 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2478 case 25: /* BR */
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2479 case 58: /* BR/ */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2480 case 61: /* BR (opt) */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2481 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2482 wpos++;
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2483 br = TRUE;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2484 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2485 case 26: /* HR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2486 case 42: /* HR (opt) */
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2487 {
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2488 int minus;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2489 struct scalable_data *sd = g_new(struct scalable_data, 1);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2490
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2491 ws[wpos++] = '\n';
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2492 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2493
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2494 sd->scalable = scalable = gtk_imhtml_hr_new();
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
2495 sd->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2496 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2497 scalable->add_to(scalable, imhtml, iter);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2498 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2499 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2500 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2501 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2502 ws[0] = '\0'; wpos = 0;
7942
e6c3c6ab87af [gaim-migrate @ 8613]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7914
diff changeset
2503 ws[wpos++] = '\n';
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2504
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2505 break;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2506 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2507 case 27: /* /FONT */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2508 if (fonts && !imhtml->wbfo) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2509 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2510 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2511 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2512 /* NEW_BIT (NEW_TEXT_BIT); */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2513
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2514 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2515 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2516 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2517 g_free (font->face);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2518 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2519 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2520 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2521 g_free (font->fore);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2522 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2523 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2524 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2525 g_free (font->back);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2526 g_free (font->sml);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2527
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2528 if ((font->size != 3) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2529 gtk_imhtml_font_set_size(imhtml, 3);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2530
10761
cbfb52c33913 [gaim-migrate @ 12365]
Nathan Walp <nwalp@pidgin.im>
parents: 10732
diff changeset
2531 fonts = g_slist_remove (fonts, font);
9245
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2532 g_free(font);
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2533
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2534 if (fonts) {
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2535 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2536
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2537 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2538 gtk_imhtml_toggle_fontface(imhtml, font->face);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2539 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2540 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2541 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2542 gtk_imhtml_toggle_backcolor(imhtml, font->back);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2543 if ((font->size != 3) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2544 gtk_imhtml_font_set_size(imhtml, font->size);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2545 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2546 }
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2547 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2548 case 28: /* /A */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2549 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2550 gtk_imhtml_toggle_link(imhtml, NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2551 ws[0] = '\0'; wpos = 0;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2552 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2553
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2554 case 29: /* P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2555 case 30: /* /P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2556 case 31: /* H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2557 case 32: /* /H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2558 case 33: /* HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2559 case 34: /* /HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2560 case 35: /* BODY */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2561 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2562 case 36: /* /BODY */
10786
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2563 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2564 ws[0] = '\0'; wpos = 0;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2565 gtk_imhtml_toggle_background(imhtml, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2566 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2567 case 37: /* FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2568 case 38: /* HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2569 case 39: /* /HEAD */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2570 case 40: /* BINARY */
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2571 case 41: /* /BINARY */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2572 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2573 case 43: /* FONT (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2574 {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2575 gchar *color, *back, *face, *size, *sml;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2576 GtkIMHtmlFontDetail *font, *oldfont = NULL;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2577 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2578 back = gtk_imhtml_get_html_opt (tag, "BACK=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2579 face = gtk_imhtml_get_html_opt (tag, "FACE=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2580 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2581 sml = gtk_imhtml_get_html_opt (tag, "SML=");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2582 if (!(color || back || face || size || sml))
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2583 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2584
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2585 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2586 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2587
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2588 font = g_new0 (GtkIMHtmlFontDetail, 1);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2589 if (fonts)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2590 oldfont = fonts->data;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2591
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2592 if (color && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2593 font->fore = color;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2594 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2595 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2596 g_free(color);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2597
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2598 if (back && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2599 font->back = back;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2600 gtk_imhtml_toggle_backcolor(imhtml, font->back);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2601 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2602 g_free(back);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2603
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2604 if (face && !(options & GTK_IMHTML_NO_FONTS) && (imhtml->format_functions & GTK_IMHTML_FACE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2605 font->face = face;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2606 gtk_imhtml_toggle_fontface(imhtml, font->face);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2607 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2608 g_free(face);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2609
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2610 if (sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2611 font->sml = sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2612 else if (oldfont && oldfont->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2613 font->sml = g_strdup(oldfont->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2614
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2615 if (size && !(options & GTK_IMHTML_NO_SIZES) && (imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK))) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2616 if (*size == '+') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2617 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2618 font->size += 3;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2619 } else if (*size == '-') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2620 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2621 font->size = MAX (0, 3 - font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2622 } else if (isdigit (*size)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2623 sscanf (size, "%hd", &font->size);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2624 }
6042
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2625 if (font->size > 100)
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2626 font->size = 100;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2627 } else if (oldfont)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2628 font->size = oldfont->size;
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2629 else
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2630 font->size = 3;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2631 if ((imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2632 gtk_imhtml_font_set_size(imhtml, font->size);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2633 g_free(size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2634 fonts = g_slist_prepend (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2635 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2636 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2637 case 44: /* BODY (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2638 if (!(options & GTK_IMHTML_NO_COLOURS)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2639 char *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2640 if (bgcolor && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2641 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2642 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2643 /* NEW_BIT(NEW_TEXT_BIT); */
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2644 g_free(bg);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2645 bg = bgcolor;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2646 gtk_imhtml_toggle_background(imhtml, bg);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2647 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2648 g_free(bgcolor);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2649 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2650 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2651 case 45: /* A (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2652 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2653 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2654 if (href && (imhtml->format_functions & GTK_IMHTML_LINK)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2655 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2656 ws[0] = '\0'; wpos = 0;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2657 gtk_imhtml_toggle_link(imhtml, href);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2658 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2659 g_free(href);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2660 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2661 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2662 case 46: /* IMG (opt) */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2663 case 59: /* IMG */
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2664 {
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2665 const char *id;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2666
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2667 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2668 ws[0] = '\0'; wpos = 0;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2669
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2670 if (!(imhtml->format_functions & GTK_IMHTML_IMAGE))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2671 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2672
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2673 id = gtk_imhtml_get_html_opt(tag, "ID=");
9186
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2674 if (!id)
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2675 break;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2676 gtk_imhtml_insert_image_at_iter(imhtml, atoi(id), iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2677 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2678 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2679 case 47: /* P (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2680 case 48: /* H3 (opt) */
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2681 case 49: /* HTML (opt) */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2682 case 50: /* CITE */
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2683 case 51: /* /CITE */
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2684 case 56: /* SPAN (opt) */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2685 /* Inline CSS Support - Douglas Thrift
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2686 *
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2687 * color
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2688 * background
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2689 * font-family
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2690 * font-size
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2691 * text-decoration: underline
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2692 * font-weight: bold
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2693 * direction: rtl
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2694 * text-align: right
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2695 *
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2696 * TODO:
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2697 * background-color
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2698 * font-style
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2699 */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2700 {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2701 gchar *style, *color, *background, *family, *size, *direction, *alignment;
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2702 gchar *textdec, *weight;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2703 GtkIMHtmlFontDetail *font, *oldfont = NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2704 style = gtk_imhtml_get_html_opt (tag, "style=");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2705
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2706 if (!style) break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2707
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2708 color = purple_markup_get_css_property (style, "color");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2709 background = purple_markup_get_css_property (style, "background");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2710 family = purple_markup_get_css_property (style, "font-family");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2711 size = purple_markup_get_css_property (style, "font-size");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2712 textdec = purple_markup_get_css_property (style, "text-decoration");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2713 weight = purple_markup_get_css_property (style, "font-weight");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2714 direction = purple_markup_get_css_property (style, "direction");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2715 alignment = purple_markup_get_css_property (style, "text-align");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2716
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2717
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2718 if (!(color || family || size || background || textdec || weight || direction || alignment)) {
8120
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2719 g_free(style);
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2720 break;
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2721 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2722
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2723
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2724 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2725 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2726 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2727
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2728 /* Bi-Directional text support */
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2729 if (direction && (!strncasecmp(direction, "RTL", 3))) {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2730 rtl_direction = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2731 /* insert RLE character to set direction */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2732 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2733 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2734 ws[wpos++] = 0xAB;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2735 ws[wpos] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2736 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2737 ws[0] = '\0'; wpos = 0;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2738 }
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2739 g_free(direction);
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2740
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2741 if (alignment && (!strncasecmp(alignment, "RIGHT", 5))) {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2742 align_right = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2743 align_line = gtk_text_iter_get_line(iter);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2744 }
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2745 g_free(alignment);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2746
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2747 font = g_new0 (GtkIMHtmlFontDetail, 1);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2748 if (fonts)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2749 oldfont = fonts->data;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2750
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2751 if (color && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2752 font->fore = color;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2753 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2754 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2755 if (oldfont && oldfont->fore)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2756 font->fore = g_strdup(oldfont->fore);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2757 g_free(color);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2758 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2759
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2760 if (background && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2761 font->back = background;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2762 gtk_imhtml_toggle_backcolor(imhtml, font->back);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2763 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2764 if (oldfont && oldfont->back)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2765 font->back = g_strdup(oldfont->back);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2766 g_free(background);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2767 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2768
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2769 if (family && !(options & GTK_IMHTML_NO_FONTS) && (imhtml->format_functions & GTK_IMHTML_FACE)) {
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2770 font->face = family;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2771 gtk_imhtml_toggle_fontface(imhtml, font->face);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2772 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2773 if (oldfont && oldfont->face)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2774 font->face = g_strdup(oldfont->face);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2775 g_free(family);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2776 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2777 if (font->face && (atoi(font->face) > 100)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2778 /* WTF is this? */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2779 /* Maybe it sets a max size on the font face? I seem to
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2780 * remember bad things happening if the font size was
9696
9d62e1ec5977 [gaim-migrate @ 10555]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9636
diff changeset
2781 * 2 billion */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2782 g_free(font->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2783 font->face = g_strdup("100");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2784 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2785
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2786 if (oldfont && oldfont->sml)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2787 font->sml = g_strdup(oldfont->sml);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2788
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2789 if (size && !(options & GTK_IMHTML_NO_SIZES) && (imhtml->format_functions & (GTK_IMHTML_SHRINK|GTK_IMHTML_GROW))) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2790 if (g_ascii_strcasecmp(size, "xx-small") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2791 font->size = 1;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2792 else if (g_ascii_strcasecmp(size, "smaller") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2793 || g_ascii_strcasecmp(size, "x-small") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2794 font->size = 2;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2795 else if (g_ascii_strcasecmp(size, "larger") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2796 || g_ascii_strcasecmp(size, "medium") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2797 font->size = 4;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2798 else if (g_ascii_strcasecmp(size, "large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2799 font->size = 5;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2800 else if (g_ascii_strcasecmp(size, "x-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2801 font->size = 6;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2802 else if (g_ascii_strcasecmp(size, "xx-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2803 font->size = 7;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2804 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2805 font->size = 3;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2806 gtk_imhtml_font_set_size(imhtml, font->size);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2807 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2808 else if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2809 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2810 font->size = oldfont->size;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2811 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2812
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2813 if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2814 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2815 font->underline = oldfont->underline;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2816 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2817 if (textdec && font->underline != 1
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
2818 && g_ascii_strcasecmp(textdec, "underline") == 0
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2819 && (imhtml->format_functions & GTK_IMHTML_UNDERLINE)
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2820 && !(options & GTK_IMHTML_NO_FORMATTING))
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2821 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2822 gtk_imhtml_toggle_underline(imhtml);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2823 font->underline = 1;
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2824 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2825 g_free(textdec);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2826
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2827 if (oldfont)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2828 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2829 font->bold = oldfont->bold;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2830 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2831 if (weight)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2832 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2833 if(!g_ascii_strcasecmp(weight, "normal")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2834 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2835 } else if(!g_ascii_strcasecmp(weight, "bold")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2836 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2837 } else if(!g_ascii_strcasecmp(weight, "bolder")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2838 font->bold++;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2839 } else if(!g_ascii_strcasecmp(weight, "lighter")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2840 if(font->bold > 0)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2841 font->bold--;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2842 } else {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2843 int num = atoi(weight);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2844 if(num >= 700)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2845 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2846 else
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2847 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2848 }
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2849 if (((font->bold && oldfont && !oldfont->bold) || (oldfont && oldfont->bold && !font->bold) || (font->bold && !oldfont)) && !(options & GTK_IMHTML_NO_FORMATTING))
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2850 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2851 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2852 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2853 g_free(weight);
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2854 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2855
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2856 g_free(style);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2857 g_free(size);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2858 fonts = g_slist_prepend (fonts, font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2859 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2860 break;
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2861 case 57: /* /SPAN */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2862 /* Inline CSS Support - Douglas Thrift */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2863 if (fonts && !imhtml->wbfo) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2864 GtkIMHtmlFontDetail *oldfont = NULL;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2865 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2866 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2867 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2868 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2869 fonts = g_slist_remove (fonts, font);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2870 if (fonts)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2871 oldfont = fonts->data;
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2872
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2873 if (!oldfont) {
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2874 gtk_imhtml_font_set_size(imhtml, 3);
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2875 if (font->underline && !(options & GTK_IMHTML_NO_FORMATTING))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2876 gtk_imhtml_toggle_underline(imhtml);
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2877 if (font->bold && !(options & GTK_IMHTML_NO_FORMATTING))
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2878 gtk_imhtml_toggle_bold(imhtml);
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2879 if (!(options & GTK_IMHTML_NO_FONTS))
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2880 gtk_imhtml_toggle_fontface(imhtml, NULL);
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2881 if (!(options & GTK_IMHTML_NO_COLOURS))
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2882 gtk_imhtml_toggle_forecolor(imhtml, NULL);
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2883 if (!(options & GTK_IMHTML_NO_COLOURS))
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2884 gtk_imhtml_toggle_backcolor(imhtml, NULL);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2885 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2886 else
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2887 {
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2888
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2889 if ((font->size != oldfont->size) && !(options & GTK_IMHTML_NO_SIZES))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2890 gtk_imhtml_font_set_size(imhtml, oldfont->size);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2891
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2892 if ((font->underline != oldfont->underline) && !(options & GTK_IMHTML_NO_FORMATTING))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2893 gtk_imhtml_toggle_underline(imhtml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2894
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2895 if (((font->bold && !oldfont->bold) || (oldfont->bold && !font->bold)) && !(options & GTK_IMHTML_NO_FORMATTING))
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2896 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2897
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2898 if (font->face && (!oldfont->face || strcmp(font->face, oldfont->face) != 0) && !(options & GTK_IMHTML_NO_FONTS))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2899 gtk_imhtml_toggle_fontface(imhtml, oldfont->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2900
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2901 if (font->fore && (!oldfont->fore || strcmp(font->fore, oldfont->fore) != 0) && !(options & GTK_IMHTML_NO_COLOURS))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2902 gtk_imhtml_toggle_forecolor(imhtml, oldfont->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2903
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2904 if (font->back && (!oldfont->back || strcmp(font->back, oldfont->back) != 0) && !(options & GTK_IMHTML_NO_COLOURS))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2905 gtk_imhtml_toggle_backcolor(imhtml, oldfont->back);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2906 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2907
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2908 g_free (font->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2909 g_free (font->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2910 g_free (font->back);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2911 g_free (font->sml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2912
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2913 g_free (font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2914 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2915 break;
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2916 case 60: /* SPAN */
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2917 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2918 case 62: /* comment */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2919 /* NEW_BIT (NEW_TEXT_BIT); */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
2920 ws[wpos] = '\0';
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
2921
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2922 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2923
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2924 if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS)) {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
2925 wpos = g_snprintf (ws, len, "%s", tag);
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2926 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2927 }
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2928 ws[0] = '\0'; wpos = 0;
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2929
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2930 /* NEW_BIT (NEW_COMMENT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2931 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2932 default:
6882
b6d0ac441869 [gaim-migrate @ 7428]
Tim Ringenbach <marv@pidgin.im>
parents: 6839
diff changeset
2933 break;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2934 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2935 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2936 pos += tlen;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
2937 g_free(tag); /* This was allocated back in VALID_TAG() */
15331
a8ef18791524 [gaim-migrate @ 18059]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15111
diff changeset
2938 } else if (imhtml->edit.link == NULL &&
a8ef18791524 [gaim-migrate @ 18059]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15111
diff changeset
2939 gtk_imhtml_is_smiley(imhtml, fonts, c, &smilelen)) {
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2940 GtkIMHtmlFontDetail *fd;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2941
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2942 gchar *sml = NULL;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2943 if (fonts) {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2944 fd = fonts->data;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2945 sml = fd->sml;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2946 }
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2947 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2948 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2949
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2950 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2951 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2952
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2953 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, ws, iter);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2954
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2955 c += smilelen;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2956 pos += smilelen;
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2957 wpos = 0;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2958 ws[0] = 0;
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2959 } else if (*c == '&' && (amp = purple_markup_unescape_entity(c, &tlen))) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2960 while(*amp) {
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2961 ws [wpos++] = *amp++;
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2962 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2963 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2964 pos += tlen;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2965 } else if (*c == '\n') {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2966 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2967 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2968 wpos++;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2969 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2970 ws[0] = '\0';
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2971 wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2972 /* NEW_BIT (NEW_TEXT_BIT); */
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2973 } else if (!br) { /* Don't insert a space immediately after an HTML break */
9621
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2974 /* A newline is defined by HTML as whitespace, which means we have to replace it with a word boundary.
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2975 * word breaks vary depending on the language used, so the correct thing to do is to use Pango to determine
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2976 * what language this is, determine the proper word boundary to use, and insert that. I'm just going to insert
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2977 * a space instead. What are the non-English speakers going to do? Complain in a language I'll understand?
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2978 * Bu-wahaha! */
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2979 ws[wpos] = ' ';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2980 wpos++;
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2981 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2982 ws[0] = '\0';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2983 wpos = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2984 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2985 c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2986 pos++;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2987 } else if ((len_protocol = gtk_imhtml_is_protocol(c)) > 0){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2988 while(len_protocol--){
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2989 /* Skip the next len_protocol characters, but make sure they're
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2990 copied into the ws array.
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2991 */
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2992 ws [wpos++] = *c++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2993 pos++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2994 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2995 } else if (*c) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2996 ws [wpos++] = *c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2997 pos++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2998 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2999 break;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3000 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3001 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3002 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3003 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3004
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3005 /* NEW_BIT(NEW_TEXT_BIT); */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3006
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3007 if(align_right) {
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3008 /* insert RLM+LRM at beginning of the line to set alignment */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3009 GtkTextIter line_iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3010 line_iter = *iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3011 gtk_text_iter_set_line(&line_iter, align_line);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3012 /* insert RLM character to set alignment */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3013 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3014 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3015 ws[wpos++] = 0x8F;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3016
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
3017 if (!rtl_direction)
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3018 {
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3019 /* insert LRM character to set direction */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3020 /* (alignment=right and direction=LTR) */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3021 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3022 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3023 ws[wpos++] = 0x8E;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3024 }
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3025
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3026 ws[wpos] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3027 gtk_text_buffer_insert(imhtml->text_buffer, &line_iter, ws, wpos);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3028 gtk_text_buffer_get_end_iter(gtk_text_iter_get_buffer(&line_iter), iter);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3029 ws[0] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3030 wpos = 0;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3031 }
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3032
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3033 while (fonts) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3034 GtkIMHtmlFontDetail *font = fonts->data;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3035 fonts = g_slist_remove (fonts, font);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3036 g_free (font->face);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3037 g_free (font->fore);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3038 g_free (font->back);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3039 g_free (font->sml);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3040 g_free (font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3041 }
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3042
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3043 g_free(ws);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
3044 g_free(bg);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3045
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3046 if (!imhtml->wbfo)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3047 gtk_imhtml_close_tags(imhtml, iter);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3048
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15391
diff changeset
3049 object = g_object_ref(G_OBJECT(imhtml));
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3050 g_signal_emit(object, signals[UPDATE_FORMAT], 0);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3051 g_object_unref(object);
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
3052
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3053 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3054
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3055 void gtk_imhtml_remove_smileys(GtkIMHtml *imhtml)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3056 {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3057 g_hash_table_destroy(imhtml->smiley_data);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3058 gtk_smiley_tree_destroy(imhtml->default_smilies);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3059 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
3060 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3061 imhtml->default_smilies = gtk_smiley_tree_new();
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3062 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3063
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3064 void gtk_imhtml_show_comments (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3065 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3066 {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
3067 imhtml->show_comments = show;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3068 }
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3069
11814
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3070 const char *
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3071 gtk_imhtml_get_protocol_name(GtkIMHtml *imhtml) {
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3072 return imhtml->protocol_name;
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3073 }
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3074
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3075 void
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
3076 gtk_imhtml_set_protocol_name(GtkIMHtml *imhtml, const gchar *protocol_name) {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3077 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3078 imhtml->protocol_name = g_strdup(protocol_name);
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3079 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3080
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3081 void
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3082 gtk_imhtml_delete(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3083 GList *l;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3084 GSList *sl;
11234
e23fd86e7581 [gaim-migrate @ 13377]
Daniel Atallah <datallah@pidgin.im>
parents: 11233
diff changeset
3085 GtkTextIter i, i_s, i_e;
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3086 GObject *object = g_object_ref(G_OBJECT(imhtml));
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3087
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3088 if (start == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3089 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &i_s);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3090 start = &i_s;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3091 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3092
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3093 if (end == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3094 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &i_e);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3095 end = &i_e;
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
3096 }
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3097
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3098 l = imhtml->scalables;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3099 while (l) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3100 GList *next = l->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3101 struct scalable_data *sd = l->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3102 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer,
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3103 &i, sd->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3104 if (gtk_text_iter_in_range(&i, start, end)) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3105 GtkIMHtmlScalable *scale = sd->scalable;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3106 scale->free(scale);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3107 imhtml->scalables = g_list_remove_link(imhtml->scalables, l);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3108 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3109 l = next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3110 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3111
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3112 sl = imhtml->im_images;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3113 while (sl) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3114 GSList *next = sl->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3115 struct im_image_data *img_data = sl->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3116 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer,
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3117 &i, img_data->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3118 if (gtk_text_iter_in_range(&i, start, end)) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3119 if (imhtml->funcs->image_unref)
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3120 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3121 imhtml->im_images = g_slist_delete_link(imhtml->im_images, sl);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3122 g_free(img_data);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3123 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3124 sl = next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3125 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3126 gtk_text_buffer_delete(imhtml->text_buffer, start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3127
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3128 g_object_unref(object);
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3129 }
2363
0767c14d7879 [gaim-migrate @ 2376]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2349
diff changeset
3130
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3131 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3132 {
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3133 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3134 GtkTextIter iter;
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3135
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3136 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
3137 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
3138 rect.y - rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3139 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
3140
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3141 }
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3142 void gtk_imhtml_page_down (GtkIMHtml *imhtml)
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3143 {
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3144 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3145 GtkTextIter iter;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3146
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3147 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
3148 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
3149 rect.y + rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3150 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
3151 }
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
3152
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3153 /* GtkIMHtmlScalable, gtk_imhtml_image, gtk_imhtml_hr */
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3154 GtkIMHtmlScalable *gtk_imhtml_image_new(GdkPixbuf *img, const gchar *filename, int id)
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
3155 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3156 GtkIMHtmlImage *im_image = g_malloc(sizeof(GtkIMHtmlImage));
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3157
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3158 GTK_IMHTML_SCALABLE(im_image)->scale = gtk_imhtml_image_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3159 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
3160 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
3161
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3162 im_image->pixbuf = img;
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3163 im_image->image = GTK_IMAGE(gtk_image_new_from_pixbuf(im_image->pixbuf));
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3164 im_image->width = gdk_pixbuf_get_width(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3165 im_image->height = gdk_pixbuf_get_height(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3166 im_image->mark = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3167 im_image->filename = g_strdup(filename);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3168 im_image->id = id;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3169 im_image->filesel = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3170
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3171 g_object_ref(img);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3172 return GTK_IMHTML_SCALABLE(im_image);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3173 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3174
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3175 static gboolean
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3176 animate_image_cb(gpointer data)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3177 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3178 GtkIMHtmlImage *im_image;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3179 int width, height;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3180 int delay;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3181
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3182 im_image = data;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3183
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3184 /* Update the pointer to this GdkPixbuf frame of the animation */
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3185 g_object_unref(G_OBJECT(im_image->pixbuf));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3186 gdk_pixbuf_animation_iter_advance(GTK_IMHTML_ANIMATION(im_image)->iter, NULL);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3187 im_image->pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(GTK_IMHTML_ANIMATION(im_image)->iter);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3188 g_object_ref(G_OBJECT(im_image->pixbuf));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3189
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3190 /* Update the displayed GtkImage */
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3191 width = gdk_pixbuf_get_width(gtk_image_get_pixbuf(im_image->image));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3192 height = gdk_pixbuf_get_height(gtk_image_get_pixbuf(im_image->image));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3193 if (width > 0 && height > 0)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3194 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3195 /* Need to scale the new frame to the same size as the old frame */
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3196 GdkPixbuf *tmp;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3197 tmp = gdk_pixbuf_scale_simple(im_image->pixbuf, width, height, GDK_INTERP_BILINEAR);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3198 gtk_image_set_from_pixbuf(im_image->image, tmp);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3199 g_object_unref(G_OBJECT(tmp));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3200 } else {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3201 /* Display at full-size */
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3202 gtk_image_set_from_pixbuf(im_image->image, im_image->pixbuf);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3203 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3204
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3205 delay = MIN(gdk_pixbuf_animation_iter_get_delay_time(GTK_IMHTML_ANIMATION(im_image)->iter), 100);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3206 GTK_IMHTML_ANIMATION(im_image)->timer = g_timeout_add(delay, animate_image_cb, im_image);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3207
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3208 return FALSE;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3209 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3210
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3211 GtkIMHtmlScalable *gtk_imhtml_animation_new(GdkPixbufAnimation *anim, const gchar *filename, int id)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3212 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3213 GtkIMHtmlImage *im_image = g_malloc(sizeof(GtkIMHtmlAnimation));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3214
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3215 GTK_IMHTML_SCALABLE(im_image)->scale = gtk_imhtml_image_scale;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3216 GTK_IMHTML_SCALABLE(im_image)->add_to = gtk_imhtml_image_add_to;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3217 GTK_IMHTML_SCALABLE(im_image)->free = gtk_imhtml_animation_free;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3218
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3219 GTK_IMHTML_ANIMATION(im_image)->anim = anim;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3220 if (gdk_pixbuf_animation_is_static_image(anim)) {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3221 GTK_IMHTML_ANIMATION(im_image)->iter = NULL;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3222 im_image->pixbuf = gdk_pixbuf_animation_get_static_image(anim);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3223 GTK_IMHTML_ANIMATION(im_image)->timer = 0;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3224 } else {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3225 int delay;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3226 GTK_IMHTML_ANIMATION(im_image)->iter = gdk_pixbuf_animation_get_iter(anim, NULL);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3227 im_image->pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(GTK_IMHTML_ANIMATION(im_image)->iter);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3228 delay = MIN(gdk_pixbuf_animation_iter_get_delay_time(GTK_IMHTML_ANIMATION(im_image)->iter), 100);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3229 GTK_IMHTML_ANIMATION(im_image)->timer = g_timeout_add(delay, animate_image_cb, im_image);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3230 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3231 im_image->image = GTK_IMAGE(gtk_image_new_from_pixbuf(im_image->pixbuf));
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3232 im_image->width = gdk_pixbuf_animation_get_width(anim);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3233 im_image->height = gdk_pixbuf_animation_get_height(anim);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3234 im_image->mark = NULL;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3235 im_image->filename = g_strdup(filename);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3236 im_image->id = id;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3237 im_image->filesel = NULL;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3238
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3239 g_object_ref(anim);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3240 g_object_ref(im_image->pixbuf);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3241
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3242 return GTK_IMHTML_SCALABLE(im_image);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3243 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3244
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3245 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
3246 {
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3247 GtkIMHtmlImage *im_image = (GtkIMHtmlImage *)scale;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3248
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3249 if (im_image->width > width || im_image->height > height) {
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3250 double ratio_w, ratio_h, ratio;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3251 int new_h, new_w;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3252 GdkPixbuf *new_image = NULL;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3253
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3254 ratio_w = ((double)width - 2) / im_image->width;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3255 ratio_h = ((double)height - 2) / im_image->height;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3256
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3257 ratio = (ratio_w < ratio_h) ? ratio_w : ratio_h;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3258
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3259 new_w = (int)(im_image->width * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3260 new_h = (int)(im_image->height * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3261
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3262 new_image = gdk_pixbuf_scale_simple(im_image->pixbuf, new_w, new_h, GDK_INTERP_BILINEAR);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3263 gtk_image_set_from_pixbuf(im_image->image, new_image);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3264 g_object_unref(G_OBJECT(new_image));
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3265 } else if (gdk_pixbuf_get_width(gtk_image_get_pixbuf(im_image->image)) != im_image->width) {
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3266 /* Enough space to show the full-size of the image. */
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3267 GdkPixbuf *new_image;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3268
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3269 new_image = gdk_pixbuf_scale_simple(im_image->pixbuf, im_image->width, im_image->height, GDK_INTERP_BILINEAR);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3270 gtk_image_set_from_pixbuf(im_image->image, new_image);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3271 g_object_unref(G_OBJECT(new_image));
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3272 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3273 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3274
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3275 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3276 image_save_yes_cb(GtkIMHtmlImage *image, const char *filename)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3277 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3278 gchar *type = NULL;
5019
ac3e5e1f588a [gaim-migrate @ 5355]
Luke Schierer <lschiere@pidgin.im>
parents: 5015
diff changeset
3279 GError *error = NULL;
5015
3a8f6559f866 [gaim-migrate @ 5351]
Nathan Walp <nwalp@pidgin.im>
parents: 5012
diff changeset
3280 #if GTK_CHECK_VERSION(2,2,0)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3281 GSList *formats = gdk_pixbuf_get_formats();
6162
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3282 #else
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3283 char *basename = g_path_get_basename(filename);
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3284 char *ext = strrchr(basename, '.');
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3285 #endif
17694
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3286 char *newfilename;
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3287
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3288 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3289 image->filesel = NULL;
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3290
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3291 #if GTK_CHECK_VERSION(2,2,0)
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3292 while (formats) {
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3293 GdkPixbufFormat *format = formats->data;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3294 gchar **extensions = gdk_pixbuf_format_get_extensions(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3295 gpointer p = extensions;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3296
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3297 while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3298 gchar *fmt_ext = extensions[0];
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3299 const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3300
17695
5e7fcc2f23cc Compare the user-entered file extension to the GDK file extension
Mark Doliner <markdoliner@pidgin.im>
parents: 17694
diff changeset
3301 if(!g_ascii_strcasecmp(fmt_ext, file_ext)){
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3302 type = gdk_pixbuf_format_get_name(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3303 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3304 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3305
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3306 extensions++;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3307 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3308
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3309 g_strfreev(p);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3310
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3311 if (type)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3312 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3313
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3314 formats = formats->next;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3315 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3316
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3317 g_slist_free(formats);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3318 #else
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3319 /* this is really ugly code, but I think it will work */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3320 if (ext) {
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3321 ext++;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3322 if (!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg"))
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3323 type = g_strdup("jpeg");
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3324 else if (!g_ascii_strcasecmp(ext, "png"))
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3325 type = g_strdup("png");
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3326 }
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3327
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3328 g_free(basename);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3329 #endif
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3330
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3331 /* 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
3332 it's a png */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3333 if (!type){
17694
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3334 char *basename, *tmp;
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3335 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3336 GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3337 _("<span size='larger' weight='bold'>Unrecognized file type</span>\n\nDefaulting to PNG."));
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3338 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3339 GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3340 _("Unrecognized file type\n\nDefaulting to PNG."));
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3341 #endif
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3342
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3343 g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3344 gtk_widget_show(dialog);
17694
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3345
9717
3c8f42ca313e [gaim-migrate @ 10578]
Mark Doliner <markdoliner@pidgin.im>
parents: 9709
diff changeset
3346 type = g_strdup("png");
17694
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3347 basename = g_path_get_basename(filename);
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3348 tmp = strrchr(basename, '.');
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3349 if (tmp != NULL)
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3350 tmp[0] = '\0';
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3351 newfilename = g_strdup_printf("%s.png", basename);
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3352 g_free(basename);
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3353 } else {
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3354 /*
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3355 * We're able to save the file in it's original format, so we
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3356 * can use the original file name.
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3357 */
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3358 newfilename = g_strdup(filename);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3359 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3360
17694
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3361 gdk_pixbuf_save(image->pixbuf, newfilename, type, &error, NULL);
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3362
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3363 g_free(newfilename);
d7b54168059b When right-clicking on an image in a GtkIMHtml to save it, if the file
Mark Doliner <markdoliner@pidgin.im>
parents: 17546
diff changeset
3364 g_free(type);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3365
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3366 if (error){
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3367 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3368 GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3369 _("<span size='larger' weight='bold'>Error saving image</span>\n\n%s"), error->message);
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3370 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3371 GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3372 _("Error saving image\n\n%s"), error->message);
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3373 #endif
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3374 g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3375 gtk_widget_show(dialog);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3376 g_error_free(error);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3377 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3378 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3379
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3380 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3381 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3382 image_save_check_if_exists_cb(GtkWidget *widget, gint response, GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3383 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3384 gchar *filename;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3385
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3386 if (response != GTK_RESPONSE_ACCEPT) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3387 gtk_widget_destroy(widget);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3388 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3389 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3390 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3391
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3392 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3393 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3394 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3395 image_save_check_if_exists_cb(GtkWidget *button, GtkIMHtmlImage *image)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3396 {
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3397 gchar *filename;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3398
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3399 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(image->filesel)));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3400
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3401 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3402 gchar *dirname;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3403 /* append a / is needed */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3404 if (filename[strlen(filename) - 1] != G_DIR_SEPARATOR) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3405 dirname = g_strconcat(filename, G_DIR_SEPARATOR_S, NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3406 } else {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3407 dirname = g_strdup(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3408 }
9574
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3409 gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), dirname);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3410 g_free(dirname);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3411 g_free(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3412 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3413 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3414 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3415
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3416 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3417 * XXX - We should probably prompt the user to determine if they really
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3418 * want to overwrite the file or not. However, I don't feel like doing
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3419 * that, so we're just always going to overwrite if the file exists.
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3420 */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3421 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3422 if (g_file_test(filename, G_FILE_TEST_EXISTS)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3423 } else
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3424 image_save_yes_cb(image, filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3425 */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3426
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3427 image_save_yes_cb(image, filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3428
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3429 g_free(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3430 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3431
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3432 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3433 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3434 image_save_cancel_cb(GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3435 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3436 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3437 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3438 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3439 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3440
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3441 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3442 gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3443 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3444 if (image->filesel != NULL) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3445 gtk_window_present(GTK_WINDOW(image->filesel));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3446 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3447 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3448
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3449 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3450 image->filesel = gtk_file_chooser_dialog_new(_("Save Image"),
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3451 NULL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3452 GTK_FILE_CHOOSER_ACTION_SAVE,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3453 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3454 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3455 NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3456 gtk_dialog_set_default_response(GTK_DIALOG(image->filesel), GTK_RESPONSE_ACCEPT);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3457 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3458 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(image->filesel), image->filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3459 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(image->filesel)), "response",
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3460 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3461 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3462 image->filesel = gtk_file_selection_new(_("Save Image"));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3463 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3464 gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), image->filename);
9574
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3465 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)), "delete_event",
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3466 G_CALLBACK(image_save_cancel_cb), image);
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3467 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->cancel_button),
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3468 "clicked", G_CALLBACK(image_save_cancel_cb), image);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3469 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->ok_button), "clicked",
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3470 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3471 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3472
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3473 gtk_widget_show(image->filesel);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3474 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3475
9815
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3476 /*
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3477 * So, um, AIM Direct IM lets you send any file, not just images. You can
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3478 * just insert a sound or a file or whatever in a conversation. It's
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3479 * basically like file transfer, except there is an icon to open the file
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
3480 * embedded in the conversation. Someone should make the Purple core handle
9815
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3481 * all of that.
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3482 */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3483 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
3484 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3485 GdkEventButton *event_button = (GdkEventButton *) event;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3486
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3487 if (event->type == GDK_BUTTON_RELEASE) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3488 if(event_button->button == 3) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3489 GtkWidget *img, *item, *menu;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3490 gchar *text = g_strdup_printf(_("_Save Image..."));
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3491 menu = gtk_menu_new();
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3492
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3493 /* buttons and such */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3494 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
3495 item = gtk_image_menu_item_new_with_mnemonic(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3496 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
3497 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
3498 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3499
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3500 gtk_widget_show_all(menu);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3501 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3502 event_button->button, event_button->time);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3503
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3504 g_free(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3505 return TRUE;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3506 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3507 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3508 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3509 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
3510 be caught by the regular GtkTextView menu */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3511 else
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3512 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
3513
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3514 }
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3515
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3516 static gboolean gtk_imhtml_smiley_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlSmiley *smiley)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3517 {
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3518 GdkPixbufAnimation *anim = NULL;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3519 GtkIMHtmlScalable *image = NULL;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3520 gboolean ret;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3521
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3522 if (event->type != GDK_BUTTON_RELEASE || ((GdkEventButton*)event)->button != 3)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3523 return FALSE;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3524
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3525 anim = gtk_smiley_get_image(smiley);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3526 if (!anim)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3527 return FALSE;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3528
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3529 image = gtk_imhtml_animation_new(anim, smiley->smile, 0);
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3530 ret = gtk_imhtml_image_clicked(w, event, (GtkIMHtmlImage*)image);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3531 g_object_set_data_full(G_OBJECT(w), "image-data", image, (GDestroyNotify)gtk_imhtml_image_free);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3532 return ret;
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3533 }
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
3534
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3535 void gtk_imhtml_image_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3536 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3537 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3538
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3539 g_object_unref(image->pixbuf);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3540 g_free(image->filename);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3541 if (image->filesel)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3542 gtk_widget_destroy(image->filesel);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3543 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3544 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3545
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3546 void gtk_imhtml_animation_free(GtkIMHtmlScalable *scale)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3547 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3548 GtkIMHtmlAnimation *animation = (GtkIMHtmlAnimation *)scale;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3549
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3550 if (animation->timer > 0)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3551 g_source_remove(animation->timer);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3552 if (animation->iter != NULL)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3553 g_object_unref(animation->iter);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3554 g_object_unref(animation->anim);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3555
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3556 gtk_imhtml_image_free(scale);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3557 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3558
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3559 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
3560 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3561 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3562 GtkWidget *box = gtk_event_box_new();
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3563 char *tag;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3564 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
3565
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3566 gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(image->image));
9229
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3567
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3568 if(!gtk_check_version(2, 4, 0))
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3569 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3570
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3571 gtk_widget_show(GTK_WIDGET(image->image));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3572 gtk_widget_show(box);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3573
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3574 tag = g_strdup_printf("<IMG ID=\"%d\">", image->id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3575 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", tag, g_free);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3576 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "[Image]");
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3577
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
3578 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), box, anchor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3579 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
3580 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3581
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3582 GtkIMHtmlScalable *gtk_imhtml_hr_new()
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3583 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3584 GtkIMHtmlHr *hr = g_malloc(sizeof(GtkIMHtmlHr));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3585
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3586 GTK_IMHTML_SCALABLE(hr)->scale = gtk_imhtml_hr_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3587 GTK_IMHTML_SCALABLE(hr)->add_to = gtk_imhtml_hr_add_to;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3588 GTK_IMHTML_SCALABLE(hr)->free = gtk_imhtml_hr_free;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3589
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3590 hr->sep = gtk_hseparator_new();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3591 gtk_widget_set_size_request(hr->sep, 5000, 2);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3592 gtk_widget_show(hr->sep);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3593
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3594 return GTK_IMHTML_SCALABLE(hr);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3595 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3596
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3597 void gtk_imhtml_hr_scale(GtkIMHtmlScalable *scale, int width, int height)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3598 {
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
3599 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
3600 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3601
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3602 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
3603 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3604 GtkIMHtmlHr *hr = (GtkIMHtmlHr *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3605 GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3606 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_htmltext", "<hr>");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3607 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "\n---\n");
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
3608 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), hr->sep, anchor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3609 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3610
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3611 void gtk_imhtml_hr_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3612 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3613 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3614 }
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3615
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3616 gboolean gtk_imhtml_search_find(GtkIMHtml *imhtml, const gchar *text)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3617 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3618 GtkTextIter iter, start, end;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3619 gboolean new_search = TRUE;
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3620 GtkTextMark *start_mark;
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3621
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3622 g_return_val_if_fail(imhtml != NULL, FALSE);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3623 g_return_val_if_fail(text != NULL, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3624
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3625 start_mark = gtk_text_buffer_get_mark(imhtml->text_buffer, "search");
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3626
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3627 if (start_mark && imhtml->search_string && !strcmp(text, imhtml->search_string))
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3628 new_search = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3629
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3630 if (new_search) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3631 gtk_imhtml_search_clear(imhtml);
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3632 g_free(imhtml->search_string);
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3633 imhtml->search_string = g_strdup(text);
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3634 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3635 } else {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3636 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter,
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3637 start_mark);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3638 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3639
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3640 if (gtk_source_iter_backward_search(&iter, imhtml->search_string,
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3641 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3642 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3643 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3644 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0);
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3645 gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &start, FALSE);
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3646 if (new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3647 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3648 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
3649 do
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3650 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "search", &start, &end);
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3651 while (gtk_source_iter_backward_search(&start, imhtml->search_string,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3652 GTK_SOURCE_SEARCH_VISIBLE_ONLY |
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
3653 GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3654 &start, &end, NULL));
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3655 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3656 return TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3657 }
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3658 else if (!new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3659 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3660 /* We hit the end, so start at the beginning again. */
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3661 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3662
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3663 if (gtk_source_iter_backward_search(&iter, imhtml->search_string,
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3664 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3665 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3666 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3667 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0);
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3668 gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &start, FALSE);
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3669
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3670 return TRUE;
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3671 }
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3672
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3673 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3674
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3675 return FALSE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3676 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3677
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3678 void gtk_imhtml_search_clear(GtkIMHtml *imhtml)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3679 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3680 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3681
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3682 g_return_if_fail(imhtml != NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3683
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3684 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3685 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3686
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3687 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "search", &start, &end);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3688 g_free(imhtml->search_string);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3689 imhtml->search_string = NULL;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3690 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3691
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3692 static GtkTextTag *find_font_forecolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3693 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3694 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3695 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3696
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3697 g_snprintf(str, sizeof(str), "FORECOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3698
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3699 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3700 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3701 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3702 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3703 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3704 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3705 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3706 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3707 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3708 gdk_color_parse("black", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3709 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3710 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground-gdk", &gcolor, NULL);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3711 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3712
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3713 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3714 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3715
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3716 static GtkTextTag *find_font_backcolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3717 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3718 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3719 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3720
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3721 g_snprintf(str, sizeof(str), "BACKCOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3722
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3723 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3724 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3725 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3726 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3727 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3728 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3729 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3730 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3731 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3732 gdk_color_parse("white", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3733 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3734 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "background-gdk", &gcolor, NULL);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3735 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3736
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3737 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3738 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3739
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3740 static GtkTextTag *find_font_background_tag(GtkIMHtml *imhtml, gchar *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3741 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3742 gchar str[19];
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3743 GtkTextTag *tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3744
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3745 g_snprintf(str, sizeof(str), "BACKGROUND %s", color);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3746
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3747 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3748 if (!tag)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3749 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3750
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3751 return tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3752 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3753
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3754 static GtkTextTag *find_font_face_tag(GtkIMHtml *imhtml, gchar *face)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3755 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3756 gchar str[256];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3757 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3758
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3759 g_snprintf(str, sizeof(str), "FONT FACE %s", face);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3760 str[255] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3761
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3762 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3763 if (!tag)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3764 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "family", face, NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3765
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3766 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3767 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3768
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3769 static GtkTextTag *find_font_size_tag(GtkIMHtml *imhtml, int size)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3770 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3771 gchar str[24];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3772 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3773
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3774 g_snprintf(str, sizeof(str), "FONT SIZE %d", size);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3775 str[23] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3776
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3777 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3778 if (!tag) {
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3779 /* For reasons I don't understand, setting "scale" here scaled
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3780 * based on some default size other than my theme's default
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3781 * size. Our size 4 was actually smaller than our size 3 for
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3782 * me. So this works around that oddity.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3783 */
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3784 GtkTextAttributes *attr = gtk_text_view_get_default_attributes(GTK_TEXT_VIEW(imhtml));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3785 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "size",
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3786 (gint) (pango_font_description_get_size(attr->font) *
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
3787 (double) POINT_SIZE(size)), NULL);
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3788 gtk_text_attributes_unref(attr);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3789 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3790
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3791 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3792 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3793
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3794 static void remove_tag_by_prefix(GtkIMHtml *imhtml, const GtkTextIter *i, const GtkTextIter *e,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3795 const char *prefix, guint len, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3796 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3797 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3798 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3799
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3800 tags = gtk_text_iter_get_tags(i);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3801
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3802 for (l = tags; l; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3803 GtkTextTag *tag = l->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3804
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3805 if (tag->name && !strncmp(tag->name, prefix, len))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3806 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, i, e);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3807 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3808
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3809 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3810
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3811 if (homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3812 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3813
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3814 iter = *i;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3815
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3816 while (gtk_text_iter_forward_char(&iter) && !gtk_text_iter_equal(&iter, e)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3817 if (gtk_text_iter_begins_tag(&iter, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3818 tags = gtk_text_iter_get_toggled_tags(&iter, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3819
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3820 for (l = tags; l; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3821 GtkTextTag *tag = l->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3822
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3823 if (tag->name && !strncmp(tag->name, prefix, len))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3824 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, &iter, e);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3825 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3826
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3827 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3828 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3829 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3830 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3831
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3832 static void remove_font_size(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3833 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3834 remove_tag_by_prefix(imhtml, i, e, "FONT SIZE ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3835 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3836
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3837 static void remove_font_face(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3838 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3839 remove_tag_by_prefix(imhtml, i, e, "FONT FACE ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3840 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3841
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3842 static void remove_font_forecolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3843 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3844 remove_tag_by_prefix(imhtml, i, e, "FORECOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3845 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3846
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3847 static void remove_font_backcolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3848 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3849 remove_tag_by_prefix(imhtml, i, e, "BACKCOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3850 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3851
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3852 static void remove_font_background(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3853 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3854 remove_tag_by_prefix(imhtml, i, e, "BACKGROUND ", 10, homo);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3855 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3856
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3857 static void remove_font_link(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3858 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3859 remove_tag_by_prefix(imhtml, i, e, "LINK ", 5, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3860 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3861
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3862 static void
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3863 imhtml_clear_formatting(GtkIMHtml *imhtml)
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3864 {
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3865 GtkTextIter start, end;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3866
12796
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3867 if (!imhtml->editable)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3868 return;
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3869
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3870 if (imhtml->wbfo)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3871 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3872 else
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3873 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3874 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3875
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3876 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3877 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3878 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3879 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3880 remove_font_size(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3881 remove_font_face(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3882 remove_font_forecolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3883 remove_font_backcolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3884 remove_font_background(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3885 remove_font_link(imhtml, &start, &end, FALSE);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3886
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3887 imhtml->edit.bold = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3888 imhtml->edit.italic = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3889 imhtml->edit.underline = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3890 imhtml->edit.strike = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3891 imhtml->edit.fontsize = 0;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3892
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3893 g_free(imhtml->edit.fontface);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3894 imhtml->edit.fontface = NULL;
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3895
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3896 g_free(imhtml->edit.forecolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3897 imhtml->edit.forecolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3898
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3899 g_free(imhtml->edit.backcolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3900 imhtml->edit.backcolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3901
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3902 g_free(imhtml->edit.background);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3903 imhtml->edit.background = NULL;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3904 }
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3905
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3906 /* Editable stuff */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3907 static void preinsert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3908 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3909 imhtml->insert_offset = gtk_text_iter_get_offset(iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3910 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3911
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3912 static void insert_ca_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextChildAnchor *arg2, gpointer user_data)
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3913 {
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3914 GtkTextIter start;
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3915
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3916 start = *arg1;
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3917 gtk_text_iter_backward_char(&start);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3918
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3919 gtk_imhtml_apply_tags_on_insert(user_data, &start, arg1);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3920 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3921
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3922 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *end, gchar *text, gint len, GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3923 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3924 GtkTextIter start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3925
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3926 if (!len)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3927 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3928
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3929 start = *end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3930 gtk_text_iter_set_offset(&start, imhtml->insert_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3931
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3932 gtk_imhtml_apply_tags_on_insert(imhtml, &start, end);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3933 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3934
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3935 static void delete_cb(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, GtkIMHtml *imhtml)
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3936 {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3937 GSList *tags, *l;
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3938
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3939 tags = gtk_text_iter_get_tags(start);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3940 for (l = tags; l != NULL; l = l->next) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3941 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3942
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3943 if (tag && /* Remove the formatting only if */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3944 gtk_text_iter_starts_word(start) && /* beginning of a word */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3945 gtk_text_iter_begins_tag(start, tag) && /* the tag starts with the selection */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3946 (!gtk_text_iter_has_tag(end, tag) || /* the tag ends within the selection */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3947 gtk_text_iter_ends_tag(end, tag))) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3948 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, start, end);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3949 if (tag->name &&
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3950 strncmp(tag->name, "LINK ", 5) == 0 && imhtml->edit.link) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3951 gtk_imhtml_toggle_link(imhtml, NULL);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3952 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3953 }
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3954 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3955 g_slist_free(tags);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3956 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3957
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3958 static void gtk_imhtml_apply_tags_on_insert(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end)
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3959 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3960 if (imhtml->edit.bold)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3961 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3962 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3963 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3964
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3965 if (imhtml->edit.italic)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3966 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3967 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3968 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3969
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3970 if (imhtml->edit.underline)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3971 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3972 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3973 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3974
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3975 if (imhtml->edit.strike)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3976 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", start, end);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3977 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3978 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", start, end);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3979
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3980 if (imhtml->edit.forecolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3981 remove_font_forecolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3982 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3983 find_font_forecolor_tag(imhtml, imhtml->edit.forecolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3984 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3985 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3986
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3987 if (imhtml->edit.backcolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3988 remove_font_backcolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3989 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3990 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3991 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3992 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3993
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3994 if (imhtml->edit.background) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3995 remove_font_background(imhtml, start, end, TRUE);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3996 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3997 find_font_background_tag(imhtml, imhtml->edit.background),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3998 start, end);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3999 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4000 if (imhtml->edit.fontface) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4001 remove_font_face(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4002 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4003 find_font_face_tag(imhtml, imhtml->edit.fontface),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4004 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4005 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4006
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4007 if (imhtml->edit.fontsize) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4008 remove_font_size(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4009 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4010 find_font_size_tag(imhtml, imhtml->edit.fontsize),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4011 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4012 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4013
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4014 if (imhtml->edit.link) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4015 remove_font_link(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4016 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4017 imhtml->edit.link,
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4018 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4019 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4020 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4021
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4022 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4023 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4024 gtk_text_view_set_editable(GTK_TEXT_VIEW(imhtml), editable);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4025 /*
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4026 * We need a visible caret for accessibility, so mouseless
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4027 * people can highlight stuff.
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4028 */
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4029 /* 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
4030 imhtml->editable = editable;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4031 imhtml->format_functions = GTK_IMHTML_ALL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4032
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4033 if (editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4034 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set",
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4035 G_CALLBACK(mark_set_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4036 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4037
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4038 void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4039 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4040 g_return_if_fail(imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4041
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4042 imhtml->wbfo = wbfo;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4043 }
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4044
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4045 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4046 {
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4047 GObject *object = g_object_ref(G_OBJECT(imhtml));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4048 imhtml->format_functions = buttons;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4049 g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4050 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4051 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4052
8788
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4053 GtkIMHtmlButtons gtk_imhtml_get_format_functions(GtkIMHtml *imhtml)
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4054 {
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4055 return imhtml->format_functions;
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4056 }
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4057
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4058 void gtk_imhtml_get_current_format(GtkIMHtml *imhtml, gboolean *bold,
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4059 gboolean *italic, gboolean *underline)
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4060 {
12900
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4061 if (bold != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4062 (*bold) = imhtml->edit.bold;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4063 if (italic != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4064 (*italic) = imhtml->edit.italic;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4065 if (underline != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4066 (*underline) = imhtml->edit.underline;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4067 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4068
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4069 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4070 gtk_imhtml_get_current_fontface(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4071 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4072 return g_strdup(imhtml->edit.fontface);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4073 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4074
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4075 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4076 gtk_imhtml_get_current_forecolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4077 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4078 return g_strdup(imhtml->edit.forecolor);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4079 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4080
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4081 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4082 gtk_imhtml_get_current_backcolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4083 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4084 return g_strdup(imhtml->edit.backcolor);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4085 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4086
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4087 char *
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4088 gtk_imhtml_get_current_background(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4089 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4090 return g_strdup(imhtml->edit.background);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4091 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4092
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4093 gint
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4094 gtk_imhtml_get_current_fontsize(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4095 {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4096 return imhtml->edit.fontsize;
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4097 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4098
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4099 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4100 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4101 return imhtml->editable;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4102 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4103
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4104 void
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4105 gtk_imhtml_clear_formatting(GtkIMHtml *imhtml)
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4106 {
11275
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4107 GObject *object;
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4108
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4109 object = g_object_ref(G_OBJECT(imhtml));
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4110 g_signal_emit(object, signals[CLEAR_FORMAT], 0);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4111
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4112 gtk_widget_grab_focus(GTK_WIDGET(imhtml));
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4113
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4114 g_object_unref(object);
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4115 }
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4116
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4117 /*
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4118 * I had this crazy idea about changing the text cursor color to reflex the foreground color
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4119 * of the text about to be entered. This is the place you'd do it, along with the place where
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4120 * we actually set a new foreground color.
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4121 * I may not do this, because people will bitch about Purple overriding their gtk theme's cursor
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4122 * colors.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4123 *
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4124 * Just in case I do do this, I asked about what to set the secondary text cursor to.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4125 *
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4126 * (12:45:27) ?? ???: secondary_cursor_color = (rgb(background) + rgb(primary_cursor_color) ) / 2
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4127 * (12:45:55) ?? ???: understand?
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4128 * (12:46:14) Tim: yeah. i didn't know there was an exact formula
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8729
diff changeset
4129 * (12:46:56) ?? ???: u might need to extract separate each color from RGB
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4130 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4131
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4132 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4133 GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4134 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4135 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4136 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4137
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4138 if (mark != gtk_text_buffer_get_insert(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4139 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4140
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4141 if (!gtk_text_buffer_get_char_count(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4142 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4143
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4144 imhtml->edit.bold = imhtml->edit.italic = imhtml->edit.underline = imhtml->edit.strike = FALSE;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4145 g_free(imhtml->edit.forecolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4146 imhtml->edit.forecolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4147
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4148 g_free(imhtml->edit.backcolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4149 imhtml->edit.backcolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4150
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4151 g_free(imhtml->edit.fontface);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4152 imhtml->edit.fontface = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4153
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4154 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4155 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4156
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4157 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4158
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4159
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4160 if (gtk_text_iter_is_end(&iter))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4161 tags = gtk_text_iter_get_toggled_tags(&iter, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4162 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4163 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4164
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4165 for (l = tags; l != NULL; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4166 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4167
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4168 if (tag->name) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4169 if (strcmp(tag->name, "BOLD") == 0)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4170 imhtml->edit.bold = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4171 else if (strcmp(tag->name, "ITALICS") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4172 imhtml->edit.italic = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4173 else if (strcmp(tag->name, "UNDERLINE") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4174 imhtml->edit.underline = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4175 else if (strcmp(tag->name, "STRIKE") == 0)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4176 imhtml->edit.strike = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4177 else if (strncmp(tag->name, "FORECOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4178 imhtml->edit.forecolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4179 else if (strncmp(tag->name, "BACKCOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4180 imhtml->edit.backcolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4181 else if (strncmp(tag->name, "FONT FACE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4182 imhtml->edit.fontface = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4183 else if (strncmp(tag->name, "FONT SIZE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4184 imhtml->edit.fontsize = strtol(&(tag->name)[10], NULL, 10);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4185 else if ((strncmp(tag->name, "LINK ", 5) == 0) && !gtk_text_iter_is_end(&iter))
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4186 imhtml->edit.link = tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4187 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4188 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4189
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4190 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4191 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4192
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4193 static void imhtml_emit_signal_for_format(GtkIMHtml *imhtml, GtkIMHtmlButtons button)
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4194 {
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4195 GObject *object;
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4196
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4197 g_return_if_fail(imhtml != NULL);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4198
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4199 object = g_object_ref(G_OBJECT(imhtml));
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4200 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4201 g_object_unref(object);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4202 }
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4203
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4204 static void imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4205 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4206 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4207
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4208 imhtml->edit.bold = !imhtml->edit.bold;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4209
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4210 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4211 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4212 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4213 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4214 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4215 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4216 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4217 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4218 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4219 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4220 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4221
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4222 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4223 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4224
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4225 void gtk_imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4226 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4227 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_BOLD);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4228 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4229
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4230 static void imhtml_toggle_italic(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4231 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4232 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4233
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4234 imhtml->edit.italic = !imhtml->edit.italic;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4235
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4236 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4237 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4238 if (imhtml->edit.italic)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4239 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4240 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4241 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4242 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4243 if (imhtml->edit.italic)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4244 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4245 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4246 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4247 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4248 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4249
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4250 void gtk_imhtml_toggle_italic(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4251 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4252 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_ITALIC);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4253 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4254
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4255 static void imhtml_toggle_underline(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4256 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4257 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4258
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4259 imhtml->edit.underline = !imhtml->edit.underline;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4260
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4261 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4262 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4263 if (imhtml->edit.underline)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4264 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4265 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4266 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4267 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4268 if (imhtml->edit.underline)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4269 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4270 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4271 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4272 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4273 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4274
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4275 void gtk_imhtml_toggle_underline(GtkIMHtml *imhtml)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4276 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4277 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_UNDERLINE);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4278 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4279
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4280 static void imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4281 {
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4282 GtkTextIter start, end;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4283
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4284 imhtml->edit.strike = !imhtml->edit.strike;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4285
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4286 if (imhtml->wbfo) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4287 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4288 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4289 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4290 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4291 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4292 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4293 if (imhtml->edit.strike)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4294 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4295 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4296 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4297 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4298 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4299
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4300 void gtk_imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4301 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4302 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_STRIKE);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4303 }
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4304
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4305 void gtk_imhtml_font_set_size(GtkIMHtml *imhtml, gint size)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4306 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4307 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4308 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4309
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4310 imhtml->edit.fontsize = size;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4311
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4312 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4313 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4314 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4315 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4316 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4317 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4318 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4319 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4320 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4321 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4322
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4323 object = g_object_ref(G_OBJECT(imhtml));
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4324 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_SHRINK | GTK_IMHTML_GROW);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4325 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4326 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4327
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4328 static void imhtml_font_shrink(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4329 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4330 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4331
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4332 if (imhtml->edit.fontsize == 1)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4333 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4334
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4335 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4336 imhtml->edit.fontsize = 2;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4337 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4338 imhtml->edit.fontsize--;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4339
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4340 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4341 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4342 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4343 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4344 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4345 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4346 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4347 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4348 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4349 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4350 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4351
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4352 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4353 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4354 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_SHRINK);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4355 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4356
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4357 static void imhtml_font_grow(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4358 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4359 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4360
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4361 if (imhtml->edit.fontsize == MAX_FONT_SIZE)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4362 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4363
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4364 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4365 imhtml->edit.fontsize = 4;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4366 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4367 imhtml->edit.fontsize++;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4368
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4369 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4370 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4371 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4372 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4373 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4374 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4375 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4376 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4377 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4378 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4379 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4380
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4381 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4382 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4383 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_GROW);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4384 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4385
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4386 static gboolean gtk_imhtml_toggle_str_tag(GtkIMHtml *imhtml, const char *value, char **edit_field,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4387 void (*remove_func)(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4388 GtkTextTag *(find_func)(GtkIMHtml *imhtml, gchar *color), GtkIMHtmlButtons button)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4389 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4390 GObject *object;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4391 GtkTextIter start;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4392 GtkTextIter end;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4393
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4394 g_free(*edit_field);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4395 *edit_field = NULL;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4396
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4397 if (value && strcmp(value, "") != 0)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4398 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4399 *edit_field = g_strdup(value);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4400
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4401 if (imhtml->wbfo)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4402 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4403 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4404 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4405 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4406 find_func(imhtml, *edit_field), &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4407 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4408 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4409 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4410 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4411 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4412 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4413 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4414 remove_func(imhtml, &start, &end, FALSE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4415 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4416 find_func(imhtml,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4417 *edit_field),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4418 &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4419 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4420 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4421 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4422 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4423 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4424 if (imhtml->wbfo)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4425 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4426 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4427 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4428 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4429 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4430 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4431 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4432 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4433 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4434 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4435
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4436 object = g_object_ref(G_OBJECT(imhtml));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4437 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4438 g_object_unref(object);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4439
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4440 return *edit_field != NULL;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4441 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4442
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4443 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4444 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4445 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.forecolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4446 remove_font_forecolor, find_font_forecolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4447 GTK_IMHTML_FORECOLOR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4448 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4449
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4450 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4451 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4452 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.backcolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4453 remove_font_backcolor, find_font_backcolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4454 GTK_IMHTML_BACKCOLOR);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4455 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4456
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4457 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4458 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4459 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.background,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4460 remove_font_background, find_font_background_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4461 GTK_IMHTML_BACKGROUND);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4462 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4463
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4464 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4465 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4466 return gtk_imhtml_toggle_str_tag(imhtml, face, &imhtml->edit.fontface,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4467 remove_font_face, find_font_face_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4468 GTK_IMHTML_FACE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4469 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4470
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4471 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4472 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4473 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4474 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4475 GtkTextTag *linktag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4476 static guint linkno = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4477 gchar str[48];
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4478 GdkColor *color = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4479
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4480 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4481
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4482 if (url) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4483 g_snprintf(str, sizeof(str), "LINK %d", linkno++);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4484 str[47] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4485
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4486 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &color, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4487 if (color) {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4488 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground-gdk", color, "underline", PANGO_UNDERLINE_SINGLE, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4489 gdk_color_free(color);
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4490 } else {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4491 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL);
9008
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4492 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4493 g_object_set_data_full(G_OBJECT(linktag), "link_url", g_strdup(url), g_free);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4494 g_signal_connect(G_OBJECT(linktag), "event", G_CALLBACK(tag_event), NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4495
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4496 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4497 remove_font_link(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4498 gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4499 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4500 }
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4501
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4502 object = g_object_ref(G_OBJECT(imhtml));
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4503 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_LINK);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4504 g_object_unref(object);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4505 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4506
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4507 void gtk_imhtml_insert_link(GtkIMHtml *imhtml, GtkTextMark *mark, const char *url, const char *text)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4508 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4509 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4510
9599
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4511 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4512 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4513
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4514 gtk_imhtml_toggle_link(imhtml, url);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4515 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4516 gtk_text_buffer_insert(imhtml->text_buffer, &iter, text, -1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4517 gtk_imhtml_toggle_link(imhtml, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4518 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4519
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4520 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
4521 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4522 GtkTextMark *mark;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4523 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4524
11750
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4525 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4526 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4527
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4528 mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4529
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4530 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4531 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, smiley, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4532 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4533
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4534 static gboolean
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4535 image_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4536 {
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4537 GTK_WIDGET_CLASS(GTK_WIDGET_GET_CLASS(widget))->expose_event(widget, event);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4538
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4539 return TRUE;
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4540 }
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4541
16385
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4542 /* In case the smiley gets removed from the imhtml before it gets removed from the queue */
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4543 static void animated_smiley_destroy_cb(GtkObject *widget, GtkIMHtml *imhtml)
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4544 {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4545 GList *l = imhtml->animations->head;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4546 while (l) {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4547 GList *next = l->next;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4548 if (l->data == widget) {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4549 if (l == imhtml->animations->tail)
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4550 imhtml->animations->tail = imhtml->animations->tail->prev;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4551 imhtml->animations->head = g_list_delete_link(imhtml->animations->head, l);
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4552 imhtml->num_animations--;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4553 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4554 l = next;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4555 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4556 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4557
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4558 void gtk_imhtml_insert_smiley_at_iter(GtkIMHtml *imhtml, const char *sml, char *smiley, GtkTextIter *iter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4559 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4560 GdkPixbuf *pixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4561 GdkPixbufAnimation *annipixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4562 GtkWidget *icon = NULL;
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4563 GtkTextChildAnchor *anchor = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4564 char *unescaped = purple_unescape_html(smiley);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4565 GtkIMHtmlSmiley *imhtml_smiley = gtk_imhtml_smiley_get(imhtml, sml, unescaped);
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4566 GtkWidget *ebox = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4567
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4568 if (imhtml->format_functions & GTK_IMHTML_SMILEY) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4569 annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4570 if (annipixbuf) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4571 if (gdk_pixbuf_animation_is_static_image(annipixbuf)) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4572 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4573 if (pixbuf)
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4574 icon = gtk_image_new_from_pixbuf(pixbuf);
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4575 } else {
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4576 icon = gtk_image_new_from_animation(annipixbuf);
16385
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4577 if (imhtml->num_animations == 20) {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4578 GtkImage *image = GTK_IMAGE(g_queue_pop_head(imhtml->animations));
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4579 GdkPixbufAnimation *anim = gtk_image_get_animation(image);
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4580 if (anim) {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4581 GdkPixbuf *pb = gdk_pixbuf_animation_get_static_image(anim);
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4582 gtk_image_set_from_pixbuf(image, pb);
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4583 g_object_unref(G_OBJECT(pb));
16385
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4584 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4585 } else {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4586 imhtml->num_animations++;
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4587 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4588 g_signal_connect(G_OBJECT(icon), "destroy", G_CALLBACK(animated_smiley_destroy_cb), imhtml);
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4589 g_queue_push_tail(imhtml->animations, icon);
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4590 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4591 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4592 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4593
17189
7d0cf54d0f32 Do not crash when trying to insert a smiley for a protocol not mentioned
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17136
diff changeset
4594 if (imhtml_smiley && imhtml_smiley->flags & GTK_IMHTML_SMILEY_CUSTOM) {
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4595 ebox = gtk_event_box_new();
17406
bc37f59a34f1 Fix for gtk < 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17288
diff changeset
4596 #if GTK_CHECK_VERSION(2,4,0)
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4597 gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE);
17406
bc37f59a34f1 Fix for gtk < 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17288
diff changeset
4598 #endif
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4599 gtk_widget_show(ebox);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4600 }
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4601
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4602 if (icon) {
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4603 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4604 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4605 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4606
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4607 /* This catches the expose events generated by animated
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4608 * images, and ensures that they are handled by the image
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4609 * itself, without propagating to the textview and causing
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4610 * a complete refresh */
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4611 g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4612
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4613 gtk_widget_show(icon);
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4614 if (ebox)
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4615 gtk_container_add(GTK_CONTAINER(ebox), icon);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4616 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox ? ebox : icon, anchor);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4617 } else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) {
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4618 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4619 imhtml_smiley->anchors = g_slist_append(imhtml_smiley->anchors, anchor);
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4620 if (ebox) {
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4621 GtkWidget *img = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_MENU);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4622 gtk_container_add(GTK_CONTAINER(ebox), img);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4623 gtk_widget_show(img);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4624 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox, anchor);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4625 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4626 } else {
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4627 gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4628 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4629
17009
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4630 if (ebox) {
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4631 g_signal_connect(G_OBJECT(ebox), "event", G_CALLBACK(gtk_imhtml_smiley_clicked), imhtml_smiley);
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4632 }
2cc9edf33feb Allow saving custom smileys by right-clicking on them. And use the custom smileys only on the received messages, not for the system/etc. messages.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16385
diff changeset
4633
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4634 g_free(unescaped);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4635 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4636
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4637 void gtk_imhtml_insert_image_at_iter(GtkIMHtml *imhtml, int id, GtkTextIter *iter)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4638 {
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4639 GdkPixbufAnimation *anim = NULL;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4640 const char *filename = NULL;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4641 gpointer image;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4642 GdkRectangle rect;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4643 GtkIMHtmlScalable *scalable = NULL;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4644 struct scalable_data *sd;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4645 int minus;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4646
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4647 if (!imhtml->funcs || !imhtml->funcs->image_get ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4648 !imhtml->funcs->image_get_size || !imhtml->funcs->image_get_data ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4649 !imhtml->funcs->image_get_filename || !imhtml->funcs->image_ref ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4650 !imhtml->funcs->image_unref)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4651 return;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4652
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4653 image = imhtml->funcs->image_get(id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4654
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4655 if (image) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4656 gpointer data;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4657 size_t len;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4658
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4659 data = imhtml->funcs->image_get_data(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4660 len = imhtml->funcs->image_get_size(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4661
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4662 if (data && len) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4663 GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4664 gdk_pixbuf_loader_write(loader, data, len, NULL);
12230
2f327bccf63b [gaim-migrate @ 14532]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12229
diff changeset
4665 gdk_pixbuf_loader_close(loader, NULL);
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4666 anim = gdk_pixbuf_loader_get_animation(loader);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4667 if (anim)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4668 g_object_ref(G_OBJECT(anim));
9337
4bd369a6e4dc [gaim-migrate @ 10145]
Tim Ringenbach <marv@pidgin.im>
parents: 9335
diff changeset
4669 g_object_unref(G_OBJECT(loader));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4670 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4671
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4672 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4673
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4674 if (anim) {
11299
06bb44ed0cf3 [gaim-migrate @ 13499]
Richard Laager <rlaager@pidgin.im>
parents: 11276
diff changeset
4675 struct im_image_data *t = g_new(struct im_image_data, 1);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4676 filename = imhtml->funcs->image_get_filename(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4677 imhtml->funcs->image_ref(id);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4678 t->id = id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4679 t->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4680 imhtml->im_images = g_slist_prepend(imhtml->im_images, t);
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4681 scalable = gtk_imhtml_animation_new(anim, filename, id);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4682 g_object_unref(G_OBJECT(anim));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4683 } else {
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4684 GdkPixbuf *pixbuf;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4685 pixbuf = gtk_widget_render_icon(GTK_WIDGET(imhtml), GTK_STOCK_MISSING_IMAGE,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4686 GTK_ICON_SIZE_BUTTON, "gtkimhtml-missing-image");
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4687 scalable = gtk_imhtml_image_new(pixbuf, filename, id);
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4688 g_object_unref(G_OBJECT(pixbuf));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4689 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4690
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4691 sd = g_new(struct scalable_data, 1);
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4692 sd->scalable = scalable;
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
4693 sd->mark = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, iter, TRUE);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4694 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4695 scalable->add_to(scalable, imhtml, iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4696 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4697 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4698 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4699 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4700 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4701
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4702 static const gchar *tag_to_html_start(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4703 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4704 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4705 static gchar buf[1024];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4706
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4707 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4708 g_return_val_if_fail(name != NULL, "");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4709
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4710 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4711 return "<b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4712 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4713 return "<i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4714 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4715 return "<u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4716 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4717 return "<s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4718 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4719 char *tmp = g_object_get_data(G_OBJECT(tag), "link_url");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4720 if (tmp) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4721 g_snprintf(buf, sizeof(buf), "<a href=\"%s\">", tmp);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4722 buf[sizeof(buf)-1] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4723 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4724 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4725 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4726 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4727 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4728 g_snprintf(buf, sizeof(buf), "<font color=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4729 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4730 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4731 g_snprintf(buf, sizeof(buf), "<font back=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4732 return buf;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4733 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4734 g_snprintf(buf, sizeof(buf), "<body bgcolor=\"%s\">", &name[11]);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4735 return buf;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4736 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4737 g_snprintf(buf, sizeof(buf), "<font face=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4738 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4739 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4740 g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4741 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4742 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4743 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4744 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4745 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4746
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4747 static const gchar *tag_to_html_end(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4748 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4749 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4750
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4751 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4752 g_return_val_if_fail(name != NULL, "");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4753
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4754 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4755 return "</b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4756 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4757 return "</i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4758 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4759 return "</u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4760 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4761 return "</s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4762 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4763 return "</a>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4764 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4765 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4766 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4767 return "</font>";
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4768 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4769 return "</body>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4770 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4771 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4772 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4773 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4774 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4775 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4776 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4777 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4778
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4779 static gboolean tag_ends_here(GtkTextTag *tag, GtkTextIter *iter, GtkTextIter *niter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4780 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4781 return ((gtk_text_iter_has_tag(iter, GTK_TEXT_TAG(tag)) &&
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4782 !gtk_text_iter_has_tag(niter, GTK_TEXT_TAG(tag))) ||
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4783 gtk_text_iter_is_end(niter));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4784 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4785
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4786 /* 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
4787 * as smileys and IM images are represented by the Unicode "unknown" character. Handle them. Else
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4788 * check for tags that are toggled on, insert their html form, and push them on the queue. Then insert
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4789 * the actual text. Then check for tags that are toggled off and insert them, after checking the queue.
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8729
diff changeset
4790 * Finally, replace <, >, &, and " with their HTML equivalent.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4791 */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4792 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
4793 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4794 gunichar c;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4795 GtkTextIter iter, next_iter, non_neutral_iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4796 gboolean is_rtl_message = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4797 GString *str = g_string_new("");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4798 GSList *tags, *sl;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4799 GQueue *q, *r;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4800 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4801
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4802 q = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4803 r = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4804
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4805
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4806 gtk_text_iter_order(start, end);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4807 non_neutral_iter = next_iter = iter = *start;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4808 gtk_text_iter_forward_char(&next_iter);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4809
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4810 /* Bi-directional text support */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4811 /* Get to the first non-neutral character */
16291
acbfc9276da1 Fix for using Pango < 1.4, will not have complete RTL support with older
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16254
diff changeset
4812 #ifdef HAVE_PANGO14
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4813 while ((PANGO_DIRECTION_NEUTRAL == pango_unichar_direction(gtk_text_iter_get_char(&non_neutral_iter)))
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4814 && gtk_text_iter_forward_char(&non_neutral_iter));
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4815 if (PANGO_DIRECTION_RTL == pango_unichar_direction(gtk_text_iter_get_char(&non_neutral_iter))) {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4816 is_rtl_message = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4817 g_string_append(str, "<SPAN style=\"direction:rtl;text-align:right;\">");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4818 }
16291
acbfc9276da1 Fix for using Pango < 1.4, will not have complete RTL support with older
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16254
diff changeset
4819 #endif
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4820
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4821 /* First add the tags that are already in progress (we don't care about non-printing tags)*/
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4822 tags = gtk_text_iter_get_tags(start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4823
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4824 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4825 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4826 if (!gtk_text_iter_toggles_tag(start, GTK_TEXT_TAG(tag))) {
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4827 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4828 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4829 g_queue_push_tail(q, tag);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4830 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4831 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4832 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4833
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4834 while ((c = gtk_text_iter_get_char(&iter)) != 0 && !gtk_text_iter_equal(&iter, end)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4835
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4836 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4837
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4838 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4839 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4840 if (gtk_text_iter_begins_tag(&iter, GTK_TEXT_TAG(tag))) {
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4841 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4842 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4843 g_queue_push_tail(q, tag);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4844 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4845 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4846
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4847
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4848 if (c == 0xFFFC) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4849 GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(&iter);
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4850 if (anchor) {
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4851 char *text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_htmltext");
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4852 if (text)
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4853 str = g_string_append(str, text);
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4854 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4855 } else if (c == '<') {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4856 str = g_string_append(str, "&lt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4857 } else if (c == '>') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4858 str = g_string_append(str, "&gt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4859 } else if (c == '&') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4860 str = g_string_append(str, "&amp;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4861 } else if (c == '"') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4862 str = g_string_append(str, "&quot;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4863 } else if (c == '\n') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4864 str = g_string_append(str, "<br>");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4865 } else {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4866 str = g_string_append_unichar(str, c);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4867 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4868
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4869 tags = g_slist_reverse(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4870 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4871 tag = sl->data;
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4872 /** don't worry about non-printing tags ending */
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4873 if (tag_ends_here(tag, &iter, &next_iter) && strlen(tag_to_html_end(tag)) > 0) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4874
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4875 GtkTextTag *tmp;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4876
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4877 while ((tmp = g_queue_pop_tail(q)) != tag) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4878 if (tmp == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4879 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4880
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4881 if (!tag_ends_here(tmp, &iter, &next_iter) && strlen(tag_to_html_end(tmp)) > 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4882 g_queue_push_tail(r, tmp);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4883 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tmp)));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4884 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4885
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4886 if (tmp == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4887 purple_debug_warning("gtkimhtml", "empty queue, more closing tags than open tags!\n");
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4888 else
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4889 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tag)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4890
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4891 while ((tmp = g_queue_pop_head(r))) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4892 g_string_append(str, tag_to_html_start(GTK_TEXT_TAG(tmp)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4893 g_queue_push_tail(q, tmp);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4894 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4895 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4896 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4897
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4898 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4899 gtk_text_iter_forward_char(&iter);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4900 gtk_text_iter_forward_char(&next_iter);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4901 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4902
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4903 while ((tag = g_queue_pop_tail(q)))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4904 g_string_append(str, tag_to_html_end(GTK_TEXT_TAG(tag)));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4905
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4906 /* Bi-directional text support - close tags */
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4907 if (is_rtl_message)
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4908 g_string_append(str, "</SPAN>");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4909
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4910 g_queue_free(q);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4911 g_queue_free(r);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4912 return g_string_free(str, FALSE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4913 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4914
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
4915 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4916 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4917 if (imhtml->edit.bold)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4918 gtk_imhtml_toggle_bold(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4919
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4920 if (imhtml->edit.italic)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4921 gtk_imhtml_toggle_italic(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4922
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4923 if (imhtml->edit.underline)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4924 gtk_imhtml_toggle_underline(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4925
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4926 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4927 gtk_imhtml_toggle_strike(imhtml);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4928
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4929 if (imhtml->edit.forecolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4930 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4931
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4932 if (imhtml->edit.backcolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4933 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4934
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4935 if (imhtml->edit.fontface)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4936 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4937
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4938 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4939
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4940 if (imhtml->edit.link)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4941 gtk_imhtml_toggle_link(imhtml, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4942 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4943
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4944 char *gtk_imhtml_get_markup(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4945 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4946 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4947
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4948 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4949 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4950 return gtk_imhtml_get_markup_range(imhtml, &start, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4951 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4952
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4953 char **gtk_imhtml_get_markup_lines(GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4954 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4955 int i, j, lines;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4956 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4957 char **ret;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4958
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4959 lines = gtk_text_buffer_get_line_count(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4960 ret = g_new0(char *, lines + 1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4961 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4962 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4963 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4964
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4965 for (i = 0, j = 0; i < lines; i++) {
9612
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4966 if (gtk_text_iter_get_char(&start) != '\n') {
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4967 ret[j] = gtk_imhtml_get_markup_range(imhtml, &start, &end);
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4968 if (ret[j] != NULL)
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4969 j++;
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4970 }
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4971
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4972 gtk_text_iter_forward_line(&start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4973 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4974 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4975 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4976
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4977 return ret;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4978 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4979
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4980 char *gtk_imhtml_get_text(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *stop)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4981 {
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4982 GString *str = g_string_new("");
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4983 GtkTextIter iter, end;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4984 gunichar c;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4985
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4986 if (start == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4987 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4988 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4989 iter = *start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4990
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4991 if (stop == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4992 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4993 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4994 end = *stop;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4995
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4996 gtk_text_iter_order(&iter, &end);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4997
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
4998 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
4999 if (c == 0xFFFC) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5000 GtkTextChildAnchor* anchor;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5001 char *text = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5002
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5003 anchor = gtk_text_iter_get_child_anchor(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5004 if (anchor)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
5005 text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_plaintext");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5006 if (text)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5007 str = g_string_append(str, text);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5008 } else {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5009 g_string_append_unichar(str, c);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5010 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5011 gtk_text_iter_forward_char(&iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5012 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5013
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5014 return g_string_free(str, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
5015 }
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5016
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5017 void gtk_imhtml_set_funcs(GtkIMHtml *imhtml, GtkIMHtmlFuncs *f)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5018 {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5019 g_return_if_fail(imhtml != NULL);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5020 imhtml->funcs = f;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5021 }
17388
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5022
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5023 void gtk_imhtml_setup_entry(GtkIMHtml *imhtml, PurpleConnectionFlags flags)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5024 {
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5025 GtkIMHtmlButtons buttons;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5026
17388
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5027 if (flags & PURPLE_CONNECTION_HTML) {
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5028 char color[8];
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5029 GdkColor fg_color, bg_color;
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5030
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5031 buttons = GTK_IMHTML_ALL;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5032
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5033 if (flags & PURPLE_CONNECTION_NO_BGCOLOR)
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5034 buttons &= ~GTK_IMHTML_BACKCOLOR;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5035 if (flags & PURPLE_CONNECTION_NO_FONTSIZE)
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5036 {
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5037 buttons &= ~GTK_IMHTML_GROW;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5038 buttons &= ~GTK_IMHTML_SHRINK;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5039 }
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5040 if (flags & PURPLE_CONNECTION_NO_URLDESC)
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5041 buttons &= ~GTK_IMHTML_LINKDESC;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5042
17388
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5043 gtk_imhtml_set_format_functions(imhtml, GTK_IMHTML_ALL);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5044 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold") != imhtml->edit.bold)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5045 gtk_imhtml_toggle_bold(imhtml);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5046
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5047 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic") != imhtml->edit.italic)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5048 gtk_imhtml_toggle_italic(imhtml);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5049
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5050 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline") != imhtml->edit.underline)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5051 gtk_imhtml_toggle_underline(imhtml);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5052
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5053 gtk_imhtml_toggle_fontface(imhtml,
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5054 purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/font_face"));
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5055
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5056 if (!(flags & PURPLE_CONNECTION_NO_FONTSIZE))
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5057 {
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5058 int size = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/font_size");
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5059
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5060 /* 3 is the default. */
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5061 if (size != 3)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5062 gtk_imhtml_font_set_size(imhtml, size);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5063 }
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5064
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5065 if(strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"), "") != 0)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5066 {
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5067 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"),
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5068 &fg_color);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5069 g_snprintf(color, sizeof(color), "#%02x%02x%02x",
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5070 fg_color.red / 256,
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5071 fg_color.green / 256,
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5072 fg_color.blue / 256);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5073 } else
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5074 strcpy(color, "");
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5075
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5076 gtk_imhtml_toggle_forecolor(imhtml, color);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5077
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5078 if(!(flags & PURPLE_CONNECTION_NO_BGCOLOR) &&
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5079 strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), "") != 0)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5080 {
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5081 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"),
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5082 &bg_color);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5083 g_snprintf(color, sizeof(color), "#%02x%02x%02x",
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5084 bg_color.red / 256,
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5085 bg_color.green / 256,
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5086 bg_color.blue / 256);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5087 } else
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5088 strcpy(color, "");
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5089
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5090 gtk_imhtml_toggle_background(imhtml, color);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5091
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5092 if (flags & PURPLE_CONNECTION_FORMATTING_WBFO)
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5093 gtk_imhtml_set_whole_buffer_formatting_only(imhtml, TRUE);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5094 else
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5095 gtk_imhtml_set_whole_buffer_formatting_only(imhtml, FALSE);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5096 } else {
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5097 buttons = GTK_IMHTML_SMILEY | GTK_IMHTML_IMAGE;
17388
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5098 imhtml_clear_formatting(imhtml);
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5099 }
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5100
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5101 if (flags & PURPLE_CONNECTION_NO_IMAGES)
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5102 buttons &= ~GTK_IMHTML_IMAGE;
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5103
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5104 gtk_imhtml_set_format_functions(imhtml, buttons);
17388
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5105 }
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5106
18105
bab0b0bcb664 propagate from branch 'im.pidgin.pidgin' (head 1b4384bff09a39fca58692fb6c929d4fe1276022)
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18086 17877
diff changeset
5107

mercurial