pidgin/gtkimhtml.c

Sun, 28 Oct 2007 18:13:50 +0000

author
Casey Harkins <charkins@pidgin.im>
date
Sun, 28 Oct 2007 18:13:50 +0000
changeset 21113
09118de8bda6
parent 21091
07fe1a99c47b
child 21128
0fa05a36c5e0
permissions
-rw-r--r--

Track the actual visibility for the buddy list (unobscured, partially and
fully obscured). This maintains the behavior from the previous commit
(raising partially obscured buddy list instead of hiding), but also
maintains refreshing of the buddy list when partially obscured which the
previous commit broke.

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
20330
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
4 */
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
5
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
6 /* pidgin
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
8 * 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
9 * 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
10 * source distribution.
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * under the terms of the GNU General Public License as published by
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * (at your option) any later version.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 * GNU General Public License for more details.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19746
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
1428
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 */
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
28 #ifdef HAVE_CONFIG_H
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
29 #include <config.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
30 #endif
18119
699d876e3db0 Include pidgin.h to make this compile.
Richard Laager <rlaager@pidgin.im>
parents: 18108
diff changeset
31
18633
34ba43198355 Fix the win32 build. Thanks to Etan and Lee Roach. Fixes #1929.
Daniel Atallah <datallah@pidgin.im>
parents: 18552
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 #include "pidgin.h"
699d876e3db0 Include pidgin.h to make this compile.
Richard Laager <rlaager@pidgin.im>
parents: 18108
diff changeset
34
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
35 #include "debug.h"
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
36 #include "util.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 #include "gtkimhtml.h"
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
38 #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
39 #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
40 #include "gtksourceview-marshal.h"
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 #include <gtk/gtk.h>
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
42 #include <glib/gerror.h>
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
43 #include <gdk/gdkkeysyms.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 #include <string.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #include <ctype.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #include <stdio.h>
4629
7ac4830de853 [gaim-migrate @ 4920]
Mark Doliner <markdoliner@pidgin.im>
parents: 4612
diff changeset
47 #include <stdlib.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 #include <math.h>
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
49 #ifdef HAVE_LANGINFO_CODESET
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
50 #include <langinfo.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
51 #include <locale.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
52 #endif
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
53 #ifdef _WIN32
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
54 #include <gdk/gdkwin32.h>
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
55 #include <windows.h>
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
56 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
58 #include <pango/pango-font.h>
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
59
15577
b8129373f65e More pidgin changes
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
60 /* GTK+ < 2.4.x hack, see pidgin.h for details. */
10062
144767f0643a [gaim-migrate @ 11037]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10016
diff changeset
61 #if (!GTK_CHECK_VERSION(2,4,0))
5105
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
62 #define GTK_WRAP_WORD_CHAR GTK_WRAP_WORD
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
63 #endif
3565a4c4de6a [gaim-migrate @ 5468]
David J. Brigada <brigada@prism.net>
parents: 5104
diff changeset
64
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
65 #define TOOLTIP_TIMEOUT 500
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
66
8786
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
67 /* GTK+ 2.0 hack */
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
68 #if (!GTK_CHECK_VERSION(2,2,0))
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
69 #define gtk_widget_get_clipboard(x, y) gtk_clipboard_get(y)
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
70 #endif
da709a46e80e [gaim-migrate @ 9548]
Ethan Blanton <elb@pidgin.im>
parents: 8782
diff changeset
71
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
72 static GtkTextViewClass *parent_class = NULL;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
73
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
74 struct scalable_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
75 GtkIMHtmlScalable *scalable;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
76 GtkTextMark *mark;
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
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
80 struct im_image_data {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
81 int id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
82 GtkTextMark *mark;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
83 };
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
84
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
85 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
86 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
87 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
88 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
89 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
90 guint time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
91
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
92 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
93 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
94 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
95 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
96 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
97 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
98 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
99 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
100 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
101 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
102 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
103 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
104 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
105 static void imhtml_toggle_bold(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
106 static void imhtml_toggle_italic(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
107 static void imhtml_toggle_strike(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
108 static void imhtml_toggle_underline(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
109 static void imhtml_font_grow(GtkIMHtml *imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
110 static void imhtml_font_shrink(GtkIMHtml *imhtml);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
111 static void imhtml_clear_formatting(GtkIMHtml *imhtml);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
112
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
113 /* 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
114 #define MAX_FONT_SIZE 7
10900
cc19dfd83910 [gaim-migrate @ 12621]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10899
diff changeset
115 #define POINT_SIZE(x) (_point_sizes [MIN ((x > 0 ? x : 1), MAX_FONT_SIZE) - 1])
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 21085
diff changeset
116 static const 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
117
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
118 enum {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
119 TARGET_HTML,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
120 TARGET_UTF8_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
121 TARGET_COMPOUND_TEXT,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
122 TARGET_STRING,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
123 TARGET_TEXT
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
124 };
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
125
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
126 enum {
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
127 URL_CLICKED,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
128 BUTTONS_UPDATE,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
129 TOGGLE_FORMAT,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
130 CLEAR_FORMAT,
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
131 UPDATE_FORMAT,
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
132 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
133 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
134 REDO,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
135 LAST_SIGNAL
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
136 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
137 static guint signals [LAST_SIGNAL] = { 0 };
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
138
17546
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 *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
140 static char *text_clipboard = NULL;
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
141 static GtkClipboard *clipboard_selection = NULL;
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
142
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 21085
diff changeset
143 static const GtkTargetEntry selection_targets[] = {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
144 #ifndef _WIN32
8566
d174105077ff [gaim-migrate @ 9313]
Sean Egan <seanegan@pidgin.im>
parents: 8548
diff changeset
145 { "text/html", 0, TARGET_HTML },
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
146 #else
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
147 { "HTML Format", 0, TARGET_HTML },
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
148 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
149 { "UTF8_STRING", 0, TARGET_UTF8_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
150 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
151 { "STRING", 0, TARGET_STRING },
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
152 { "TEXT", 0, TARGET_TEXT}};
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
153
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 21085
diff changeset
154 static const GtkTargetEntry link_drag_drop_targets[] = {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
155 GTK_IMHTML_DND_TARGETS
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
156 };
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
157
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
158 #ifdef _WIN32
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
159 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
160 clipboard_win32_to_html(char *clipboard) {
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
161 const char *header;
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
162 const char *begin, *end;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
163 gint start = 0;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
164 gint finish = 0;
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
165 gchar *html;
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
166 gchar **split;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
167 int clipboard_length = 0;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
168
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
169 #if 0 /* Debugging for Windows clipboard */
9467
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
170 FILE *fd;
591db7463935 [gaim-migrate @ 10292]
Kevin Stange <kstange@pidgin.im>
parents: 9465
diff changeset
171
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
172 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
173
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
174 fd = g_fopen("e:\\purplecb.txt", "wb");
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
175 fprintf(fd, "%s", clipboard);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
176 fclose(fd);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
177 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
178
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
179 clipboard_length = strlen(clipboard);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
180
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
181 if (!(header = strstr(clipboard, "StartFragment:")) || (header - clipboard) >= clipboard_length)
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
182 return NULL;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
183 sscanf(header, "StartFragment:%d", &start);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
184
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
185 if (!(header = strstr(clipboard, "EndFragment:")) || (header - clipboard) >= clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
186 return NULL;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
187 sscanf(header, "EndFragment:%d", &finish);
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
188
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
189 if (finish > clipboard_length)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
190 finish = clipboard_length;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
191
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
192 if (start > finish)
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
193 start = finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
194
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
195 begin = clipboard + start;
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
196
10016
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
197 end = clipboard + finish;
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
198
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
199 html = g_strndup(begin, end - begin);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
200
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
201 /* 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
202 split = g_strsplit(html, "\r\n", 0);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
203 g_free(html);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
204 html = g_strjoinv("\n", split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
205 g_strfreev(split);
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
206
18418b9fa749 [gaim-migrate @ 10935]
Daniel Atallah <datallah@pidgin.im>
parents: 10013
diff changeset
207 html = g_strstrip(html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
208
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
209 #if 0 /* Debugging for Windows clipboard */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
210 purple_debug_info("imhtml clipboard", "HTML fragment: '%s'\n", html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
211 #endif
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
212
8707
024f6481c017 [gaim-migrate @ 9460]
Kevin Stange <kstange@pidgin.im>
parents: 8698
diff changeset
213 return html;
8692
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
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
216 static gchar *
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
217 clipboard_html_to_win32(char *html) {
8693
e4579335a6f6 [gaim-migrate @ 9446]
Kevin Stange <kstange@pidgin.im>
parents: 8692
diff changeset
218 int length;
11240
cd4ca16ff57c [gaim-migrate @ 13399]
Richard Laager <rlaager@pidgin.im>
parents: 11234
diff changeset
219 GString *clipboard;
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");
18665
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
227 g_string_append_printf(clipboard, "EndHTML:%010d\r\n", 147 + length);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
228 g_string_append(clipboard, "StartFragment:0000000127\r\n");
18665
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
229 g_string_append_printf(clipboard, "EndFragment:%010d\r\n", 127 + length);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
230 g_string_append(clipboard, "<!--StartFragment-->\r\n");
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
231 g_string_append(clipboard, html);
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
232 g_string_append(clipboard, "\r\n<!--EndFragment-->");
14101
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
233
89a79c2a971e [gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
234 return g_string_free(clipboard, FALSE);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
235 }
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
236
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
237 static gboolean clipboard_paste_html_win32(GtkIMHtml *imhtml) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
238 gboolean pasted = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
239
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
240 /* Win32 clipboard format value, and functions to convert back and
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
241 * forth between HTML and the clipboard format.
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
242 */
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
243 static UINT win_html_fmt = 0;
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
244
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
245 /* Register HTML Format as desired clipboard format */
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
246 if (!win_html_fmt)
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
247 win_html_fmt = RegisterClipboardFormat("HTML Format");
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
248
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
249 if (gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml))
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
250 && IsClipboardFormatAvailable(win_html_fmt)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
251 gboolean error_reading_clipboard = FALSE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
252 HWND hwnd = GDK_WINDOW_HWND(GTK_WIDGET(imhtml)->window);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
253
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
254 if (OpenClipboard(hwnd)) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
255 HGLOBAL hdata = GetClipboardData(win_html_fmt);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
256 if (hdata == NULL) {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
257 if (GetLastError() != ERROR_SUCCESS)
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
258 error_reading_clipboard = TRUE;
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
259 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
260 char *buffer = GlobalLock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
261 if (buffer == NULL) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
262 error_reading_clipboard = TRUE;
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 *text = clipboard_win32_to_html(
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
265 buffer);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
266 imhtml_paste_insert(imhtml, text,
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
267 FALSE);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
268 g_free(text);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
269 pasted = TRUE;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
270 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
271 GlobalUnlock(hdata);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
272 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
273
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
274 CloseClipboard();
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
275 } else {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
276 error_reading_clipboard = TRUE;
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
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
279 if (error_reading_clipboard) {
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
280 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
281 purple_debug_info("html clipboard",
10901
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
282 "Unable to read clipboard data: %s\n",
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
283 err_msg ? err_msg : "Unknown Error");
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
284 g_free(err_msg);
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
285 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
286 }
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
287
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
288 return pasted;
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
289 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
290 #endif
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
291
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
292 static GtkSmileyTree*
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
293 gtk_smiley_tree_new ()
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
294 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
295 return g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
296 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
297
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
298 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
299 gtk_smiley_tree_insert (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
300 GtkIMHtmlSmiley *smiley)
4032
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 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
303 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
304
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
305 if (!(*x))
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
306 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
307
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
308 do {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
309 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
310 gint index;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
311
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
312 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
313 t->values = g_string_new ("");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
314
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
315 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
316 if (!pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
317 t->values = g_string_append_c (t->values, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
318 index = t->values->len - 1;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
319 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
320 t->children [index] = g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
321 } else
7386
9cccb3792018 [gaim-migrate @ 7981]
Luke Schierer <lschiere@pidgin.im>
parents: 7384
diff changeset
322 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
323
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
324 t = t->children [index];
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
325
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
326 x++;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
327 } while (*x);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
328
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
329 t->image = smiley;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
330 }
4041
6336d3d3785e [gaim-migrate @ 4249]
Sean Egan <seanegan@pidgin.im>
parents: 4032
diff changeset
331
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
332
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
333 static void
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
334 gtk_smiley_tree_destroy (GtkSmileyTree *tree)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
335 {
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
336 GSList *list = g_slist_prepend (NULL, tree);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
337
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
338 while (list) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
339 GtkSmileyTree *t = list->data;
12229
ad8d3ae8fc1b [gaim-migrate @ 14531]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12072
diff changeset
340 gsize i;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
341 list = g_slist_remove(list, t);
7384
c2ed41f62aae [gaim-migrate @ 7979]
Nathan Walp <nwalp@pidgin.im>
parents: 7371
diff changeset
342 if (t && t->values) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
343 for (i = 0; i < t->values->len; i++)
11701
8cf812de5e92 [gaim-migrate @ 13992]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 11677
diff changeset
344 list = g_slist_prepend (list, t->children [i]);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
345 g_string_free (t->values, TRUE);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
346 g_free (t->children);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
347 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
348 g_free (t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
349 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
350 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
351
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
352 static void (*parent_size_allocate)(GtkWidget *widget, GtkAllocation *alloc);
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
353
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
354 static void gtk_imhtml_size_allocate(GtkWidget *widget, GtkAllocation *alloc)
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
355 {
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
356 GtkIMHtml *imhtml = GTK_IMHTML(widget);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
357 GdkRectangle rect;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
358 int xminus;
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
359 int height = 0, y = 0;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
360 GtkTextIter iter;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
361 gboolean scroll = TRUE;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
362
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
363 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
364
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
365 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &rect);
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
366 gtk_text_view_get_line_yrange(GTK_TEXT_VIEW(imhtml), &iter, &y, &height);
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
367
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
368 if(((y + height) - (rect.y + rect.height)) > height
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
369 && gtk_text_buffer_get_char_count(imhtml->text_buffer)){
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
370 scroll = FALSE;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
371 }
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
372
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
373 if(imhtml->old_rect.width != rect.width || imhtml->old_rect.height != rect.height){
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
374 GList *iter = GTK_IMHTML(widget)->scalables;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
375
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
376 xminus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(widget)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
377 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(widget));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
378
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
379 while(iter){
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
380 struct scalable_data *sd = iter->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
381 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
382 scale->scale(scale, rect.width - xminus, rect.height);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
383
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
384 iter = iter->next;
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 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
387
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
388 imhtml->old_rect = rect;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
389 parent_size_allocate(widget, alloc);
18985
877a49e0979d And fix smooth scroll too
Sean Egan <seanegan@pidgin.im>
parents: 18984
diff changeset
390
877a49e0979d And fix smooth scroll too
Sean Egan <seanegan@pidgin.im>
parents: 18984
diff changeset
391 /* Don't scroll here if we're in the middle of a smooth scroll */
19326
d3071a414d6b Don't scroll to bottom if imhtml is not realized. Fixes #2320
Sean Egan <seanegan@pidgin.im>
parents: 19325
diff changeset
392 if (scroll && imhtml->scroll_time == NULL &&
d3071a414d6b Don't scroll to bottom if imhtml is not realized. Fixes #2320
Sean Egan <seanegan@pidgin.im>
parents: 19325
diff changeset
393 GTK_WIDGET_REALIZED(imhtml))
18984
e852e847501a Idiotic mistake. Fixes #2315
Sean Egan <seanegan@pidgin.im>
parents: 18968
diff changeset
394 gtk_imhtml_scroll_to_end(imhtml, FALSE);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
395 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
396
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
397 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
398 gtk_imhtml_tip_paint (GtkIMHtml *imhtml)
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 PangoLayout *layout;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
401
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
402 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
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 layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
405
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
406 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
407 GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, imhtml->tip_window,
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
408 "tooltip", 0, 0, -1, -1);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
409
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
410 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
411 FALSE, NULL, imhtml->tip_window, NULL, 4, 4, layout);
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 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
414 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
415 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
416
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
417 static gint
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
418 gtk_imhtml_tip (gpointer data)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
419 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
420 GtkIMHtml *imhtml = data;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
421 PangoFontMetrics *font_metrics;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
422 PangoLayout *layout;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
423 PangoFont *font;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
424
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
425 gint gap, x, y, h, w, scr_w, baseline_skip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
426
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
427 g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
428
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
429 if (!imhtml->tip || !GTK_WIDGET_DRAWABLE (GTK_WIDGET(imhtml))) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
430 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
431 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
432 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
433
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
434 if (imhtml->tip_window){
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
435 gtk_widget_destroy (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
436 imhtml->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
437 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
438
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
439 imhtml->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
440 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
441 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
442 gtk_window_set_resizable (GTK_WINDOW (imhtml->tip_window), FALSE);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
443 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
444 g_signal_connect_swapped (G_OBJECT (imhtml->tip_window), "expose_event",
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
445 G_CALLBACK (gtk_imhtml_tip_paint), imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
446
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
447 gtk_widget_ensure_style (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
448 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
449 font = pango_context_load_font(pango_layout_get_context(layout),
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
450 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
451
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
452 if (font == NULL) {
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
453 char *tmp = pango_font_description_to_string(
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
454 imhtml->tip_window->style->font_desc);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
455
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
456 purple_debug(PURPLE_DEBUG_ERROR, "gtk_imhtml_tip",
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
457 "pango_context_load_font() couldn't load font: '%s'\n",
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
458 tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
459 g_free(tmp);
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
460
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
461 return FALSE;
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
462 }
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
463
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
464 font_metrics = pango_font_get_metrics(font, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
465
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
466 pango_layout_get_pixel_size(layout, &scr_w, NULL);
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
467 gap = PANGO_PIXELS((pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
468 pango_font_metrics_get_descent(font_metrics))/ 4);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
469
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
470 if (gap < 2)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
471 gap = 2;
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
472 baseline_skip = PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
473 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
474 w = 8 + scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
475 h = 8 + baseline_skip;
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 gdk_window_get_pointer (NULL, &x, &y, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
478 if (GTK_WIDGET_NO_WINDOW (GTK_WIDGET(imhtml)))
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
479 y += GTK_WIDGET(imhtml)->allocation.y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
480
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
481 scr_w = gdk_screen_width();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
482
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
483 x -= ((w >> 1) + 4);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
484
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
485 if ((x + w) > scr_w)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
486 x -= (x + w) - scr_w;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
487 else if (x < 0)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
488 x = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
489
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
490 y = y + PANGO_PIXELS(pango_font_metrics_get_ascent(font_metrics) +
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
491 pango_font_metrics_get_descent(font_metrics));
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
492
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
493 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
494 gtk_window_move (GTK_WINDOW(imhtml->tip_window), x, y);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
495 gtk_widget_show (imhtml->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
496
8526
cea38c0015e6 [gaim-migrate @ 9265]
Daniel Atallah <datallah@pidgin.im>
parents: 8519
diff changeset
497 pango_font_metrics_unref(font_metrics);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
498 g_object_unref(layout);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
499
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
500 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
501 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
502
11844
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
503 static gboolean
57ad7c52cc9c [gaim-migrate @ 14135]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11840
diff changeset
504 gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
505 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
506 GtkTextIter iter;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
507 GdkWindow *win = event->window;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
508 int x, y;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
509 char *tip = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
510 GSList *tags = NULL, *templist = NULL;
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
511 GdkColor *norm, *pre;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
512 GtkTextTag *tag = NULL, *oldprelit_tag;
18543
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
513 GtkTextChildAnchor* anchor;
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
514 gboolean hand = TRUE;
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
515
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
516 oldprelit_tag = GTK_IMHTML(imhtml)->prelit_tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
517
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
518 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
519 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
520 event->x, event->y, &x, &y);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
521 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
522 tags = gtk_text_iter_get_tags(&iter);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
523
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
524 templist = tags;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
525 while (templist) {
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
526 tag = templist->data;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
527 tip = g_object_get_data(G_OBJECT(tag), "link_url");
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
528 if (tip)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
529 break;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
530 templist = templist->next;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
531 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
532
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
533 if (tip) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
534 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
535 GTK_IMHTML(imhtml)->prelit_tag = tag;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
536 if (tag != oldprelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
537 if (pre)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
538 g_object_set(G_OBJECT(tag), "foreground-gdk", pre, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
539 else
12253
5025434b18f8 [gaim-migrate @ 14555]
Mark Doliner <markdoliner@pidgin.im>
parents: 12230
diff changeset
540 g_object_set(G_OBJECT(tag), "foreground", "#70a0ff", NULL);
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
541 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
542 } else {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
543 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
544 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
545
10834
5fd1dfd395e8 [gaim-migrate @ 12505]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10826
diff changeset
546 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
547 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
548 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
549 g_object_set(G_OBJECT(oldprelit_tag), "foreground-gdk", norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
550 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
551 g_object_set(G_OBJECT(oldprelit_tag), "foreground", "blue", NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
552 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
553
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
554 if (GTK_IMHTML(imhtml)->tip) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
555 if ((tip == GTK_IMHTML(imhtml)->tip)) {
21069
fcc0f4eb692a Leak fix.
Daniel Atallah <datallah@pidgin.im>
parents: 21063
diff changeset
556 g_slist_free(tags);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
557 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
558 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
559 /* 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
560 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
561 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
562 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
563 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
564 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
565 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->text_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
566 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
567 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
568 if (GTK_IMHTML(imhtml)->tip_timer)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
569 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
570 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
571 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
572
18543
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
573 /* If we don't have a tip from a URL, let's see if we have a tip from a smiley */
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
574 anchor = gtk_text_iter_get_child_anchor(&iter);
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
575 if (anchor) {
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
576 tip = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_plaintext");
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
577 hand = FALSE;
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
578 }
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
579
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
580 if (tip){
18543
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
581 if (!GTK_IMHTML(imhtml)->editable && hand)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
582 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
583 GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT,
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
584 gtk_imhtml_tip, imhtml);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
585 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
586
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
587 GTK_IMHTML(imhtml)->tip = tip;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
588 g_slist_free(tags);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
589 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
590 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
591
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
592 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
593 gtk_enter_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
594 {
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
595 if (GTK_IMHTML(imhtml)->editable)
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
596 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
597 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
598 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
599 GTK_IMHTML(imhtml)->text_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
600 else
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
601 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
602 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
603 GTK_TEXT_WINDOW_TEXT),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
604 GTK_IMHTML(imhtml)->arrow_cursor);
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
605
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
606 /* propagate the event normally */
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
607 return FALSE;
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
608 }
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
609
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
610 static gboolean
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
611 gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
5967
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 /* 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
614 if (GTK_IMHTML(imhtml)->prelit_tag) {
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
615 GdkColor *norm;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
616 gtk_widget_style_get(GTK_WIDGET(imhtml), "hyperlink-color", &norm, NULL);
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
617 if (norm)
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
618 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
619 else
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
620 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
621 GTK_IMHTML(imhtml)->prelit_tag = NULL;
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
622 }
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
623
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
624 if (GTK_IMHTML(imhtml)->tip_window) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
625 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
626 GTK_IMHTML(imhtml)->tip_window = NULL;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
627 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
628 if (GTK_IMHTML(imhtml)->tip_timer) {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
629 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
630 GTK_IMHTML(imhtml)->tip_timer = 0;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
631 }
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
632 gdk_window_set_cursor(
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
633 gtk_text_view_get_window(GTK_TEXT_VIEW(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
634 GTK_TEXT_WINDOW_TEXT), NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
635
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
636 /* propagate the event normally */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
637 return FALSE;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
638 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
639
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
640 #if (!GTK_CHECK_VERSION(2,2,0))
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
641 /*
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
642 * XXX - This should be removed eventually.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
643 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
644 * This function exists to work around a gross bug in GtkTextView.
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
645 * 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
646 * el program go boom.
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
647 *
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
648 * 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
649 * http://bugzilla.gnome.org/show_bug.cgi?id=107939
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
650 */
10849
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
651 static gboolean
476d68d7a435 [gaim-migrate @ 12521]
Richard Laager <rlaager@pidgin.im>
parents: 10844
diff changeset
652 gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
653 {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
654 if (event->state & GDK_CONTROL_MASK) {
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
655 switch (event->keyval) {
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
656 case 'a':
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
657 case GDK_Home:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
658 case GDK_End:
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
659 return TRUE;
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
660 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
661 }
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
662 return FALSE;
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
663 }
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
664 #endif /* !(GTK+ >= 2.2.0) */
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
665
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
666 static gint
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
667 gtk_imhtml_expose_event (GtkWidget *widget,
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
668 GdkEventExpose *event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
669 {
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
670 GtkTextIter start, end, cur;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
671 int buf_x, buf_y;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
672 GdkRectangle visible_rect;
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
673 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
674 GdkColor gcolor;
10844
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
675
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
676 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
677 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
678 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
679 visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
680 visible_rect.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
681 &visible_rect.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
682 &visible_rect.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
683
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
684 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
685 event->area.x, event->area.y, &buf_x, &buf_y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
686
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
687 if (GTK_IMHTML(widget)->editable || GTK_IMHTML(widget)->wbfo) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
688
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
689 if (GTK_IMHTML(widget)->edit.background) {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
690 gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
691 gdk_gc_set_rgb_fg_color(gc, &gcolor);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
692 } else {
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
693 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
694 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
695
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
696 gdk_draw_rectangle(event->window,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
697 gc,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
698 TRUE,
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
699 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
700 gdk_gc_unref(gc);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
701
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
702 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
703 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
704 (widget, event);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
705 return FALSE;
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
706
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
707 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
708
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
709 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
710 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
711 buf_x + event->area.width, buf_y + event->area.height);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
712
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
713
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
714
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
715 cur = start;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
716
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
717 while (gtk_text_iter_in_range(&cur, &start, &end)) {
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
718 GSList *tags = gtk_text_iter_get_tags(&cur);
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
719 GSList *l;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
720
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
721 for (l = tags; l; l = l->next) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
722 GtkTextTag *tag = l->data;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
723 GdkRectangle rect;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
724 GdkRectangle tag_area;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
725 const char *color;
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
726
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
727 if (strncmp(tag->name, "BACKGROUND ", 11))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
728 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
729
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
730 if (gtk_text_iter_ends_tag(&cur, tag))
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
731 continue;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
732
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
733 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
734 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
735 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
736 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
737 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
738 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
739 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
740 rect.x = visible_rect.x;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
741 rect.y = tag_area.y;
11768
b45e26d7a4c9 [gaim-migrate @ 14059]
Gary Kramlich <grim@reaperworld.com>
parents: 11760
diff changeset
742 rect.width = visible_rect.width;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
743
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
744 do
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
745 gtk_text_iter_forward_to_tag_toggle(&cur, tag);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
746 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
747
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
748 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
749 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
750 GTK_TEXT_WINDOW_TEXT,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
751 tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
752 tag_area.y,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
753 &tag_area.x,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
754 &tag_area.y);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
755
11760
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
756
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
757 rect.height = tag_area.y + tag_area.height - rect.y
075e1495157b [gaim-migrate @ 14051]
Sean Egan <seanegan@pidgin.im>
parents: 11750
diff changeset
758 + 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
759
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
760 color = tag->name + 11;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
761
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
762 if (!gdk_color_parse(color, &gcolor)) {
10858
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
763 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
764 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
765 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
766 tmp[7] = '\0';
10857
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
767 if (!gdk_color_parse(tmp, &gcolor))
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
768 gdk_color_parse("white", &gcolor);
5efd8020695b [gaim-migrate @ 12533]
Tim Ringenbach <marv@pidgin.im>
parents: 10852
diff changeset
769 }
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
770 gdk_gc_set_rgb_fg_color(gc, &gcolor);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
771
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
772 gdk_draw_rectangle(event->window,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
773 gc,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
774 TRUE,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
775 rect.x, rect.y, rect.width, rect.height);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
776 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
777 * note that above, we always moved cur ahead by at least
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
778 * one character */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
779 break;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
780 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
781
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
782 g_slist_free(tags);
10795
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
783
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
784 /* loop until another tag begins, or no tag begins */
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
785 while (gtk_text_iter_forward_to_tag_toggle(&cur, NULL) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
786 !gtk_text_iter_is_end(&cur) &&
db5c480d8756 [gaim-migrate @ 12438]
Tim Ringenbach <marv@pidgin.im>
parents: 10794
diff changeset
787 !gtk_text_iter_begins_tag(&cur, NULL));
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
788 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
789
10777
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
790 gdk_gc_unref(gc);
5a9df3199615 [gaim-migrate @ 12392]
Sean Egan <seanegan@pidgin.im>
parents: 10776
diff changeset
791
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
792 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
793 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
794 (widget, event);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
795
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
796 return FALSE;
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
797 }
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
798
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
799
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
800 static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
801 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
802 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
803
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
804 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
805
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
806 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
807
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
808 static void clear_formatting_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
809 {
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
810 gtk_imhtml_clear_formatting(imhtml);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
811 }
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
812
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
813 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
814 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
815 GtkWidget *menuitem;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
816
12635
5b2fbc3da55b [gaim-migrate @ 14971]
Richard Laager <rlaager@pidgin.im>
parents: 12605
diff changeset
817 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
818 gtk_widget_show(menuitem);
14970
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
819 /*
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
820 * TODO: gtk_clipboard_wait_is_text_available() iterates the glib
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
821 * mainloop, which tends to be a source of bugs. It would
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
822 * be good to audit this or change it to not wait.
fd8984ce4fda [gaim-migrate @ 17680]
Mark Doliner <markdoliner@pidgin.im>
parents: 14863
diff changeset
823 */
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
824 gtk_widget_set_sensitive(menuitem,
12836
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
825 (imhtml->editable &&
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
826 gtk_clipboard_wait_is_text_available(
837fe5d43dac [gaim-migrate @ 15184]
Richard Laager <rlaager@pidgin.im>
parents: 12833
diff changeset
827 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD))));
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
828 /* put it after "Paste" */
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
829 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 3);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
830
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
831 g_signal_connect(G_OBJECT(menuitem), "activate",
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
832 G_CALLBACK(paste_unformatted_cb), imhtml);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
833
13539
8036a635a316 [gaim-migrate @ 15915]
Richard Laager <rlaager@pidgin.im>
parents: 13340
diff changeset
834 menuitem = gtk_menu_item_new_with_mnemonic(_("_Reset formatting"));
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
835 gtk_widget_show(menuitem);
13340
e18166659513 [gaim-migrate @ 15709]
Richard Laager <rlaager@pidgin.im>
parents: 13336
diff changeset
836 gtk_widget_set_sensitive(menuitem, imhtml->editable);
13336
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
837 /* put it after Delete */
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
838 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 5);
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
839
e5ac6aad2723 [gaim-migrate @ 15705]
Nathan Walp <nwalp@pidgin.im>
parents: 13225
diff changeset
840 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
841 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
842
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
843 static char *
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
844 ucs2_order(gboolean swap)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
845 {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
846 gboolean be;
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 be = G_BYTE_ORDER == G_BIG_ENDIAN;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
849 be = swap ? be : !be;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
850
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
851 if (be)
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
852 return "UCS-2BE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
853 else
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
854 return "UCS-2LE";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
855
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
856 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
857
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
858 /* 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
859 static gchar *
11586
9e221fc0e2f8 [gaim-migrate @ 13856]
Nathan Walp <nwalp@pidgin.im>
parents: 11572
diff changeset
860 ucs2_to_utf8_with_bom_check(gchar *data, guint len) {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
861 char *fromcode = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
862 GError *error = NULL;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
863 guint16 c;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
864 gchar *utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
865
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
866 /*
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
867 * Unicode Techinical Report 20
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
868 * ( http://www.unicode.org/unicode/reports/tr20/ ) says to treat an
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
869 * initial 0xfeff (ZWNBSP) as a byte order indicator so that is
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
870 * 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
871 * order
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
872 */
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
873
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
874 memcpy(&c, data, 2);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
875 switch (c) {
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
876 case 0xfeff:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
877 case 0xfffe:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
878 fromcode = ucs2_order(c == 0xfeff);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
879 data += 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
880 len -= 2;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
881 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
882 default:
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
883 fromcode = "UCS-2";
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
884 break;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
885 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
886
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
887 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
888
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
889 if (error) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
890 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
891 g_error_free(error);
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
892 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
893 return utf8_ret;
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
894 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
895
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
896
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
897 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
898 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
899 gboolean primary = (clipboard != clipboard_selection);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
900 GtkTextIter start, end;
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
901
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
902 if (primary) {
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
903 GtkTextMark *sel = NULL, *ins = NULL;
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
904 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
905 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
906 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
907 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
908 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
909
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
910 if (info == TARGET_HTML) {
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
911 char *selection;
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
912 #ifndef _WIN32
8907
17b9da22de1e [gaim-migrate @ 9677]
Gary Kramlich <grim@pidgin.im>
parents: 8890
diff changeset
913 gsize len;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
914 GString *str = g_string_new(NULL);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
915 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
916 text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
10013
6927760cd4fd [gaim-migrate @ 10930]
Gary Kramlich <grim@pidgin.im>
parents: 9924
diff changeset
917 } else
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
918 text = html_clipboard;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
919
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
920 /* 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
921 str = g_string_append_unichar(str, 0xfeff);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
922 str = g_string_append(str, text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
923 str = g_string_append_unichar(str, 0x0000);
8148
dc970ca129c5 [gaim-migrate @ 8859]
Mohammed Sameer <msameer@users.sourceforge.net>
parents: 8128
diff changeset
924 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
925 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
926 g_string_free(str, TRUE);
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
927 #else
18665
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
928 selection = clipboard_html_to_win32(html_clipboard);
15111
e427dd6f3b7e [gaim-migrate @ 17833]
Daniel Atallah <datallah@pidgin.im>
parents: 15093
diff changeset
929 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
930 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
931 g_free(selection);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
932 } else {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
933 if (primary) {
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
934 text = gtk_imhtml_get_text(imhtml, &start, &end);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
935 } else
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
936 text = text_clipboard;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
937 gtk_selection_data_set_text(selection_data, text, strlen(text));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
938 }
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
939 if (primary) /* This was allocated here */
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
940 g_free(text);
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
941 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
942
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
943 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
944 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
945 GtkTextIter insert;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
946 GtkTextIter selection_bound;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
947
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
948 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &insert,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
949 gtk_text_buffer_get_mark (imhtml->text_buffer, "insert"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
950 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
951 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"));
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
952
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
953 if (!gtk_text_iter_equal (&insert, &selection_bound))
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
954 gtk_text_buffer_move_mark (imhtml->text_buffer,
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
955 gtk_text_buffer_get_mark (imhtml->text_buffer, "selection_bound"),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
956 &insert);
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
957 }
7742
0289c206bcff [gaim-migrate @ 8387]
Sean Egan <seanegan@pidgin.im>
parents: 7740
diff changeset
958
17546
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
959 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
960 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
961 {
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
962 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
963 }
51b1c1e2c3fe Maintain global poitners to the clipboard selection text, with the aim of
Sean Egan <seanegan@pidgin.im>
parents: 17406
diff changeset
964
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
965 static void copy_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
7749
afe790299bd7 [gaim-migrate @ 8394]
Sean Egan <seanegan@pidgin.im>
parents: 7745
diff changeset
966 {
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
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);
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
971 gtk_clipboard_set_with_data(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,
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
974 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, NULL);
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
18665
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
976 g_free(html_clipboard);
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
977 g_free(text_clipboard);
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
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
979 html_clipboard = gtk_imhtml_get_markup_range(imhtml, &start, &end);
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
980 text_clipboard = gtk_imhtml_get_text(imhtml, &start, &end);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
981 }
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
982
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
983 g_signal_stop_emission_by_name(imhtml, "copy-clipboard");
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
984 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
985
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
986 static void cut_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
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 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
989 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
990 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
991 clipboard_selection = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD);
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
992 gtk_clipboard_set_with_data(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
993 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
994 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
995 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, NULL);
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
996
18665
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
997 g_free(html_clipboard);
157820042a6f Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
Daniel Atallah <datallah@pidgin.im>
parents: 18633
diff changeset
998 g_free(text_clipboard);
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
999
21085
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
1000 html_clipboard = gtk_imhtml_get_markup_range(imhtml, &start, &end);
dff5e0bfb8f5 Don't assign ownership of the CLIPBOARD to the IMHtml - it doesn't really own the data and then we don't have problems of overwriting what others put in the clipboard. Fixes #3616.
Daniel Atallah <datallah@pidgin.im>
parents: 21076
diff changeset
1001 text_clipboard = 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
1002
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
1003 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
1004 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1005 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1006
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1007 g_signal_stop_emission_by_name(imhtml, "cut-clipboard");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1008 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1009
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1010 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
1011 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1012 GtkTextIter iter;
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
1013 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
1014
9028
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
1015 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
1016 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
9a1a32485442 [gaim-migrate @ 9804]
Tim Ringenbach <marv@pidgin.im>
parents: 9025
diff changeset
1017
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1018 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
1019 if (!imhtml->wbfo && !plaintext)
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1020 gtk_imhtml_close_tags(imhtml, &iter);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1021
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1022 gtk_imhtml_insert_html_at_iter(imhtml, text, flags, &iter);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1023 gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "insert", &iter);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1024 gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(imhtml), gtk_text_buffer_get_insert(imhtml->text_buffer),
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1025 0, FALSE, 0.0, 0.0);
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
1026 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
1027 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
1028
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1029 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1030
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1031 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
1032 {
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1033 char *tmp;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1034
19332
06b251c98872 malloc(0) returns a null pointer. Fixes #2472.
Daniel Atallah <datallah@pidgin.im>
parents: 19103
diff changeset
1035 if (text == NULL || !(*text))
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1036 return;
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1037
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1038 tmp = g_markup_escape_text(text, -1);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1039 imhtml_paste_insert(data, tmp, TRUE);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1040 g_free(tmp);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1041 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1042
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1043 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
1044 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1045 char *text;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1046 GtkIMHtml *imhtml = data;
7809
f4f6ac8d112a [gaim-migrate @ 8456]
Nathan Walp <nwalp@pidgin.im>
parents: 7808
diff changeset
1047
8123
e09c75f511c2 [gaim-migrate @ 8827]
Mark Doliner <markdoliner@pidgin.im>
parents: 8120
diff changeset
1048 if (!gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml)))
8105
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1049 return;
54ea897b764e [gaim-migrate @ 8805]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8091
diff changeset
1050
19332
06b251c98872 malloc(0) returns a null pointer. Fixes #2472.
Daniel Atallah <datallah@pidgin.im>
parents: 19103
diff changeset
1051 if (imhtml->wbfo || selection_data->length <= 0) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1052 gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml);
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1053 return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1054 } else {
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1055 #if 0
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1056 /* 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
1057 {
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1058 int i;
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1059
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1060 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
1061 selection_data->format, selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1062
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1063 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
1064 if ((i % 70) == 0)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1065 printf("\n\t");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1066 if (selection_data->data[i] == '\0')
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1067 printf(".");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1068 else
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1069 printf("%c", selection_data->data[i]);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1070 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1071 printf("\n");
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1072 }
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1073 #endif
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1074 text = g_malloc(selection_data->length);
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
1075 memcpy(text, selection_data->data, selection_data->length);
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1076 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1077
8869
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1078 if (selection_data->length >= 2 &&
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1079 (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) {
19ba5ea87889 [gaim-migrate @ 9637]
Ethan Blanton <elb@pidgin.im>
parents: 8858
diff changeset
1080 /* This is UCS-2 */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1081 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
1082 g_free(text);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1083 text = utf8;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1084 if (!text) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1085 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
1086 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1087 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1088 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1089
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1090 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
1091 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
1092 g_free(text);
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1093 return;
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1094 }
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
1095
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1096 imhtml_paste_insert(imhtml, text, FALSE);
8681
f7dc7d2bf200 [gaim-migrate @ 9434]
Sean Egan <seanegan@pidgin.im>
parents: 8677
diff changeset
1097 g_free(text);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1098 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1099
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1100 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1101 {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1102 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1103 /* 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
1104 clipboard before we try to paste from the GTK buffer */
5d81e32bd258 [gaim-migrate @ 12622]
Daniel Atallah <datallah@pidgin.im>
parents: 10900
diff changeset
1105 if (!clipboard_paste_html_win32(imhtml)) {
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1106 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1107 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
1108 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1109 paste_received_cb, imhtml);
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1110 #ifdef _WIN32
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1111 }
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1112 #endif
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1113 g_signal_stop_emission_by_name(imhtml, "paste-clipboard");
7766
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1114 }
7d7115c189d7 [gaim-migrate @ 8411]
Sean Egan <seanegan@pidgin.im>
parents: 7754
diff changeset
1115
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1116 static void imhtml_realized_remove_primary(GtkIMHtml *imhtml, gpointer unused)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1117 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1118 gtk_text_buffer_remove_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1119 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
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 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1122
8740
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1123 static void imhtml_destroy_add_primary(GtkIMHtml *imhtml, gpointer unused)
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1124 {
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1125 gtk_text_buffer_add_selection_clipboard(GTK_IMHTML(imhtml)->text_buffer,
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1126 gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_PRIMARY));
098a43943bba [gaim-migrate @ 9495]
Christian Hammond <chipx86@chipx86.com>
parents: 8735
diff changeset
1127 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1128
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1129 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
1130 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1131 if (gtk_text_buffer_get_selection_bounds(buffer, NULL, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1132 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
1133 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1134 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1135 (GtkClipboardClearFunc)gtk_imhtml_primary_clipboard_clear, G_OBJECT(imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1136 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1137 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1138
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1139 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
1140 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1141 if (event->button == 2) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1142 int x, y;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1143 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1144 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
1145
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1146 if (!imhtml->editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1147 return FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1148
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1149 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1150 GTK_TEXT_WINDOW_TEXT,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1151 event->x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1152 event->y,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1153 &x,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1154 &y);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1155 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
1156 gtk_text_buffer_place_cursor(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1157
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1158 gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE),
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1159 paste_received_cb, imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1160
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1161 return TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1162 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1163
7346
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1164 return FALSE;
7a2bc2fa15bc [gaim-migrate @ 7937]
Sean Egan <seanegan@pidgin.im>
parents: 7344
diff changeset
1165 }
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1166
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
1167 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
1168 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
1169 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
1170 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
1171
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1172 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
1173 }
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1174
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1175 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
1176 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
1177 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
1178 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
1179
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1180 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
1181
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1182 }
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1183
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1184 static gboolean imhtml_message_send(GtkIMHtml *imhtml)
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1185 {
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1186 return FALSE;
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1187 }
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1188
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1189 static void imhtml_toggle_format(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1190 {
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1191 /* since this function is the handler for the formatting keystrokes,
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1192 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
1193 buttons &= imhtml->format_functions;
10699
7f9fa4f13758 [gaim-migrate @ 12256]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10695
diff changeset
1194
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1195 switch (buttons) {
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1196 case GTK_IMHTML_BOLD:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1197 imhtml_toggle_bold(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1198 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1199 case GTK_IMHTML_ITALIC:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1200 imhtml_toggle_italic(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1201 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1202 case GTK_IMHTML_UNDERLINE:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1203 imhtml_toggle_underline(imhtml);
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1204 break;
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1205 case GTK_IMHTML_STRIKE:
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1206 imhtml_toggle_strike(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1207 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1208 case GTK_IMHTML_SHRINK:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1209 imhtml_font_shrink(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1210 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1211 case GTK_IMHTML_GROW:
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
1212 imhtml_font_grow(imhtml);
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1213 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1214 default:
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1215 break;
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1216 }
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1217 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1218
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1219 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1220 gtk_imhtml_finalize (GObject *object)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1221 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1222 GtkIMHtml *imhtml = GTK_IMHTML(object);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1223 GList *scalables;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1224 GSList *l;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1225
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1226 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1227 g_source_remove(imhtml->scroll_src);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1228 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1229 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
1230
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1231 g_hash_table_destroy(imhtml->smiley_data);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1232 gtk_smiley_tree_destroy(imhtml->default_smilies);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1233 gdk_cursor_unref(imhtml->hand_cursor);
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
1234 gdk_cursor_unref(imhtml->arrow_cursor);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1235 gdk_cursor_unref(imhtml->text_cursor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1236
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1237 if(imhtml->tip_window){
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1238 gtk_widget_destroy(imhtml->tip_window);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1239 }
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1240 if(imhtml->tip_timer)
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1241 gtk_timeout_remove(imhtml->tip_timer);
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1242
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1243 for(scalables = imhtml->scalables; scalables; scalables = scalables->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1244 struct scalable_data *sd = scalables->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1245 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1246 scale->free(scale);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1247 g_free(sd);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1248 }
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
1249
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1250 for (l = imhtml->im_images; l; l = l->next) {
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1251 struct im_image_data *img_data = l->data;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1252 if (imhtml->funcs->image_unref)
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1253 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
1254 g_free(img_data);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1255 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1256
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1257 g_list_free(imhtml->scalables);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
1258 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
1259 g_queue_free(imhtml->animations);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1260 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
1261 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
1262 g_object_unref(imhtml->undo_manager);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1263 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
1264
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1265 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1266
10814
7e17cb56b019 [gaim-migrate @ 12468]
Luke Schierer <lschiere@pidgin.im>
parents: 10799
diff changeset
1267 /* Boring GTK+ stuff */
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1268 static void gtk_imhtml_class_init (GtkIMHtmlClass *klass)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1269 {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1270 GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1271 GtkObjectClass *object_class;
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1272 GtkBindingSet *binding_set;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1273 GObjectClass *gobject_class;
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1274 object_class = (GtkObjectClass*) klass;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
1275 gobject_class = (GObjectClass*) klass;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1276 parent_class = gtk_type_class(GTK_TYPE_TEXT_VIEW);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1277 signals[URL_CLICKED] = g_signal_new("url_clicked",
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1278 G_TYPE_FROM_CLASS(gobject_class),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1279 G_SIGNAL_RUN_FIRST,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1280 G_STRUCT_OFFSET(GtkIMHtmlClass, url_clicked),
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1281 NULL,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1282 0,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1283 g_cclosure_marshal_VOID__POINTER,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1284 G_TYPE_NONE, 1,
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1285 G_TYPE_POINTER);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1286 signals[BUTTONS_UPDATE] = g_signal_new("format_buttons_update",
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1287 G_TYPE_FROM_CLASS(gobject_class),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1288 G_SIGNAL_RUN_FIRST,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1289 G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1290 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1291 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1292 g_cclosure_marshal_VOID__INT,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1293 G_TYPE_NONE, 1,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1294 G_TYPE_INT);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1295 signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1296 G_TYPE_FROM_CLASS(gobject_class),
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1297 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1298 G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1299 NULL,
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1300 0,
10076
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1301 g_cclosure_marshal_VOID__INT,
1ccc0286a4ae [gaim-migrate @ 11057]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10062
diff changeset
1302 G_TYPE_NONE, 1,
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
1303 G_TYPE_INT);
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1304 signals[CLEAR_FORMAT] = g_signal_new("format_function_clear",
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1305 G_TYPE_FROM_CLASS(gobject_class),
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1306 G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1307 G_STRUCT_OFFSET(GtkIMHtmlClass, clear_format),
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1308 NULL,
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
1309 0,
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1310 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1311 G_TYPE_NONE, 0);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
1312 signals[UPDATE_FORMAT] = g_signal_new("format_function_update",
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1313 G_TYPE_FROM_CLASS(gobject_class),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1314 G_SIGNAL_RUN_FIRST,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1315 G_STRUCT_OFFSET(GtkIMHtmlClass, update_format),
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1316 NULL,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1317 0,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1318 g_cclosure_marshal_VOID__VOID,
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1319 G_TYPE_NONE, 0);
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1320 signals[MESSAGE_SEND] = g_signal_new("message_send",
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1321 G_TYPE_FROM_CLASS(gobject_class),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1322 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1323 G_STRUCT_OFFSET(GtkIMHtmlClass, message_send),
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1324 NULL,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1325 0, g_cclosure_marshal_VOID__VOID,
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1326 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
1327 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
1328 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
1329 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
1330 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
1331 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
1332 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
1333 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
1334 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
1335 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
1336 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
1337 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
1338 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
1339 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
1340 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
1341 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
1342 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
1343 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
1344 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
1345
5e73968467e0 Undo/Redo in GtkImHtml from GtkSourceView. This may not be adaquate enough for us.
Sean Egan <seanegan@pidgin.im>
parents: 17288
diff changeset
1346
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1347
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1348 klass->toggle_format = imhtml_toggle_format;
10108
0897c42d6cb9 [gaim-migrate @ 11141]
Sean Egan <seanegan@pidgin.im>
parents: 10100
diff changeset
1349 klass->message_send = imhtml_message_send;
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
1350 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
1351 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
1352 klass->redo = gtk_imhtml_redo;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1353
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1354 gobject_class->finalize = gtk_imhtml_finalize;
10184
543c9a84ce16 [gaim-migrate @ 11299]
Mark Doliner <markdoliner@pidgin.im>
parents: 10169
diff changeset
1355 widget_class->drag_motion = gtk_text_view_drag_motion;
10692
f5c8ae17800b [gaim-migrate @ 12243]
Sean Egan <seanegan@pidgin.im>
parents: 10666
diff changeset
1356 widget_class->expose_event = gtk_imhtml_expose_event;
18968
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
1357 parent_size_allocate = widget_class->size_allocate;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
1358 widget_class->size_allocate = gtk_imhtml_size_allocate;
2ddbe6473bc9 Cool! Override GtkTextView's size allocate function in GtkIMHtml to make sure that it stays scrolled to the bottom whenever it's resized. Fixes a major annoyance and possibly #938
Sean Egan <seanegan@pidgin.im>
parents: 18665
diff changeset
1359
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1360 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
1361 _("Hyperlink color"),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1362 _("Color to draw hyperlinks."),
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
1363 GDK_TYPE_COLOR, G_PARAM_READABLE));
10799
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1364 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
1365 _("Hyperlink prelight color"),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1366 _("Color to draw hyperlinks when mouse is over them."),
69ccc5c5518c [gaim-migrate @ 12442]
Tim Ringenbach <marv@pidgin.im>
parents: 10798
diff changeset
1367 GDK_TYPE_COLOR, G_PARAM_READABLE));
10100
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1368
4bbba369808a [gaim-migrate @ 11123]
Sean Egan <seanegan@pidgin.im>
parents: 10076
diff changeset
1369 binding_set = gtk_binding_set_by_class (parent_class);
10110
5869fb4a575d [gaim-migrate @ 11143]
Sean Egan <seanegan@pidgin.im>
parents: 10108
diff changeset
1370 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
1371 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
1372 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
1373 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
1374 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
1375 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
1376 binding_set = gtk_binding_set_by_class(klass);
11385
38ca1438e055 [gaim-migrate @ 13612]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11315
diff changeset
1377 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
1378 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
1379 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
1380 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
1381 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
1382 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
1383
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1384 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1385
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1386 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1387 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1388 GtkTextIter iter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1389 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
1390 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
1391 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1392 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
1393 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
1394 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
1395 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(imhtml), 2);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1396 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
1397 /*gtk_text_view_set_indent(GTK_TEXT_VIEW(imhtml), -15);*/
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1398 /*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
1399
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1400 /* 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
1401 * 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
1402 * 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
1403 * apply them anywhere yet. */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1404 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
1405 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
1406 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
1407 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
1408 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
1409 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
1410 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
1411 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
1412
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1413 /* 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
1414 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1415 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1416 imhtml->text_cursor = gdk_cursor_new (GDK_XTERM);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1417
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
1418 imhtml->show_comments = TRUE;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1419
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1420 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
1421 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1422 imhtml->default_smilies = gtk_smiley_tree_new();
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1423
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1424 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
1425 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
1426 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
1427 #if (!GTK_CHECK_VERSION(2,2,0))
fb5b88957742 [gaim-migrate @ 12516]
Richard Laager <rlaager@pidgin.im>
parents: 10834
diff changeset
1428 /* See the comment for gtk_key_pressed_cb */
6066
444d1ed0a273 [gaim-migrate @ 6516]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6056
diff changeset
1429 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
1430 #endif
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1431 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
1432 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
1433 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
1434 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
1435 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
1436 gtk_drag_dest_set(GTK_WIDGET(imhtml), 0,
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1437 link_drag_drop_targets, sizeof(link_drag_drop_targets) / sizeof(GtkTargetEntry),
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1438 GDK_ACTION_COPY);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1439 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
1440 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
1441
7353
53cb39c73cf3 [gaim-migrate @ 7944]
Sean Egan <seanegan@pidgin.im>
parents: 7346
diff changeset
1442 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
1443 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
1444 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
1445 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
1446 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
1447
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1448 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
1449 G_CALLBACK(mark_set_so_update_selection_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1450
10946
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1451 gtk_widget_add_events(GTK_WIDGET(imhtml),
63a41710fc94 [gaim-migrate @ 12742]
Daniel Atallah <datallah@pidgin.im>
parents: 10936
diff changeset
1452 GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1453
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1454 imhtml->tip = NULL;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1455 imhtml->tip_timer = 0;
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
1456 imhtml->tip_window = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1457
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1458 imhtml->edit.bold = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1459 imhtml->edit.italic = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1460 imhtml->edit.underline = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1461 imhtml->edit.forecolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1462 imhtml->edit.backcolor = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1463 imhtml->edit.fontface = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1464 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1465 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1466
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1467
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
1468 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
1469 imhtml->animations = g_queue_new();
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1470 gtk_imhtml_set_editable(imhtml, FALSE);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1471 g_signal_connect(G_OBJECT(imhtml), "populate-popup",
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1472 G_CALLBACK(hijack_menu_cb), NULL);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1473 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1474
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1475 GtkWidget *gtk_imhtml_new(void *a, void *b)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1476 {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1477 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1478 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1479
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1480 GType gtk_imhtml_get_type()
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1481 {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1482 static GType imhtml_type = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1483
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1484 if (!imhtml_type) {
9037
6ba358dfe075 [gaim-migrate @ 9813]
Kevin Stange <kstange@pidgin.im>
parents: 9034
diff changeset
1485 static const GTypeInfo imhtml_info = {
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1486 sizeof(GtkIMHtmlClass),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1487 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1488 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1489 (GClassInitFunc) gtk_imhtml_class_init,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1490 NULL,
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1491 NULL,
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1492 sizeof (GtkIMHtml),
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1493 0,
12600
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1494 (GInstanceInitFunc) gtk_imhtml_init,
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 12553
diff changeset
1495 NULL
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1496 };
4635
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1497
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1498 imhtml_type = g_type_register_static(gtk_text_view_get_type(),
475ccd9dc3ac [gaim-migrate @ 4942]
Nathan Walp <nwalp@pidgin.im>
parents: 4630
diff changeset
1499 "GtkIMHtml", &imhtml_info, 0);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1500 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1501
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1502 return imhtml_type;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1503 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1504
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1505 struct url_data {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1506 GObject *object;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1507 gchar *url;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1508 };
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1509
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1510 static void url_data_destroy(gpointer mydata)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1511 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1512 struct url_data *data = mydata;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1513 g_object_unref(data->object);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1514 g_free(data->url);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1515 g_free(data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1516 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1517
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1518 static void url_open(GtkWidget *w, struct url_data *data) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1519 if(!data) return;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1520 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
1521
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1522 }
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1523
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1524 static void url_copy(GtkWidget *w, gchar *url) {
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1525 GtkClipboard *clipboard;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1526
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1527 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_PRIMARY);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1528 gtk_clipboard_set_text(clipboard, url, -1);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1529
8931
30432ceb156f [gaim-migrate @ 9701]
Tim Ringenbach <marv@pidgin.im>
parents: 8909
diff changeset
1530 clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_CLIPBOARD);
5582
2e5da5db947b [gaim-migrate @ 5986]
Robert McQueen <robot101@debian.org>
parents: 5367
diff changeset
1531 gtk_clipboard_set_text(clipboard, url, -1);
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1532 }
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1533
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1534 /* The callback for an event on a link tag. */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
1535 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
1536 GdkEventButton *event_button = (GdkEventButton *) event;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1537 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1538 return FALSE;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1539 if (event->type == GDK_BUTTON_RELEASE) {
8957
b65a01270451 [gaim-migrate @ 9731]
Tim Ringenbach <marv@pidgin.im>
parents: 8932
diff changeset
1540 if ((event_button->button == 1) || (event_button->button == 2)) {
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1541 GtkTextIter start, end;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1542 /* 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
1543 if (gtk_text_buffer_get_selection_bounds(
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1544 gtk_text_iter_get_buffer(arg2), &start, &end))
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1545 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1546
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1547 /* A link was clicked--we emit the "url_clicked" signal
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1548 * with the URL as the argument */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1549 g_object_ref(G_OBJECT(tag));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1550 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
1551 g_object_unref(G_OBJECT(tag));
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1552 return FALSE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1553 } else if(event_button->button == 3) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1554 GtkWidget *img, *item, *menu;
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1555 struct url_data *tempdata = g_new(struct url_data, 1);
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1556 tempdata->object = g_object_ref(imhtml);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1557 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
1558
5091
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1559 /* 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
1560 if (GTK_IMHTML(imhtml)->tip_window) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1561 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1562 GTK_IMHTML(imhtml)->tip_window = NULL;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1563 }
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1564 if (GTK_IMHTML(imhtml)->tip_timer) {
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1565 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1566 GTK_IMHTML(imhtml)->tip_timer = 0;
aee60723c147 [gaim-migrate @ 5453]
Ari Pollak <ari@debian.org>
parents: 5046
diff changeset
1567 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1568 if (GTK_IMHTML(imhtml)->editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1569 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
1570 else
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
1571 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
1572 menu = gtk_menu_new();
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1573 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
1574
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1575 /* buttons and such */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1576
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1577 if (!strncmp(tempdata->url, "mailto:", 7))
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1578 {
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1579 /* Copy E-Mail Address */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1580 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1581 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1582 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1583 _("_Copy E-Mail Address"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1584 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
1585 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1586 G_CALLBACK(url_copy), tempdata->url + 7);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1587 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1588 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1589 else
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1590 {
10936
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1591 /* Open Link in Browser */
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1592 img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1593 GTK_ICON_SIZE_MENU);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1594 item = gtk_image_menu_item_new_with_mnemonic(
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1595 _("_Open Link in Browser"));
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1596 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1597 g_signal_connect(G_OBJECT(item), "activate",
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1598 G_CALLBACK(url_open), tempdata);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1599 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
d42af9473789 [gaim-migrate @ 12720]
Alex Duggan
parents: 10901
diff changeset
1600
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1601 /* Copy Link Location */
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1602 img = gtk_image_new_from_stock(GTK_STOCK_COPY,
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1603 GTK_ICON_SIZE_MENU);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1604 item = gtk_image_menu_item_new_with_mnemonic(
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1605 _("_Copy Link Location"));
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1606 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
1607 g_signal_connect(G_OBJECT(item), "activate",
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
1608 G_CALLBACK(url_copy), tempdata->url);
7140
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1609 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1610 }
2670fa7da352 [gaim-migrate @ 7707]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
1611
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1612
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1613 gtk_widget_show_all(menu);
4756
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1614 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
ee19a87a495f [gaim-migrate @ 5073]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1615 event_button->button, event_button->time);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4740
diff changeset
1616
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1617 return TRUE;
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1618 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1619 }
4417
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1620 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1621 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
1622 be caught by the regular GtkTextView menu */
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1623 else
43ddfb896fb5 [gaim-migrate @ 4690]
Ari Pollak <ari@debian.org>
parents: 4371
diff changeset
1624 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
1625 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1626
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1627 static gboolean
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1628 gtk_text_view_drag_motion (GtkWidget *widget,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1629 GdkDragContext *context,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1630 gint x,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1631 gint y,
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1632 guint time)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1633 {
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1634 GdkDragAction suggested_action = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1635
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1636 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
1637 /* can't accept any of the offered targets */
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1638 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1639 GtkWidget *source_widget;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1640 suggested_action = context->suggested_action;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1641 source_widget = gtk_drag_get_source_widget (context);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1642 if (source_widget == widget) {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1643 /* Default to MOVE, unless the user has
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1644 * pressed ctrl or alt to affect available actions
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 if ((context->actions & GDK_ACTION_MOVE) != 0)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1647 suggested_action = GDK_ACTION_MOVE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1648 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1649 }
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1650
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1651 gdk_drag_status (context, suggested_action, time);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1652
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1653 /* TRUE return means don't propagate the drag motion to parent
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1654 * widgets that may also be drop sites.
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1655 */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1656 return TRUE;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1657 }
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 static void
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1660 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
1661 {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1662 GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1663
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1664 if (target != GDK_NONE)
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1665 gtk_drag_get_data (widget, context, target, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1666 else
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1667 gtk_drag_finish (context, FALSE, FALSE, time);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1668
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1669 return;
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
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1672 static void
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1673 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
1674 GtkSelectionData *sd, guint info, guint t, GtkIMHtml *imhtml)
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1675 {
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1676 gchar **links;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1677 gchar *link;
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1678 char *text = (char *)sd->data;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1679 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1680 GtkTextIter iter;
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1681 gint i = 0;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1682
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1683 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
1684
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1685 if(gtk_imhtml_get_editable(imhtml) && sd->data){
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1686 switch (info) {
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1687 case GTK_IMHTML_DRAG_URL:
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1688 /* 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
1689 purple_str_strip_char((char *)sd->data, '\r');
11143
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1690
f606fb334190 [gaim-migrate @ 13207]
Mark Doliner <markdoliner@pidgin.im>
parents: 11069
diff changeset
1691 links = g_strsplit((char *)sd->data, "\n", 0);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1692 while((link = links[i]) != NULL){
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1693 if(purple_str_has_prefix(link, "http://") ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1694 purple_str_has_prefix(link, "https://") ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1695 purple_str_has_prefix(link, "ftp://"))
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1696 {
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1697 gchar *label;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1698
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1699 if(links[i + 1])
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1700 i++;
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1701
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1702 label = links[i];
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1703
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1704 gtk_imhtml_insert_link(imhtml, mark, link, label);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1705 } else if (link=='\0') {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1706 /* Ignore blank lines */
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1707 } else {
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1708 /* 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
1709 /* ... don't pretend we handled it if we didn't */
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1710 gtk_drag_finish(dc, FALSE, FALSE, t);
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1711 g_strfreev(links);
10345
7d7f8cfa2b4f [gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 10297
diff changeset
1712 return;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1713 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1714
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1715 i++;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1716 }
10782
18cc41076f4e [gaim-migrate @ 12410]
Luke Schierer <lschiere@pidgin.im>
parents: 10777
diff changeset
1717 g_strfreev(links);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1718 break;
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1719 case GTK_IMHTML_DRAG_HTML:
10243
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 char *utf8 = NULL;
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1722 /* 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
1723 * as explained by this comment in gtkhtml:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1724 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1725 * 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
1726 * mozilla/netscape alway use ucs2 for text/html
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1727 * 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
1728 * 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
1729 *
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1730 * See also the comment on text/html here:
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1731 * 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
1732 */
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1733 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
1734 utf8 = ucs2_to_utf8_with_bom_check(text, sd->length);
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1735
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1736 if (!utf8) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
1737 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
1738 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1739 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1740 } 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
1741 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
1742 return;
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1743 }
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1744
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1745 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
1746 g_free(utf8);
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1747 break;
10243
6d75b29afc71 [gaim-migrate @ 11383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10217
diff changeset
1748 }
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1749 case GTK_IMHTML_DRAG_TEXT:
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1750 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
1751 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
1752 return;
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1753 } else {
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10699
diff changeset
1754 char *tmp = g_markup_escape_text(text, -1);
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1755 gtk_imhtml_insert_html_at_iter(imhtml, tmp, 0, &iter);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1756 g_free(tmp);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1757 }
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1758 break;
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1759 default:
10145
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1760 gtk_drag_finish(dc, FALSE, FALSE, t);
f1405f65ff41 [gaim-migrate @ 11218]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10110
diff changeset
1761 return;
8091
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1762 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1763 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1764 } else {
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1765 gtk_drag_finish(dc, FALSE, FALSE, t);
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1766 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1767 }
e2ffba819297 [gaim-migrate @ 8790]
Sean Egan <seanegan@pidgin.im>
parents: 8061
diff changeset
1768
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1769 /* this isn't used yet
9300
eefa5cc2f465 [gaim-migrate @ 10104]
Sean Egan <seanegan@pidgin.im>
parents: 9287
diff changeset
1770 static void gtk_smiley_tree_remove (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1771 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1772 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1773 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1774 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1775 gint len = 0;
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 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1778 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1779
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1780 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1781 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1782
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1783 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1784 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1785 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1786 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1787 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1788
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1789 x++; len++;
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
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1792 if (t->image) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1793 t->image = NULL;
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
1794 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1795 }
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1796 */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
1797
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1798
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1799 static gint
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1800 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1801 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1802 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1803 GtkSmileyTree *t = tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1804 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1805 gint len = 0;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
1806 const gchar *amp;
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1807 gint alen;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1808
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1809 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1810 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1811
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1812 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1813 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1814
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
1815 if(*x == '&' && (amp = purple_markup_unescape_entity(x, &alen))) {
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1816 gboolean matched = TRUE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1817 /* Make sure all chars of the unescaped value match */
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1818 while (*(amp + 1)) {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1819 pos = strchr (t->values->str, *amp);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1820 if (pos)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1821 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
1822 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1823 matched = FALSE;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1824 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1825 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1826 amp++;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1827 }
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1828 if (!matched)
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1829 break;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1830
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1831 pos = strchr (t->values->str, *amp);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1832 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1833 else if (*x == '<') /* Because we're all WYSIWYG now, a '<'
9636
1648147987cd [gaim-migrate @ 10480]
Sean Egan <seanegan@pidgin.im>
parents: 9621
diff changeset
1834 * 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
1835 * 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
1836 break;
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1837 else {
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1838 alen = 1;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1839 pos = strchr (t->values->str, *x);
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1840 }
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1841
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1842 if (pos)
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1843 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
1844 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1845 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1846
10865
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1847 x += alen;
f5bb66be81a0 [gaim-migrate @ 12549]
Daniel Atallah <datallah@pidgin.im>
parents: 10858
diff changeset
1848 len += alen;
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
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1851 if (t->image)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1852 return len;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1853
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1854 return 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1855 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1856
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1857 void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1858 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
10537
9ece7671fa62 [gaim-migrate @ 11890]
Mark Doliner <markdoliner@pidgin.im>
parents: 10526
diff changeset
1859 const gchar *sml,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1860 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1861 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1862 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1863 g_return_if_fail (imhtml != NULL);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1864 g_return_if_fail (GTK_IS_IMHTML (imhtml));
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1865
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1866 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1867 tree = imhtml->default_smilies;
12833
1f461f275b90 [gaim-migrate @ 15181]
Richard Laager <rlaager@pidgin.im>
parents: 12796
diff changeset
1868 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
1869 tree = gtk_smiley_tree_new();
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
1870 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
1871 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1872
12335
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1873 smiley->imhtml = imhtml;
d0a2da9e75c0 [gaim-migrate @ 14639]
Tim Ringenbach <marv@pidgin.im>
parents: 12253
diff changeset
1874
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
1875 gtk_smiley_tree_insert (tree, smiley);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1876 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1877
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1878 static gboolean
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1879 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1880 GSList *fonts,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1881 const gchar *text,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1882 gint *len)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1883 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1884 GtkSmileyTree *tree;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
1885 GtkIMHtmlFontDetail *font;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1886 char *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1887
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1888 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1889 font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1890 sml = font->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1891 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1892
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1893 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1894 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1895
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1896 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
1897 tree = imhtml->default_smilies;
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
1898
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1899 if (tree == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1900 return FALSE;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1901
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
1902 *len = gtk_smiley_tree_lookup (tree, text);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1903 return (*len > 0);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1904 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1905
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1906 GtkIMHtmlSmiley *
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1907 gtk_imhtml_smiley_get(GtkIMHtml *imhtml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1908 const gchar *sml,
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1909 const gchar *text)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1910 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1911 GtkSmileyTree *t;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1912 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1913 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1914 t = imhtml->default_smilies;
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1915 else
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1916 t = g_hash_table_lookup(imhtml->smiley_data, sml);
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1917
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1918
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1919 if (t == NULL)
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1920 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1921
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1922 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1923 gchar *pos;
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 if (!t->values) {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1926 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1927 }
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1928
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1929 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1930 if (pos) {
7371
24aea59c277c [gaim-migrate @ 7966]
Nathan Walp <nwalp@pidgin.im>
parents: 7358
diff changeset
1931 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
1932 } else {
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1933 return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1934 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1935 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1936 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1937
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1938 return t->image;
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1939 }
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1940
11677
89c2ab8d2ebf [gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents: 11586
diff changeset
1941 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
1942 gtk_smiley_get_image(GtkIMHtmlSmiley *smiley)
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1943 {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1944 if (!smiley->icon && smiley->file) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1945 smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1946 } else if (!smiley->icon && smiley->loader) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1947 smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader);
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1948 if (smiley->icon)
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1949 g_object_ref(G_OBJECT(smiley->icon));
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1950 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
1951
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
1952 return smiley->icon;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1953 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
1954
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
1955 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
1956 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
1957 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
1958 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
1959 {
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
1960 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
1961
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
1962 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
1963
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
1964 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
1965 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
1966
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
1967 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
1968 }
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
1969
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1970 #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
1971 *tag = g_strndup (string, strlen (x)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1972 *len = strlen (x) + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1973 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1974 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1975 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1976
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
1977 #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
1978 const gchar *c = string + strlen (x " "); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1979 gchar e = '"'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1980 gboolean quote = FALSE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1981 while (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1982 if (*c == '"' || *c == '\'') { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1983 if (quote && (*c == e)) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1984 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1985 else if (!quote) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1986 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1987 e = *c; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1988 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1989 } else if (!quote && (*c == '>')) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1990 break; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1991 c++; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1992 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1993 if (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1994 *tag = g_strndup (string, c - string); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1995 *len = c - string + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1996 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1997 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1998 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1999 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2000
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2001
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
2002 static gboolean
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2003 gtk_imhtml_is_tag (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2004 gchar **tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2005 gint *len,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2006 gint *type)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2007 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2008 char *close;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2009 *type = 1;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2010
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2011
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2012 if (!(close = strchr (string, '>')))
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2013 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2014
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2015 VALID_TAG ("B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2016 VALID_TAG ("BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2017 VALID_TAG ("/B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2018 VALID_TAG ("/BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2019 VALID_TAG ("I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2020 VALID_TAG ("ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2021 VALID_TAG ("/I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2022 VALID_TAG ("/ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2023 VALID_TAG ("U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2024 VALID_TAG ("UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2025 VALID_TAG ("/U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2026 VALID_TAG ("/UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2027 VALID_TAG ("S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2028 VALID_TAG ("STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2029 VALID_TAG ("/S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2030 VALID_TAG ("/STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2031 VALID_TAG ("SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2032 VALID_TAG ("/SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2033 VALID_TAG ("SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2034 VALID_TAG ("/SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2035 VALID_TAG ("PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2036 VALID_TAG ("/PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2037 VALID_TAG ("TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2038 VALID_TAG ("/TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2039 VALID_TAG ("BR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2040 VALID_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2041 VALID_TAG ("/FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2042 VALID_TAG ("/A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2043 VALID_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2044 VALID_TAG ("/P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2045 VALID_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2046 VALID_TAG ("/H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2047 VALID_TAG ("HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2048 VALID_TAG ("/HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2049 VALID_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2050 VALID_TAG ("/BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2051 VALID_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2052 VALID_TAG ("HEAD");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2053 VALID_TAG ("/HEAD");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2054 VALID_TAG ("BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2055 VALID_TAG ("/BINARY");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2056
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2057 VALID_OPT_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2058 VALID_OPT_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2059 VALID_OPT_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2060 VALID_OPT_TAG ("A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2061 VALID_OPT_TAG ("IMG");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2062 VALID_OPT_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2063 VALID_OPT_TAG ("H3");
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2064 VALID_OPT_TAG ("HTML");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2065
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2066 VALID_TAG ("CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2067 VALID_TAG ("/CITE");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2068 VALID_TAG ("EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2069 VALID_TAG ("/EM");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2070 VALID_TAG ("STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2071 VALID_TAG ("/STRONG");
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2072
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2073 VALID_OPT_TAG ("SPAN");
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2074 VALID_TAG ("/SPAN");
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2075 VALID_TAG ("BR/"); /* hack until gtkimhtml handles things better */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2076 VALID_TAG ("IMG");
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2077 VALID_TAG("SPAN");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2078 VALID_OPT_TAG("BR");
7988
fe4616ea76c3 [gaim-migrate @ 8665]
Nathan Walp <nwalp@pidgin.im>
parents: 7961
diff changeset
2079
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2080 if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) {
2954
fc07d855731d [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2081 gchar *e = strstr (string + strlen("!--"), "-->");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2082 if (e) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2083 *len = e - string + strlen ("-->");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2084 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2085 return TRUE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2086 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2087 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2088
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2089 *type = -1;
19733
ec657d978c5a disapproval of revision 'f08436883bb16f29affdc63e9fd86ff278ed368f'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19732
diff changeset
2090 *len = close - string + 1;
ec657d978c5a disapproval of revision 'f08436883bb16f29affdc63e9fd86ff278ed368f'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19732
diff changeset
2091 *tag = g_strndup(string, *len - 1);
ec657d978c5a disapproval of revision 'f08436883bb16f29affdc63e9fd86ff278ed368f'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19732
diff changeset
2092 return TRUE;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2093 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2094
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2095 static gchar*
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2096 gtk_imhtml_get_html_opt (gchar *tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2097 const gchar *opt)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2098 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2099 gchar *t = tag;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2100 gchar *e, *a;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2101 gchar *val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2102 gint len;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2103 const gchar *c;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2104 GString *ret;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2105
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2106 while (g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2107 gboolean quote = FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2108 if (*t == '\0') break;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2109 while (*t && !((*t == ' ') && !quote)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2110 if (*t == '\"')
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2111 quote = ! quote;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2112 t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2113 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2114 while (*t && (*t == ' ')) t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2115 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2116
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4764
diff changeset
2117 if (!g_ascii_strncasecmp (t, opt, strlen (opt))) {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2118 t += strlen (opt);
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2119 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2120 return NULL;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2121 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2122
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2123 if ((*t == '\"') || (*t == '\'')) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2124 e = a = ++t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2125 while (*e && (*e != *(t - 1))) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2126 if (*e == '\0') {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2127 return NULL;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2128 } else
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2129 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2130 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2131 e = a = t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2132 while (*e && !isspace ((gint) *e)) e++;
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2133 val = g_strndup(a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2134 }
5177
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 ret = g_string_new("");
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2137 e = val;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2138 while(*e) {
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2139 if((c = purple_markup_unescape_entity(e, &len))) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2140 ret = g_string_append(ret, c);
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2141 e += len;
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2142 } else {
19325
4ae1add93886 Thanks sadrul. Fixes #2277
Sean Egan <seanegan@pidgin.im>
parents: 19103
diff changeset
2143 gunichar uni = g_utf8_get_char(e);
4ae1add93886 Thanks sadrul. Fixes #2277
Sean Egan <seanegan@pidgin.im>
parents: 19103
diff changeset
2144 ret = g_string_append_unichar(ret, uni);
4ae1add93886 Thanks sadrul. Fixes #2277
Sean Egan <seanegan@pidgin.im>
parents: 19103
diff changeset
2145 e = g_utf8_next_char(e);
5177
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2146 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2147 }
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2148
7f8a27af0846 [gaim-migrate @ 5541]
Nathan Walp <nwalp@pidgin.im>
parents: 5174
diff changeset
2149 g_free(val);
8568
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2150
66907b37ce85 [gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents: 8566
diff changeset
2151 return g_string_free(ret, FALSE);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2152 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2153
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2154 static const char *accepted_protocols[] = {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2155 "http://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2156 "https://",
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2157 "ftp://"
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2158 };
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2159
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2160 static const int accepted_protocols_size = 3;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2161
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2162 /* 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
2163 the caller knows how long the protocol string is. */
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12335
diff changeset
2164 static int gtk_imhtml_is_protocol(const char *text)
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2165 {
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2166 gint i;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2167
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2168 for(i=0; i<accepted_protocols_size; i++){
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 18543
diff changeset
2169 if( g_ascii_strncasecmp(text, accepted_protocols[i], strlen(accepted_protocols[i])) == 0 ){
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2170 return strlen(accepted_protocols[i]);
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2171 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2172 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2173 return 0;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2174 }
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2175
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2176 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
2177 <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
2178
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 [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
2181 [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
2182 [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
2183 [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
2184 [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
2185 [20:00] <KingAnt> marv: Right
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2186 [20:00] <marv> alright
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2187
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2188 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
2189 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
2190 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
2191 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
2192 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2193
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2194 void gtk_imhtml_append_text_with_images (GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2195 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2196 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2197 GSList *unused)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2198 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2199 GtkTextIter iter, ins, sel;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2200 GdkRectangle rect;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2201 int y, height, ins_offset = 0, sel_offset = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2202 gboolean fixins = FALSE, fixsel = FALSE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2203
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2204 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2205 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2206 g_return_if_fail (text != NULL);
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_buffer_get_end_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2210 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
2211 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
2212 fixins = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2213 ins_offset = gtk_text_iter_get_offset(&ins);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2214 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2215
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2216 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
2217 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
2218 fixsel = TRUE;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2219 sel_offset = gtk_text_iter_get_offset(&sel);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2220 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2221
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2222 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2223 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
2224
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2225
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2226 if(((y + height) - (rect.y + rect.height)) > height
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2227 && gtk_text_buffer_get_char_count(imhtml->text_buffer)){
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2228 options |= GTK_IMHTML_NO_SCROLL;
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2231 gtk_imhtml_insert_html_at_iter(imhtml, text, options, &iter);
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 if (fixins) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2234 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
2235 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
2236 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2237
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2238 if (fixsel) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2239 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
2240 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
2241 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2242
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2243 if (!(options & GTK_IMHTML_NO_SCROLL)) {
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2244 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
2245 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2246 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2247
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2248 #define MAX_SCROLL_TIME 0.4 /* seconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2249 #define SCROLL_DELAY 33 /* milliseconds */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2250
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2251 /*
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2252 * Smoothly scroll a GtkIMHtml.
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2253 *
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2254 * @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
2255 */
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10865
diff changeset
2256 static gboolean scroll_cb(gpointer data)
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2257 {
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2258 GtkIMHtml *imhtml = data;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2259 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2260 gdouble max_val = adj->upper - adj->page_size;
19055
43f5771c45f4 Eliminate some unnecessary scrolling activity.
Daniel Atallah <datallah@pidgin.im>
parents: 18985
diff changeset
2261 gdouble scroll_val = gtk_adjustment_get_value(adj) + ((max_val - gtk_adjustment_get_value(adj)) / 3);
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2262
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2263 g_return_val_if_fail(imhtml->scroll_time != NULL, FALSE);
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2264
19055
43f5771c45f4 Eliminate some unnecessary scrolling activity.
Daniel Atallah <datallah@pidgin.im>
parents: 18985
diff changeset
2265 if (g_timer_elapsed(imhtml->scroll_time, NULL) > MAX_SCROLL_TIME || scroll_val >= max_val) {
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2266 /* time's up. jump to the end and kill the timer */
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2267 gtk_adjustment_set_value(adj, max_val);
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2268 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2269 imhtml->scroll_time = NULL;
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2270 return FALSE;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2271 }
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2272
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2273 /* scroll by 1/3rd the remaining distance */
19055
43f5771c45f4 Eliminate some unnecessary scrolling activity.
Daniel Atallah <datallah@pidgin.im>
parents: 18985
diff changeset
2274 gtk_adjustment_set_value(adj, scroll_val);
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2275 return TRUE;
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2276 }
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2277
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2278 static gboolean smooth_scroll_idle_cb(gpointer data)
10797
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2279 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2280 GtkIMHtml *imhtml = data;
11006
fe7360eddcb5 [gaim-migrate @ 12866]
Ted Percival
parents: 10946
diff changeset
2281 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
2282 return FALSE;
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2283 }
41028e463f3b [gaim-migrate @ 12440]
Tim Ringenbach <marv@pidgin.im>
parents: 10795
diff changeset
2284
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2285 static gboolean scroll_idle_cb(gpointer data)
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2286 {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2287 GtkIMHtml *imhtml = data;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2288 GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2289 if(adj) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2290 gtk_adjustment_set_value(adj, adj->upper - adj->page_size);
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2291 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2292 imhtml->scroll_src = 0;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2293 return FALSE;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2294 }
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2295
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2296 void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml, gboolean smooth)
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2297 {
10798
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2298 if (imhtml->scroll_time)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2299 g_timer_destroy(imhtml->scroll_time);
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2300 if (imhtml->scroll_src)
d1aae5d8adb2 [gaim-migrate @ 12441]
Tim Ringenbach <marv@pidgin.im>
parents: 10797
diff changeset
2301 g_source_remove(imhtml->scroll_src);
12553
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2302 if(smooth) {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2303 imhtml->scroll_time = g_timer_new();
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2304 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
2305 } else {
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2306 imhtml->scroll_time = NULL;
52b3403a1690 [gaim-migrate @ 14871]
Nathan Walp <nwalp@pidgin.im>
parents: 12412
diff changeset
2307 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
2308 }
8729
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2309 }
4a677fc61cd3 [gaim-migrate @ 9484]
Tim Ringenbach <marv@pidgin.im>
parents: 8726
diff changeset
2310
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2311 void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2312 const gchar *text,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2313 GtkIMHtmlOptions options,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2314 GtkTextIter *iter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2315 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2316 GdkRectangle rect;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2317 gint pos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2318 gchar *ws;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2319 gchar *tag;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2320 gchar *bg = NULL;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2321 gint len;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2322 gint tlen, smilelen, wpos=0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2323 gint type;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2324 const gchar *c;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2325 const gchar *amp;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
2326 gint len_protocol;
15379
4be41dcd3794 [gaim-migrate @ 18108]
Sean Egan <seanegan@pidgin.im>
parents: 15331
diff changeset
2327
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2328 guint bold = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2329 italics = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2330 underline = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2331 strike = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2332 sub = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2333 sup = 0,
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
2334 title = 0,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2335 pre = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2336
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2337 gboolean br = FALSE;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2338 gboolean align_right = FALSE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2339 gboolean rtl_direction = FALSE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2340 gint align_line = 0;
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
2341
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2342 GSList *fonts = NULL;
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
2343 GObject *object;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2344 GtkIMHtmlScalable *scalable = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2345
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2346 g_return_if_fail (imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2347 g_return_if_fail (GTK_IS_IMHTML (imhtml));
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2348 g_return_if_fail (text != NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2349 c = text;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2350 len = strlen(text);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2351 ws = g_malloc(len + 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2352 ws[0] = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2353
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2354 while (pos < len) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2355 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2356 c++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2357 pos++;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2358 ws[wpos] = '\0';
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2359 br = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2360 switch (type)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2361 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2362 case 1: /* B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2363 case 2: /* BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2364 case 54: /* STRONG */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2365 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2366 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2367
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2368 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2369 gtk_imhtml_toggle_bold(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2370 bold++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2371 ws[0] = '\0'; wpos = 0;
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 3: /* /B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2375 case 4: /* /BOLD */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2376 case 55: /* /STRONG */
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
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2381 if (bold) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2382 bold--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2383 if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2384 gtk_imhtml_toggle_bold(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2385 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2386 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2387 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2388 case 5: /* I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2389 case 6: /* ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2390 case 52: /* EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2391 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2392 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2393 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2394 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2395 gtk_imhtml_toggle_italic(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2396 italics++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2397 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2398 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2399 case 7: /* /I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2400 case 8: /* /ITALIC */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2401 case 53: /* /EM */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2402 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2403 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2404 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2405 if (italics) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2406 italics--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2407 if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2408 gtk_imhtml_toggle_italic(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2409 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2410 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2411 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2412 case 9: /* U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2413 case 10: /* UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2414 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2415 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2416 ws[0] = '\0'; wpos = 0;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2417 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE))
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2418 gtk_imhtml_toggle_underline(imhtml);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2419 underline++;
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2420 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2421 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2422 case 11: /* /U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2423 case 12: /* /UNDERLINE */
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2424 if (!(options & GTK_IMHTML_NO_FORMATTING)) {
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2425 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2426 ws[0] = '\0'; wpos = 0;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2427 if (underline) {
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2428 underline--;
14010
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2429 if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE) && !imhtml->wbfo)
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2430 gtk_imhtml_toggle_underline(imhtml);
a47143a57c82 [gaim-migrate @ 16489]
Gary Kramlich <grim@reaperworld.com>
parents: 13552
diff changeset
2431 }
11485
fe334b13d1d0 [gaim-migrate @ 13727]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11385
diff changeset
2432 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2433 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2434 case 13: /* S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2435 case 14: /* STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2436 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2437 ws[0] = '\0'; wpos = 0;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2438 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE))
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2439 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2440 strike++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2441 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2442 case 15: /* /S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2443 case 16: /* /STRIKE */
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2444 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2445 ws[0] = '\0'; wpos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2446 if (strike)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2447 strike--;
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2448 if ((strike == 0) && (imhtml->format_functions & GTK_IMHTML_STRIKE) && !imhtml->wbfo)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
2449 gtk_imhtml_toggle_strike(imhtml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2450 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2451 case 17: /* SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2452 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2453 sub++;
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 18: /* /SUB */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2456 /* FIXME: reimpliment this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2457 if (sub)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2458 sub--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2459 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2460 case 19: /* SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2461 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2462 sup++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2463 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2464 case 20: /* /SUP */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2465 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2466 if (sup)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2467 sup--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2468 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2469 case 21: /* PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2470 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2471 pre++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2472 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2473 case 22: /* /PRE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2474 /* FIXME: reimplement this */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2475 if (pre)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2476 pre--;
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 23: /* TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2479 /* FIXME: what was this supposed to do anyway? */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2480 title++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2481 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2482 case 24: /* /TITLE */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2483 /* FIXME: make this undo whatever 23 was supposed to do */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2484 if (title) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2485 if (options & GTK_IMHTML_NO_TITLE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2486 wpos = 0;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2487 ws [wpos] = '\0';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2488 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2489 title--;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2490 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2491 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2492 case 25: /* BR */
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5118
diff changeset
2493 case 58: /* BR/ */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2494 case 61: /* BR (opt) */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2495 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2496 wpos++;
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2497 br = TRUE;
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2498 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2499 case 26: /* HR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2500 case 42: /* HR (opt) */
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2501 {
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2502 int minus;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2503 struct scalable_data *sd = g_new(struct scalable_data, 1);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2504
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2505 ws[wpos++] = '\n';
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2506 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2507
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2508 sd->scalable = scalable = gtk_imhtml_hr_new();
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
2509 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
2510 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
2511 scalable->add_to(scalable, imhtml, iter);
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2512 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2513 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2514 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
2515 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2516 ws[0] = '\0'; wpos = 0;
7942
e6c3c6ab87af [gaim-migrate @ 8613]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7914
diff changeset
2517 ws[wpos++] = '\n';
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2518
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2519 break;
8726
3db8ac8e0ebb [gaim-migrate @ 9481]
Tim Ringenbach <marv@pidgin.im>
parents: 8719
diff changeset
2520 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2521 case 27: /* /FONT */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2522 if (fonts && !imhtml->wbfo) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2523 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2524 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2525 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2526 /* NEW_BIT (NEW_TEXT_BIT); */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2527
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2528 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2529 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2530 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2531 g_free (font->face);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2532 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2533 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2534 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2535 g_free (font->fore);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2536 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2537 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2538 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2539 g_free (font->back);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2540 g_free (font->sml);
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2541
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2542 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
2543 gtk_imhtml_font_set_size(imhtml, 3);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2544
10761
cbfb52c33913 [gaim-migrate @ 12365]
Nathan Walp <nwalp@pidgin.im>
parents: 10732
diff changeset
2545 fonts = g_slist_remove (fonts, font);
9245
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2546 g_free(font);
733eb4d721f7 [gaim-migrate @ 10044]
Tim Ringenbach <marv@pidgin.im>
parents: 9229
diff changeset
2547
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2548 if (fonts) {
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2549 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2550
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2551 if (font->face && (imhtml->format_functions & GTK_IMHTML_FACE))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2552 gtk_imhtml_toggle_fontface(imhtml, font->face);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2553 if (font->fore && (imhtml->format_functions & GTK_IMHTML_FORECOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2554 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2555 if (font->back && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR))
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2556 gtk_imhtml_toggle_backcolor(imhtml, font->back);
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2557 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
2558 gtk_imhtml_font_set_size(imhtml, font->size);
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2559 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2560 }
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2561 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2562 case 28: /* /A */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2563 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2564 gtk_imhtml_toggle_link(imhtml, NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2565 ws[0] = '\0'; wpos = 0;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2566 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2567
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2568 case 29: /* P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2569 case 30: /* /P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2570 case 31: /* H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2571 case 32: /* /H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2572 case 33: /* HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2573 case 34: /* /HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2574 case 35: /* BODY */
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2575 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2576 case 36: /* /BODY */
10786
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2577 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
ccd157c17483 [gaim-migrate @ 12426]
Tim Ringenbach <marv@pidgin.im>
parents: 10782
diff changeset
2578 ws[0] = '\0'; wpos = 0;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2579 gtk_imhtml_toggle_background(imhtml, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2580 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2581 case 37: /* FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2582 case 38: /* HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2583 case 39: /* /HEAD */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2584 case 40: /* BINARY */
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2585 case 41: /* /BINARY */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2586 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2587 case 43: /* FONT (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2588 {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2589 gchar *color, *back, *face, *size, *sml;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2590 GtkIMHtmlFontDetail *font, *oldfont = NULL;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2591 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2592 back = gtk_imhtml_get_html_opt (tag, "BACK=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2593 face = gtk_imhtml_get_html_opt (tag, "FACE=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2594 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2595 sml = gtk_imhtml_get_html_opt (tag, "SML=");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2596 if (!(color || back || face || size || sml))
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2597 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2598
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2599 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2600 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2601
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
2602 font = g_new0 (GtkIMHtmlFontDetail, 1);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2603 if (fonts)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2604 oldfont = fonts->data;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2605
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2606 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
2607 font->fore = color;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2608 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2609 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2610 g_free(color);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2611
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2612 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
2613 font->back = back;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2614 gtk_imhtml_toggle_backcolor(imhtml, font->back);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2615 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2616 g_free(back);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2617
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2618 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
2619 font->face = face;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2620 gtk_imhtml_toggle_fontface(imhtml, font->face);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2621 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2622 g_free(face);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2623
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2624 if (sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2625 font->sml = sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2626 else if (oldfont && oldfont->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2627 font->sml = g_strdup(oldfont->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
2628
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2629 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
2630 if (*size == '+') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2631 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2632 font->size += 3;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2633 } else if (*size == '-') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2634 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2635 font->size = MAX (0, 3 - font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2636 } else if (isdigit (*size)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2637 sscanf (size, "%hd", &font->size);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2638 }
6042
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2639 if (font->size > 100)
e329fe962c9a [gaim-migrate @ 6492]
Mark Doliner <markdoliner@pidgin.im>
parents: 5967
diff changeset
2640 font->size = 100;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2641 } else if (oldfont)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2642 font->size = oldfont->size;
8309
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2643 else
f9db944d6b6c [gaim-migrate @ 9033]
Sean Egan <seanegan@pidgin.im>
parents: 8250
diff changeset
2644 font->size = 3;
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2645 if ((imhtml->format_functions & (GTK_IMHTML_GROW|GTK_IMHTML_SHRINK)))
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
2646 gtk_imhtml_font_set_size(imhtml, font->size);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2647 g_free(size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2648 fonts = g_slist_prepend (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2649 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2650 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2651 case 44: /* BODY (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2652 if (!(options & GTK_IMHTML_NO_COLOURS)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2653 char *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2654 if (bgcolor && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) {
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;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2657 /* NEW_BIT(NEW_TEXT_BIT); */
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2658 g_free(bg);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2659 bg = bgcolor;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
2660 gtk_imhtml_toggle_background(imhtml, bg);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2661 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2662 g_free(bgcolor);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2663 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2664 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2665 case 45: /* A (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2666 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2667 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2668 if (href && (imhtml->format_functions & GTK_IMHTML_LINK)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2669 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2670 ws[0] = '\0'; wpos = 0;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2671 gtk_imhtml_toggle_link(imhtml, href);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2672 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
2673 g_free(href);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2674 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2675 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2676 case 46: /* IMG (opt) */
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6882
diff changeset
2677 case 59: /* IMG */
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2678 {
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2679 const char *id;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2680
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2681 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2682 ws[0] = '\0'; wpos = 0;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2683
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2684 if (!(imhtml->format_functions & GTK_IMHTML_IMAGE))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2685 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2686
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2687 id = gtk_imhtml_get_html_opt(tag, "ID=");
9186
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2688 if (!id)
42a13303a879 [gaim-migrate @ 9981]
Tim Ringenbach <marv@pidgin.im>
parents: 9078
diff changeset
2689 break;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2690 gtk_imhtml_insert_image_at_iter(imhtml, atoi(id), iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
2691 break;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
2692 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2693 case 47: /* P (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2694 case 48: /* H3 (opt) */
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5091
diff changeset
2695 case 49: /* HTML (opt) */
5101
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2696 case 50: /* CITE */
b771f92a4f10 [gaim-migrate @ 5464]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2697 case 51: /* /CITE */
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2698 case 56: /* SPAN (opt) */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2699 /* Inline CSS Support - Douglas Thrift
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2700 *
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2701 * color
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2702 * background
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2703 * font-family
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2704 * font-size
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2705 * text-decoration: underline
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2706 * font-weight: bold
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2707 * direction: rtl
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2708 * text-align: right
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2709 *
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2710 * TODO:
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2711 * background-color
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10457
diff changeset
2712 * font-style
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2713 */
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2714 {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2715 gchar *style, *color, *background, *family, *size, *direction, *alignment;
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2716 gchar *textdec, *weight;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2717 GtkIMHtmlFontDetail *font, *oldfont = NULL;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2718 style = gtk_imhtml_get_html_opt (tag, "style=");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2719
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2720 if (!style) break;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2721
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2722 color = purple_markup_get_css_property (style, "color");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2723 background = purple_markup_get_css_property (style, "background");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2724 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
2725 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
2726 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
2727 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
2728 direction = purple_markup_get_css_property (style, "direction");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2729 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
2730
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2731
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2732 if (!(color || family || size || background || textdec || weight || direction || alignment)) {
8120
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2733 g_free(style);
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2734 break;
d26183feb7e4 [gaim-migrate @ 8824]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
2735 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2736
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2737
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2738 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2739 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2740 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2741
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2742 /* Bi-Directional text support */
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 18543
diff changeset
2743 if (direction && (!g_ascii_strncasecmp(direction, "RTL", 3))) {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2744 rtl_direction = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2745 /* insert RLE character to set direction */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2746 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2747 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2748 ws[wpos++] = 0xAB;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2749 ws[wpos] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2750 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
2751 ws[0] = '\0'; wpos = 0;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2752 }
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2753 g_free(direction);
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2754
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 18543
diff changeset
2755 if (alignment && (!g_ascii_strncasecmp(alignment, "RIGHT", 5))) {
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2756 align_right = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2757 align_line = gtk_text_iter_get_line(iter);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2758 }
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2759 g_free(alignment);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
2760
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2761 font = g_new0 (GtkIMHtmlFontDetail, 1);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2762 if (fonts)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2763 oldfont = fonts->data;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2764
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2765 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
2766 font->fore = color;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2767 gtk_imhtml_toggle_forecolor(imhtml, font->fore);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2768 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2769 if (oldfont && oldfont->fore)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2770 font->fore = g_strdup(oldfont->fore);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2771 g_free(color);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2772 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2773
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2774 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
2775 font->back = background;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2776 gtk_imhtml_toggle_backcolor(imhtml, font->back);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2777 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2778 if (oldfont && oldfont->back)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2779 font->back = g_strdup(oldfont->back);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2780 g_free(background);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2781 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2782
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2783 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
2784 font->face = family;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2785 gtk_imhtml_toggle_fontface(imhtml, font->face);
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2786 } else {
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2787 if (oldfont && oldfont->face)
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2788 font->face = g_strdup(oldfont->face);
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2789 g_free(family);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2790 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2791 if (font->face && (atoi(font->face) > 100)) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2792 /* WTF is this? */
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
2793 /* 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
2794 * remember bad things happening if the font size was
9696
9d62e1ec5977 [gaim-migrate @ 10555]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9636
diff changeset
2795 * 2 billion */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2796 g_free(font->face);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2797 font->face = g_strdup("100");
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2798 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2799
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2800 if (oldfont && oldfont->sml)
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2801 font->sml = g_strdup(oldfont->sml);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2802
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2803 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
2804 if (g_ascii_strcasecmp(size, "xx-small") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2805 font->size = 1;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2806 else if (g_ascii_strcasecmp(size, "smaller") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2807 || g_ascii_strcasecmp(size, "x-small") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2808 font->size = 2;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2809 else if (g_ascii_strcasecmp(size, "larger") == 0
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2810 || g_ascii_strcasecmp(size, "medium") == 0)
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2811 font->size = 4;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2812 else if (g_ascii_strcasecmp(size, "large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2813 font->size = 5;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2814 else if (g_ascii_strcasecmp(size, "x-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2815 font->size = 6;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2816 else if (g_ascii_strcasecmp(size, "xx-large") == 0)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2817 font->size = 7;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2818 else
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2819 font->size = 3;
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2820 gtk_imhtml_font_set_size(imhtml, font->size);
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 else if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2823 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2824 font->size = oldfont->size;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2825 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2826
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2827 if (oldfont)
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2828 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2829 font->underline = oldfont->underline;
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2830 }
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2831 if (textdec && font->underline != 1
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
2832 && 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
2833 && (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
2834 && !(options & GTK_IMHTML_NO_FORMATTING))
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2835 {
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2836 gtk_imhtml_toggle_underline(imhtml);
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2837 font->underline = 1;
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2838 } else
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2839 g_free(textdec);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2840
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2841 if (oldfont)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2842 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2843 font->bold = oldfont->bold;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2844 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2845 if (weight)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2846 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2847 if(!g_ascii_strcasecmp(weight, "normal")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2848 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2849 } else if(!g_ascii_strcasecmp(weight, "bold")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2850 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2851 } else if(!g_ascii_strcasecmp(weight, "bolder")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2852 font->bold++;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2853 } else if(!g_ascii_strcasecmp(weight, "lighter")) {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2854 if(font->bold > 0)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2855 font->bold--;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2856 } else {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2857 int num = atoi(weight);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2858 if(num >= 700)
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2859 font->bold = 1;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2860 else
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2861 font->bold = 0;
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2862 }
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2863 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
2864 {
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2865 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2866 }
14821
c91127e2b784 [gaim-migrate @ 17516]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14741
diff changeset
2867 g_free(weight);
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2868 }
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2869
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2870 g_free(style);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2871 g_free(size);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2872 fonts = g_slist_prepend (fonts, font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2873 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2874 break;
5104
2a09bf67e875 [gaim-migrate @ 5467]
Nathan Walp <nwalp@pidgin.im>
parents: 5101
diff changeset
2875 case 57: /* /SPAN */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2876 /* Inline CSS Support - Douglas Thrift */
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2877 if (fonts && !imhtml->wbfo) {
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2878 GtkIMHtmlFontDetail *oldfont = NULL;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2879 GtkIMHtmlFontDetail *font = fonts->data;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2880 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2881 ws[0] = '\0'; wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2882 /* NEW_BIT (NEW_TEXT_BIT); */
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2883 fonts = g_slist_remove (fonts, font);
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2884 if (fonts)
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2885 oldfont = fonts->data;
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2886
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2887 if (!oldfont) {
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2888 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
2889 if (font->underline && !(options & GTK_IMHTML_NO_FORMATTING))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2890 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
2891 if (font->bold && !(options & GTK_IMHTML_NO_FORMATTING))
14395
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2892 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
2893 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
2894 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
2895 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
2896 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
2897 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
2898 gtk_imhtml_toggle_backcolor(imhtml, NULL);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2899 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2900 else
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2901 {
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2902
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2903 if ((font->size != oldfont->size) && !(options & GTK_IMHTML_NO_SIZES))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2904 gtk_imhtml_font_set_size(imhtml, oldfont->size);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2905
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2906 if ((font->underline != oldfont->underline) && !(options & GTK_IMHTML_NO_FORMATTING))
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2907 gtk_imhtml_toggle_underline(imhtml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2908
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2909 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
2910 gtk_imhtml_toggle_bold(imhtml);
cf8c889161ff [gaim-migrate @ 17029]
Nathan Walp <nwalp@pidgin.im>
parents: 14253
diff changeset
2911
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2912 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
2913 gtk_imhtml_toggle_fontface(imhtml, oldfont->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2914
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2915 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
2916 gtk_imhtml_toggle_forecolor(imhtml, oldfont->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2917
17088
1ecea6e2fd97 Ignore bold, underline and other formatting type things in SPAN tags if
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17009
diff changeset
2918 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
2919 gtk_imhtml_toggle_backcolor(imhtml, oldfont->back);
8686
87eb1cde44c9 [gaim-migrate @ 9439]
Kevin Stange <kstange@pidgin.im>
parents: 8681
diff changeset
2920 }
8692
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2921
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2922 g_free (font->face);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2923 g_free (font->fore);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2924 g_free (font->back);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2925 g_free (font->sml);
d93813239791 [gaim-migrate @ 9445]
Kevin Stange <kstange@pidgin.im>
parents: 8686
diff changeset
2926
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2927 g_free (font);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2928 }
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8105
diff changeset
2929 break;
8026
91fe30ffb897 [gaim-migrate @ 8706]
Nathan Walp <nwalp@pidgin.im>
parents: 7991
diff changeset
2930 case 60: /* SPAN */
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2931 break;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2932 case 62: /* comment */
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2933 /* NEW_BIT (NEW_TEXT_BIT); */
8317
fd4cf67705df [gaim-migrate @ 9041]
Sean Egan <seanegan@pidgin.im>
parents: 8309
diff changeset
2934 ws[wpos] = '\0';
9465
652dcd45db7d [gaim-migrate @ 10290]
Tim Ringenbach <marv@pidgin.im>
parents: 9337
diff changeset
2935
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2936 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2937
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2938 if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS)) {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
2939 wpos = g_snprintf (ws, len, "%s", tag);
10815
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2940 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2941 }
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2942 ws[0] = '\0'; wpos = 0;
b1ca28de65d3 [gaim-migrate @ 12470]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10814
diff changeset
2943
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2944 /* NEW_BIT (NEW_COMMENT_BIT); */
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2945 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2946 default:
6882
b6d0ac441869 [gaim-migrate @ 7428]
Tim Ringenbach <marv@pidgin.im>
parents: 6839
diff changeset
2947 break;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2948 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2949 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2950 pos += tlen;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
2951 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
2952 } else if (imhtml->edit.link == NULL &&
a8ef18791524 [gaim-migrate @ 18059]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15111
diff changeset
2953 gtk_imhtml_is_smiley(imhtml, fonts, c, &smilelen)) {
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2954 GtkIMHtmlFontDetail *fd;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2955
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2956 gchar *sml = NULL;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2957 if (fonts) {
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2958 fd = fonts->data;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2959 sml = fd->sml;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2960 }
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2961 if (!sml)
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2962 sml = imhtml->protocol_name;
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
2963
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2964 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2965 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2966
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2967 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, ws, iter);
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2968
8505
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2969 c += smilelen;
780845b42f5c [gaim-migrate @ 9241]
Kevin Stange <kstange@pidgin.im>
parents: 8498
diff changeset
2970 pos += smilelen;
8473
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2971 wpos = 0;
8acf91aaffac [gaim-migrate @ 9206]
Kevin Stange <kstange@pidgin.im>
parents: 8466
diff changeset
2972 ws[0] = 0;
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
2973 } else if (*c == '&' && (amp = purple_markup_unescape_entity(c, &tlen))) {
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2974 while(*amp) {
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2975 ws [wpos++] = *amp++;
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7140
diff changeset
2976 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2977 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
2978 pos += tlen;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2979 } else if (*c == '\n') {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2980 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2981 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
2982 wpos++;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
2983 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2984 ws[0] = '\0';
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
2985 wpos = 0;
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
2986 /* NEW_BIT (NEW_TEXT_BIT); */
10217
0ba0263c657f [gaim-migrate @ 11345]
Daniel Westermann-Clark
parents: 10184
diff changeset
2987 } 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
2988 /* 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
2989 * 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
2990 * 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
2991 * 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
2992 * Bu-wahaha! */
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2993 ws[wpos] = ' ';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2994 wpos++;
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2995 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2996 ws[0] = '\0';
9c25e270b20b [gaim-migrate @ 10465]
Sean Egan <seanegan@pidgin.im>
parents: 9612
diff changeset
2997 wpos = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2998 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2999 c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3000 pos++;
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3001 } else if ((len_protocol = gtk_imhtml_is_protocol(c)) > 0){
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3002 while(len_protocol--){
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3003 /* Skip the next len_protocol characters, but make sure they're
8334
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3004 copied into the ws array.
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3005 */
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3006 ws [wpos++] = *c++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3007 pos++;
63e80b767766 [gaim-migrate @ 9058]
Nathan Owens
parents: 8317
diff changeset
3008 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3009 } else if (*c) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3010 ws [wpos++] = *c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3011 pos++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3012 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
3013 break;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3014 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3015 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3016 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3017 ws[0] = '\0'; wpos = 0;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3018
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
3019 /* NEW_BIT(NEW_TEXT_BIT); */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3020
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3021 if(align_right) {
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3022 /* 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
3023 GtkTextIter line_iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3024 line_iter = *iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3025 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
3026 /* insert RLM character to set alignment */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3027 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3028 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3029 ws[wpos++] = 0x8F;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3030
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
3031 if (!rtl_direction)
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3032 {
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3033 /* insert LRM character to set direction */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3034 /* (alignment=right and direction=LTR) */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3035 ws[wpos++] = 0xE2;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3036 ws[wpos++] = 0x80;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3037 ws[wpos++] = 0x8E;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3038 }
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3039
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3040 ws[wpos] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3041 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
3042 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
3043 ws[0] = '\0';
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3044 wpos = 0;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3045 }
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
3046
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3047 while (fonts) {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3048 GtkIMHtmlFontDetail *font = fonts->data;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3049 fonts = g_slist_remove (fonts, font);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3050 g_free (font->face);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3051 g_free (font->fore);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3052 g_free (font->back);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3053 g_free (font->sml);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3054 g_free (font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
3055 }
8932
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3056
4b122cbfa7df [gaim-migrate @ 9702]
Tim Ringenbach <marv@pidgin.im>
parents: 8931
diff changeset
3057 g_free(ws);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
3058 g_free(bg);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3059
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3060 if (!imhtml->wbfo)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3061 gtk_imhtml_close_tags(imhtml, iter);
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3062
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15391
diff changeset
3063 object = g_object_ref(G_OBJECT(imhtml));
8506
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3064 g_signal_emit(object, signals[UPDATE_FORMAT], 0);
76ce3a78b130 [gaim-migrate @ 9242]
Gary Kramlich <grim@pidgin.im>
parents: 8505
diff changeset
3065 g_object_unref(object);
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
3066
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3067 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3068
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3069 void gtk_imhtml_remove_smileys(GtkIMHtml *imhtml)
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3070 {
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3071 g_hash_table_destroy(imhtml->smiley_data);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3072 gtk_smiley_tree_destroy(imhtml->default_smilies);
4892
37b4a5ac5ebe [gaim-migrate @ 5222]
Nathan Walp <nwalp@pidgin.im>
parents: 4793
diff changeset
3073 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
3074 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3075 imhtml->default_smilies = gtk_smiley_tree_new();
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
3076 }
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
3077
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
3078 void gtk_imhtml_show_comments (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3079 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3080 {
6124
322206d79652 [gaim-migrate @ 6598]
Mark Doliner <markdoliner@pidgin.im>
parents: 6066
diff changeset
3081 imhtml->show_comments = show;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
3082 }
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3083
11814
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3084 const char *
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3085 gtk_imhtml_get_protocol_name(GtkIMHtml *imhtml) {
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3086 return imhtml->protocol_name;
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3087 }
5003711283c0 [gaim-migrate @ 14105]
Richard Laager <rlaager@pidgin.im>
parents: 11768
diff changeset
3088
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3089 void
9029
4670ebf1c180 [gaim-migrate @ 9805]
Tim Ringenbach <marv@pidgin.im>
parents: 9028
diff changeset
3090 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
3091 g_free(imhtml->protocol_name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3092 imhtml->protocol_name = g_strdup(protocol_name);
8456
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3093 }
63fcac86a8fd [gaim-migrate @ 9186]
Gary Kramlich <grim@pidgin.im>
parents: 8439
diff changeset
3094
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3095 void
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3096 gtk_imhtml_delete(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3097 GList *l;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3098 GSList *sl;
11234
e23fd86e7581 [gaim-migrate @ 13377]
Daniel Atallah <datallah@pidgin.im>
parents: 11233
diff changeset
3099 GtkTextIter i, i_s, i_e;
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3100 GObject *object = g_object_ref(G_OBJECT(imhtml));
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3101
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3102 if (start == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3103 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &i_s);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3104 start = &i_s;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3105 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3106
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3107 if (end == NULL) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3108 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &i_e);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3109 end = &i_e;
7991
845539e84417 [gaim-migrate @ 8668]
Ka-Hing Cheung <khc@pidgin.im>
parents: 7988
diff changeset
3110 }
11224
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 l = imhtml->scalables;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3113 while (l) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3114 GList *next = l->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3115 struct scalable_data *sd = l->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, sd->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3118 if (gtk_text_iter_in_range(&i, start, end)) {
21063
911e85f207c7 Fix some leaks caused by misuse of g_list_remove_link() instead of g_list_delete_link().
Daniel Atallah <datallah@pidgin.im>
parents: 20638
diff changeset
3119 GtkIMHtmlScalable *scale = GTK_IMHTML_SCALABLE(sd->scalable);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3120 scale->free(scale);
21063
911e85f207c7 Fix some leaks caused by misuse of g_list_remove_link() instead of g_list_delete_link().
Daniel Atallah <datallah@pidgin.im>
parents: 20638
diff changeset
3121 g_free(sd);
911e85f207c7 Fix some leaks caused by misuse of g_list_remove_link() instead of g_list_delete_link().
Daniel Atallah <datallah@pidgin.im>
parents: 20638
diff changeset
3122 imhtml->scalables = g_list_delete_link(imhtml->scalables, l);
11224
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 l = 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
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3127 sl = imhtml->im_images;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3128 while (sl) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3129 GSList *next = sl->next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3130 struct im_image_data *img_data = sl->data;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3131 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer,
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3132 &i, img_data->mark);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3133 if (gtk_text_iter_in_range(&i, start, end)) {
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3134 if (imhtml->funcs->image_unref)
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3135 imhtml->funcs->image_unref(img_data->id);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3136 imhtml->im_images = g_slist_delete_link(imhtml->im_images, sl);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3137 g_free(img_data);
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3138 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3139 sl = next;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3140 }
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
3141 gtk_text_buffer_delete(imhtml->text_buffer, start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3142
8427
b99f5085af0a [gaim-migrate @ 9157]
Sean Egan <seanegan@pidgin.im>
parents: 8420
diff changeset
3143 g_object_unref(object);
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
3144 }
2363
0767c14d7879 [gaim-migrate @ 2376]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2349
diff changeset
3145
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3146 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3147 {
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3148 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3149 GtkTextIter iter;
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3150
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3151 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
3152 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
3153 rect.y - rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3154 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
3155
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
3156 }
5282
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3157 void gtk_imhtml_page_down (GtkIMHtml *imhtml)
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3158 {
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3159 GdkRectangle rect;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3160 GtkTextIter iter;
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3161
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3162 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
3163 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
3164 rect.y + rect.height);
bd9ed6f2175c [gaim-migrate @ 5654]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5177
diff changeset
3165 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
3166 }
4735
ac5f2489f6ee [gaim-migrate @ 5050]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4635
diff changeset
3167
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3168 /* GtkIMHtmlScalable, gtk_imhtml_image, gtk_imhtml_hr */
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3169 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
3170 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3171 GtkIMHtmlImage *im_image = g_malloc(sizeof(GtkIMHtmlImage));
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3172
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3173 GTK_IMHTML_SCALABLE(im_image)->scale = gtk_imhtml_image_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3174 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
3175 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
3176
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3177 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
3178 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
3179 im_image->width = gdk_pixbuf_get_width(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3180 im_image->height = gdk_pixbuf_get_height(img);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3181 im_image->mark = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3182 im_image->filename = g_strdup(filename);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3183 im_image->id = id;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3184 im_image->filesel = NULL;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3185
5046
ba5af38017fa [gaim-migrate @ 5394]
Ka-Hing Cheung <khc@pidgin.im>
parents: 5020
diff changeset
3186 g_object_ref(img);
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3187 return GTK_IMHTML_SCALABLE(im_image);
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3188 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3189
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3190 static gboolean
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3191 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
3192 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3193 GtkIMHtmlImage *im_image;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3194 int width, height;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3195 int delay;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3196
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3197 im_image = data;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3198
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3199 /* Update the pointer to this GdkPixbuf frame of the animation */
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3200 if (gdk_pixbuf_animation_iter_advance(GTK_IMHTML_ANIMATION(im_image)->iter, NULL)) {
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3201 GdkPixbuf *pb = gdk_pixbuf_animation_iter_get_pixbuf(GTK_IMHTML_ANIMATION(im_image)->iter);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3202 g_object_unref(G_OBJECT(im_image->pixbuf));
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3203 im_image->pixbuf = gdk_pixbuf_copy(pb);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3204
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3205 /* Update the displayed GtkImage */
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3206 width = gdk_pixbuf_get_width(gtk_image_get_pixbuf(im_image->image));
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3207 height = gdk_pixbuf_get_height(gtk_image_get_pixbuf(im_image->image));
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3208 if (width > 0 && height > 0)
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3209 {
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3210 /* Need to scale the new frame to the same size as the old frame */
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3211 GdkPixbuf *tmp;
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3212 tmp = gdk_pixbuf_scale_simple(im_image->pixbuf, width, height, GDK_INTERP_BILINEAR);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3213 gtk_image_set_from_pixbuf(im_image->image, tmp);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3214 g_object_unref(G_OBJECT(tmp));
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3215 } else {
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3216 /* Display at full-size */
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3217 gtk_image_set_from_pixbuf(im_image->image, im_image->pixbuf);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3218 }
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3219 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3220
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3221 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
3222 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
3223
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3224 return FALSE;
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3225 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3226
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3227 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
3228 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3229 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
3230
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3231 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
3232 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
3233 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
3234
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3235 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
3236 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
3237 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
3238 im_image->pixbuf = gdk_pixbuf_animation_get_static_image(anim);
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3239 g_object_ref(im_image->pixbuf);
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3240 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
3241 } else {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3242 int delay;
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3243 GdkPixbuf *pb;
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3244 GTK_IMHTML_ANIMATION(im_image)->iter = gdk_pixbuf_animation_get_iter(anim, NULL);
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3245 pb = gdk_pixbuf_animation_iter_get_pixbuf(GTK_IMHTML_ANIMATION(im_image)->iter);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
3246 im_image->pixbuf = gdk_pixbuf_copy(pb);
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3247 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
3248 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
3249 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3250 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
3251 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
3252 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
3253 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
3254 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
3255 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
3256 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
3257
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3258 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
3259
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3260 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
3261 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3262
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3263 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
3264 {
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3265 GtkIMHtmlImage *im_image = (GtkIMHtmlImage *)scale;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3266
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3267 if (im_image->width > width || im_image->height > height) {
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3268 double ratio_w, ratio_h, ratio;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3269 int new_h, new_w;
4895
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3270 GdkPixbuf *new_image = NULL;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3271
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3272 ratio_w = ((double)width - 2) / im_image->width;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3273 ratio_h = ((double)height - 2) / im_image->height;
11840
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3274
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3275 ratio = (ratio_w < ratio_h) ? ratio_w : ratio_h;
c9ec5a42d420 [gaim-migrate @ 14131]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11820
diff changeset
3276
11867
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3277 new_w = (int)(im_image->width * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3278 new_h = (int)(im_image->height * ratio);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3279
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3280 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
3281 gtk_image_set_from_pixbuf(im_image->image, new_image);
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3282 g_object_unref(G_OBJECT(new_image));
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3283 } 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
3284 /* Enough space to show the full-size of the image. */
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3285 GdkPixbuf *new_image;
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3286
de448bc5da1a [gaim-migrate @ 14158]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11844
diff changeset
3287 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
3288 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
3289 g_object_unref(G_OBJECT(new_image));
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3290 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3291 }
51794f61995e [gaim-migrate @ 5227]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4892
diff changeset
3292
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3293 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3294 image_save_yes_cb(GtkIMHtmlImage *image, const char *filename)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3295 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3296 gchar *type = NULL;
5019
ac3e5e1f588a [gaim-migrate @ 5355]
Luke Schierer <lschiere@pidgin.im>
parents: 5015
diff changeset
3297 GError *error = NULL;
5015
3a8f6559f866 [gaim-migrate @ 5351]
Nathan Walp <nwalp@pidgin.im>
parents: 5012
diff changeset
3298 #if GTK_CHECK_VERSION(2,2,0)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3299 GSList *formats = gdk_pixbuf_get_formats();
6162
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3300 #else
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3301 char *basename = g_path_get_basename(filename);
aed29c41bdfa [gaim-migrate @ 6642]
Mark Doliner <markdoliner@pidgin.im>
parents: 6124
diff changeset
3302 char *ext = strrchr(basename, '.');
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3303 #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
3304 char *newfilename;
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3305
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3306 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3307 image->filesel = NULL;
5959
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3308
827dbe4b5bb2 [gaim-migrate @ 6405]
Mark Doliner <markdoliner@pidgin.im>
parents: 5582
diff changeset
3309 #if GTK_CHECK_VERSION(2,2,0)
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3310 while (formats) {
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3311 GdkPixbufFormat *format = formats->data;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3312 gchar **extensions = gdk_pixbuf_format_get_extensions(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3313 gpointer p = extensions;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3314
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3315 while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3316 gchar *fmt_ext = extensions[0];
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3317 const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3318
17695
5e7fcc2f23cc Compare the user-entered file extension to the GDK file extension
Mark Doliner <markdoliner@pidgin.im>
parents: 17694
diff changeset
3319 if(!g_ascii_strcasecmp(fmt_ext, file_ext)){
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3320 type = gdk_pixbuf_format_get_name(format);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3321 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3322 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3323
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3324 extensions++;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3325 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3326
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3327 g_strfreev(p);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3328
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3329 if (type)
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3330 break;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3331
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3332 formats = formats->next;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3333 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3334
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3335 g_slist_free(formats);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3336 #else
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3337 /* 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
3338 if (ext) {
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3339 ext++;
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3340 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
3341 type = g_strdup("jpeg");
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3342 else if (!g_ascii_strcasecmp(ext, "png"))
5020
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3343 type = g_strdup("png");
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3344 }
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3345
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3346 g_free(basename);
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3347 #endif
2c5a2fbb55b5 [gaim-migrate @ 5356]
Nathan Walp <nwalp@pidgin.im>
parents: 5019
diff changeset
3348
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3349 /* 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
3350 it's a png */
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3351 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
3352 char *basename, *tmp;
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3353 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3354 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
3355 _("<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
3356 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3357 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
3358 _("Unrecognized file type\n\nDefaulting to PNG."));
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3359 #endif
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3360
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3361 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
3362 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
3363
9717
3c8f42ca313e [gaim-migrate @ 10578]
Mark Doliner <markdoliner@pidgin.im>
parents: 9709
diff changeset
3364 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
3365 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
3366 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
3367 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
3368 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
3369 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
3370 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
3371 } 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
3372 /*
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
3373 * 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
3374 * 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
3375 */
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
3376 newfilename = g_strdup(filename);
5012
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
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
3379 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
3380
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
3381 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
3382 g_free(type);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3383
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3384 if (error){
11069
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3385 #if GTK_CHECK_VERSION(2,4,0)
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3386 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
3387 _("<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
3388 #else
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3389 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
3390 _("Error saving image\n\n%s"), error->message);
3cc1cdd931e9 [gaim-migrate @ 13065]
Richard Laager <rlaager@pidgin.im>
parents: 11019
diff changeset
3391 #endif
11019
6786068b00ab [gaim-migrate @ 12890]
Richard Laager <rlaager@pidgin.im>
parents: 11006
diff changeset
3392 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
3393 gtk_widget_show(dialog);
5012
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3394 g_error_free(error);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3395 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3396 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3397
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3398 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3399 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3400 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
3401 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3402 gchar *filename;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3403
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3404 if (response != GTK_RESPONSE_ACCEPT) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3405 gtk_widget_destroy(widget);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3406 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3407 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3408 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3409
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3410 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3411 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3412 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3413 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
3414 {
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3415 gchar *filename;
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 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
3418
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3419 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3420 gchar *dirname;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3421 /* append a / is needed */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3422 if (filename[strlen(filename) - 1] != G_DIR_SEPARATOR) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3423 dirname = g_strconcat(filename, G_DIR_SEPARATOR_S, NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3424 } else {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3425 dirname = g_strdup(filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3426 }
9574
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3427 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
3428 g_free(dirname);
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 return;
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 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3433
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3434 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3435 * 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
3436 * 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
3437 * 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
3438 */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3439 /*
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3440 if (g_file_test(filename, G_FILE_TEST_EXISTS)) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3441 } else
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3442 image_save_yes_cb(image, filename);
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
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3445 image_save_yes_cb(image, filename);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3446
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3447 g_free(filename);
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
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3450 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3451 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3452 image_save_cancel_cb(GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3453 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3454 gtk_widget_destroy(image->filesel);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3455 image->filesel = NULL;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3456 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3457 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3458
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3459 static void
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3460 gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImage *image)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3461 {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3462 if (image->filesel != NULL) {
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3463 gtk_window_present(GTK_WINDOW(image->filesel));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3464 return;
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3465 }
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3466
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3467 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3468 image->filesel = gtk_file_chooser_dialog_new(_("Save Image"),
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3469 NULL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3470 GTK_FILE_CHOOSER_ACTION_SAVE,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3471 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3472 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3473 NULL);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3474 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
3475 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3476 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
3477 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(image->filesel)), "response",
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3478 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3479 #else /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3480 image->filesel = gtk_file_selection_new(_("Save Image"));
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3481 if (image->filename != NULL)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3482 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
3483 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
3484 G_CALLBACK(image_save_cancel_cb), image);
d5a2c770adcd [gaim-migrate @ 10417]
Mark Doliner <markdoliner@pidgin.im>
parents: 9573
diff changeset
3485 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
3486 "clicked", G_CALLBACK(image_save_cancel_cb), image);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3487 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
3488 G_CALLBACK(image_save_check_if_exists_cb), image);
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3489 #endif /* FILECHOOSER */
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3490
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3491 gtk_widget_show(image->filesel);
5012
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
9815
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3494 /*
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3495 * 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
3496 * 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
3497 * 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
3498 * 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
3499 * all of that.
fcbbbce0e1ff [gaim-migrate @ 10686]
Mark Doliner <markdoliner@pidgin.im>
parents: 9726
diff changeset
3500 */
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3501 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
3502 {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3503 GdkEventButton *event_button = (GdkEventButton *) event;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3504
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3505 if (event->type == GDK_BUTTON_RELEASE) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3506 if(event_button->button == 3) {
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3507 GtkWidget *img, *item, *menu;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3508 gchar *text = g_strdup_printf(_("_Save Image..."));
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3509 menu = gtk_menu_new();
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3510
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3511 /* buttons and such */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3512 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
3513 item = gtk_image_menu_item_new_with_mnemonic(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3514 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
3515 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
3516 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3517
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3518 gtk_widget_show_all(menu);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3519 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3520 event_button->button, event_button->time);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3521
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3522 g_free(text);
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3523 return TRUE;
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3524 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3525 }
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3526 if(event->type == GDK_BUTTON_PRESS && event_button->button == 3)
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3527 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
3528 be caught by the regular GtkTextView menu */
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3529 else
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3530 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
3531
a6e5bbd44d89 [gaim-migrate @ 5348]
Ka-Hing Cheung <khc@pidgin.im>
parents: 4997
diff changeset
3532 }
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
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 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
3535 {
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
3536 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
3537 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
3538 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
3539
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
3540 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
3541 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
3542
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
3543 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
3544 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
3545 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
3546
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3547 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
3548 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
3549 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
3550 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
3551 }
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
3552
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3553 void gtk_imhtml_image_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3554 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3555 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3556
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3557 g_object_unref(image->pixbuf);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3558 g_free(image->filename);
9573
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3559 if (image->filesel)
7fb26654aee8 [gaim-migrate @ 10416]
Mark Doliner <markdoliner@pidgin.im>
parents: 9467
diff changeset
3560 gtk_widget_destroy(image->filesel);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3561 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3562 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3563
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3564 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
3565 {
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3566 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
3567
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3568 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
3569 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
3570 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
3571 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
3572 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
3573
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3574 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
3575 }
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
3576
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3577 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
3578 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3579 GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3580 GtkWidget *box = gtk_event_box_new();
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3581 char *tag;
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3582 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
3583
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3584 gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(image->image));
9229
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3585
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3586 if(!gtk_check_version(2, 4, 0))
fba36c506c60 [gaim-migrate @ 10025]
Tim Ringenbach <marv@pidgin.im>
parents: 9186
diff changeset
3587 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL);
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3588
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3589 gtk_widget_show(GTK_WIDGET(image->image));
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3590 gtk_widget_show(box);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3591
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3592 tag = g_strdup_printf("<IMG ID=\"%d\">", image->id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3593 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
3594 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "[Image]");
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
3595
15420
2dfadb432902 [gaim-migrate @ 18151]
Sean Egan <seanegan@pidgin.im>
parents: 15411
diff changeset
3596 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
3597 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
3598 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3599
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3600 GtkIMHtmlScalable *gtk_imhtml_hr_new()
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 GtkIMHtmlHr *hr = g_malloc(sizeof(GtkIMHtmlHr));
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 GTK_IMHTML_SCALABLE(hr)->scale = gtk_imhtml_hr_scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3605 GTK_IMHTML_SCALABLE(hr)->add_to = gtk_imhtml_hr_add_to;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3606 GTK_IMHTML_SCALABLE(hr)->free = gtk_imhtml_hr_free;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3607
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3608 hr->sep = gtk_hseparator_new();
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3609 gtk_widget_set_size_request(hr->sep, 5000, 2);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3610 gtk_widget_show(hr->sep);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3611
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3612 return GTK_IMHTML_SCALABLE(hr);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3613 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3614
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3615 void gtk_imhtml_hr_scale(GtkIMHtmlScalable *scale, int width, int height)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3616 {
8588
6bcf7ed80ed8 [gaim-migrate @ 9339]
Mark Doliner <markdoliner@pidgin.im>
parents: 8568
diff changeset
3617 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
3618 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3619
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3620 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
3621 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3622 GtkIMHtmlHr *hr = (GtkIMHtmlHr *)scale;
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3623 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
3624 g_object_set_data(G_OBJECT(anchor), "gtkimhtml_htmltext", "<hr>");
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
3625 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
3626 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
3627 }
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3628
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3629 void gtk_imhtml_hr_free(GtkIMHtmlScalable *scale)
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3630 {
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3631 g_free(scale);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
3632 }
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3633
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3634 gboolean gtk_imhtml_search_find(GtkIMHtml *imhtml, const gchar *text)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3635 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3636 GtkTextIter iter, start, end;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3637 gboolean new_search = TRUE;
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3638 GtkTextMark *start_mark;
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3639
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3640 g_return_val_if_fail(imhtml != NULL, FALSE);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3641 g_return_val_if_fail(text != NULL, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3642
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3643 start_mark = gtk_text_buffer_get_mark(imhtml->text_buffer, "search");
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3644
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3645 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
3646 new_search = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3647
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3648 if (new_search) {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3649 gtk_imhtml_search_clear(imhtml);
14863
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3650 g_free(imhtml->search_string);
82888d51234c [gaim-migrate @ 17566]
Daniel Atallah <datallah@pidgin.im>
parents: 14821
diff changeset
3651 imhtml->search_string = g_strdup(text);
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3652 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3653 } else {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3654 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
3655 start_mark);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3656 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3657
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3658 if (gtk_source_iter_backward_search(&iter, imhtml->search_string,
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3659 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3660 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3661 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3662 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
3663 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
3664 if (new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3665 {
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3666 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
3667 do
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3668 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
3669 while (gtk_source_iter_backward_search(&start, imhtml->search_string,
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3670 GTK_SOURCE_SEARCH_VISIBLE_ONLY |
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents: 7354
diff changeset
3671 GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3672 &start, &end, NULL));
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3673 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3674 return TRUE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3675 }
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3676 else if (!new_search)
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3677 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3678 /* We hit the end, so start at the beginning again. */
15093
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3679 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3680
5501dd769dc5 [gaim-migrate @ 17814]
Sean Egan <seanegan@pidgin.im>
parents: 14970
diff changeset
3681 if (gtk_source_iter_backward_search(&iter, imhtml->search_string,
14400
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3682 GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE,
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3683 &start, &end, NULL))
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3684 {
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3685 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
3686 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
3687
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3688 return TRUE;
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3689 }
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3690
953baf2eba1a [gaim-migrate @ 17035]
Richard Laager <rlaager@pidgin.im>
parents: 14395
diff changeset
3691 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3692
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3693 return FALSE;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3694 }
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3695
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3696 void gtk_imhtml_search_clear(GtkIMHtml *imhtml)
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3697 {
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3698 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3699
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3700 g_return_if_fail(imhtml != NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3701
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3702 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3703 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3704
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3705 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
3706 g_free(imhtml->search_string);
7295
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3707 imhtml->search_string = NULL;
4b40d35a6b25 [gaim-migrate @ 7879]
Sean Egan <seanegan@pidgin.im>
parents: 7287
diff changeset
3708 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3709
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3710 static GtkTextTag *find_font_forecolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3711 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3712 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3713 GtkTextTag *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 g_snprintf(str, sizeof(str), "FORECOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3716
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3717 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
3718 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3719 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3720 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3721 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3722 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3723 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3724 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3725 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3726 gdk_color_parse("black", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3727 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3728 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
3729 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3730
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3731 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3732 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3733
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3734 static GtkTextTag *find_font_backcolor_tag(GtkIMHtml *imhtml, gchar *color)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3735 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3736 gchar str[18];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3737 GtkTextTag *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 g_snprintf(str, sizeof(str), "BACKCOLOR %s", color);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3740
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3741 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
3742 if (!tag) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3743 GdkColor gcolor;
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3744 if (!gdk_color_parse(color, &gcolor)) {
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3745 gchar tmp[8];
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3746 tmp[0] = '#';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3747 strncpy(&tmp[1], color, 7);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3748 tmp[7] = '\0';
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3749 if (!gdk_color_parse(tmp, &gcolor))
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3750 gdk_color_parse("white", &gcolor);
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3751 }
99fc7e2b9410 [gaim-migrate @ 12534]
Tim Ringenbach <marv@pidgin.im>
parents: 10857
diff changeset
3752 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
3753 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3754
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3755 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3756 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3757
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3758 static GtkTextTag *find_font_background_tag(GtkIMHtml *imhtml, gchar *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3759 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3760 gchar str[19];
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3761 GtkTextTag *tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3762
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3763 g_snprintf(str, sizeof(str), "BACKGROUND %s", color);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3764
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3765 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
3766 if (!tag)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3767 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, NULL);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3768
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3769 return tag;
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3770 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3771
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3772 static GtkTextTag *find_font_face_tag(GtkIMHtml *imhtml, gchar *face)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3773 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3774 gchar str[256];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3775 GtkTextTag *tag;
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 g_snprintf(str, sizeof(str), "FONT FACE %s", face);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3778 str[255] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3779
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3780 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
3781 if (!tag)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3782 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
3783
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3784 return tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3785 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3786
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3787 static GtkTextTag *find_font_size_tag(GtkIMHtml *imhtml, int size)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3788 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3789 gchar str[24];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3790 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3791
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3792 g_snprintf(str, sizeof(str), "FONT SIZE %d", size);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3793 str[23] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3794
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3795 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
3796 if (!tag) {
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3797 /* For reasons I don't understand, setting "scale" here scaled
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3798 * based on some default size other than my theme's default
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3799 * 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
3800 * me. So this works around that oddity.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3801 */
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3802 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
3803 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
3804 (gint) (pango_font_description_get_size(attr->font) *
10899
87d9aec5b72d [gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10871
diff changeset
3805 (double) POINT_SIZE(size)), NULL);
10525
0f7757486d04 [gaim-migrate @ 11842]
Etan Reisner <deryni@pidgin.im>
parents: 10524
diff changeset
3806 gtk_text_attributes_unref(attr);
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 return tag;
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3812 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
3813 const char *prefix, guint len, gboolean homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3814 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3815 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3816 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3817
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3818 tags = gtk_text_iter_get_tags(i);
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, i, e);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3825 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3826
8677
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3829 if (homo)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3830 return;
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 iter = *i;
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 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
3835 if (gtk_text_iter_begins_tag(&iter, NULL)) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3836 tags = gtk_text_iter_get_toggled_tags(&iter, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3837
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3838 for (l = tags; l; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3839 GtkTextTag *tag = l->data;
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 if (tag->name && !strncmp(tag->name, prefix, len))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3842 gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, &iter, e);
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3845 g_slist_free(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3846 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
3847 }
8677
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3850 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
3851 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3852 remove_tag_by_prefix(imhtml, i, e, "FONT SIZE ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3853 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3854
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3855 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
3856 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3857 remove_tag_by_prefix(imhtml, i, e, "FONT FACE ", 10, 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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3860 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
3861 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3862 remove_tag_by_prefix(imhtml, i, e, "FORECOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3863 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3864
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3865 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
3866 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3867 remove_tag_by_prefix(imhtml, i, e, "BACKCOLOR ", 10, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3868 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3869
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3870 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
3871 {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3872 remove_tag_by_prefix(imhtml, i, e, "BACKGROUND ", 10, homo);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3873 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
3874
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3875 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
3876 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3877 remove_tag_by_prefix(imhtml, i, e, "LINK ", 5, homo);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3878 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3879
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3880 static void
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3881 imhtml_clear_formatting(GtkIMHtml *imhtml)
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3882 {
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3883 GtkTextIter start, end;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3884
12796
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3885 if (!imhtml->editable)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3886 return;
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3887
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3888 if (imhtml->wbfo)
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3889 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3890 else
8fb3611a91e1 [gaim-migrate @ 15143]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12673
diff changeset
3891 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
3892 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
3893
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3894 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
3895 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
3896 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
3897 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
3898 remove_font_size(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3899 remove_font_face(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3900 remove_font_forecolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3901 remove_font_backcolor(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3902 remove_font_background(imhtml, &start, &end, FALSE);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3903 remove_font_link(imhtml, &start, &end, FALSE);
12672
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 imhtml->edit.bold = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3906 imhtml->edit.italic = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3907 imhtml->edit.underline = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3908 imhtml->edit.strike = 0;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3909 imhtml->edit.fontsize = 0;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3910
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3911 g_free(imhtml->edit.fontface);
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3912 imhtml->edit.fontface = NULL;
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3913
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3914 g_free(imhtml->edit.forecolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3915 imhtml->edit.forecolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3916
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3917 g_free(imhtml->edit.backcolor);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3918 imhtml->edit.backcolor = NULL;
13224
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3919
485977c61b47 [gaim-migrate @ 15587]
Richard Laager <rlaager@pidgin.im>
parents: 13138
diff changeset
3920 g_free(imhtml->edit.background);
12672
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3921 imhtml->edit.background = NULL;
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3922 }
673e2a1d2954 [gaim-migrate @ 15015]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12635
diff changeset
3923
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3924 /* Editable stuff */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3925 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
3926 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3927 imhtml->insert_offset = gtk_text_iter_get_offset(iter);
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
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3930 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
3931 {
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3932 GtkTextIter start;
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 start = *arg1;
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3935 gtk_text_iter_backward_char(&start);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3936
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3937 gtk_imhtml_apply_tags_on_insert(user_data, &start, arg1);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3938 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3939
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3940 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
3941 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3942 GtkTextIter start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3943
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3944 if (!len)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3945 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3946
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3947 start = *end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3948 gtk_text_iter_set_offset(&start, imhtml->insert_offset);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3949
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3950 gtk_imhtml_apply_tags_on_insert(imhtml, &start, end);
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3951 }
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3952
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3953 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
3954 {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3955 GSList *tags, *l;
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 tags = gtk_text_iter_get_tags(start);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3958 for (l = tags; l != NULL; l = l->next) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3959 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3960
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3961 if (tag && /* Remove the formatting only if */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3962 gtk_text_iter_starts_word(start) && /* beginning of a word */
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3963 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
3964 (!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
3965 gtk_text_iter_ends_tag(end, tag))) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3966 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
3967 if (tag->name &&
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3968 strncmp(tag->name, "LINK ", 5) == 0 && imhtml->edit.link) {
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3969 gtk_imhtml_toggle_link(imhtml, NULL);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3970 }
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
3971 }
12673
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3972 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3973 g_slist_free(tags);
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3974 }
4c8a20955e0b [gaim-migrate @ 15016]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12672
diff changeset
3975
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3976 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
3977 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3978 if (imhtml->edit.bold)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3979 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
3980 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3981 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
3982
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3983 if (imhtml->edit.italic)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3984 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
3985 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3986 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
3987
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3988 if (imhtml->edit.underline)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3989 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
3990 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3991 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
3992
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
3993 if (imhtml->edit.strike)
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3994 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
3995 else
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3996 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
3997
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
3998 if (imhtml->edit.forecolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
3999 remove_font_forecolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4000 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4001 find_font_forecolor_tag(imhtml, imhtml->edit.forecolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4002 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4003 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4004
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4005 if (imhtml->edit.backcolor) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4006 remove_font_backcolor(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4007 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4008 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4009 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4010 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4011
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4012 if (imhtml->edit.background) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4013 remove_font_background(imhtml, start, end, TRUE);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4014 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4015 find_font_background_tag(imhtml, imhtml->edit.background),
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4016 start, end);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4017 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4018 if (imhtml->edit.fontface) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4019 remove_font_face(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4020 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4021 find_font_face_tag(imhtml, imhtml->edit.fontface),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4022 start, end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4023 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4024
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4025 if (imhtml->edit.fontsize) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4026 remove_font_size(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4027 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4028 find_font_size_tag(imhtml, imhtml->edit.fontsize),
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4029 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4030 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4031
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4032 if (imhtml->edit.link) {
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4033 remove_font_link(imhtml, start, end, TRUE);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4034 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4035 imhtml->edit.link,
10169
cdf48befaa8a [gaim-migrate @ 11258]
Tim Ringenbach <marv@pidgin.im>
parents: 10165
diff changeset
4036 start, end);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4037 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4038 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4039
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4040 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4041 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4042 gtk_text_view_set_editable(GTK_TEXT_VIEW(imhtml), editable);
8177
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4043 /*
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4044 * We need a visible caret for accessibility, so mouseless
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4045 * people can highlight stuff.
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4046 */
33b3a01c6318 [gaim-migrate @ 8891]
Mark Doliner <markdoliner@pidgin.im>
parents: 8149
diff changeset
4047 /* 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
4048 imhtml->editable = editable;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4049 imhtml->format_functions = GTK_IMHTML_ALL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4050
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4051 if (editable)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4052 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
4053 G_CALLBACK(mark_set_cb), imhtml);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4054 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4055
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4056 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
4057 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4058 g_return_if_fail(imhtml != NULL);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4059
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4060 imhtml->wbfo = wbfo;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4061 }
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4062
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4063 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4064 {
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4065 GObject *object = g_object_ref(G_OBJECT(imhtml));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4066 imhtml->format_functions = buttons;
8420
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4067 g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
71d59c4e2beb [gaim-migrate @ 9150]
Sean Egan <seanegan@pidgin.im>
parents: 8380
diff changeset
4068 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4069 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4070
8788
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4071 GtkIMHtmlButtons gtk_imhtml_get_format_functions(GtkIMHtml *imhtml)
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4072 {
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4073 return imhtml->format_functions;
a13634443a38 [gaim-migrate @ 9550]
Mark Doliner <markdoliner@pidgin.im>
parents: 8786
diff changeset
4074 }
8516
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4075
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4076 void gtk_imhtml_get_current_format(GtkIMHtml *imhtml, gboolean *bold,
a29b503cdfa0 [gaim-migrate @ 9254]
Gary Kramlich <grim@pidgin.im>
parents: 8515
diff changeset
4077 gboolean *italic, gboolean *underline)
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4078 {
12900
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4079 if (bold != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4080 (*bold) = imhtml->edit.bold;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4081 if (italic != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4082 (*italic) = imhtml->edit.italic;
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4083 if (underline != NULL)
7fe519669e07 [gaim-migrate @ 15253]
Richard Laager <rlaager@pidgin.im>
parents: 12836
diff changeset
4084 (*underline) = imhtml->edit.underline;
8481
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4085 }
7a9eb76e8eee [gaim-migrate @ 9214]
Gary Kramlich <grim@pidgin.im>
parents: 8473
diff changeset
4086
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4087 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4088 gtk_imhtml_get_current_fontface(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4089 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4090 return g_strdup(imhtml->edit.fontface);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4091 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4092
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4093 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4094 gtk_imhtml_get_current_forecolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4095 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4096 return g_strdup(imhtml->edit.forecolor);
9025
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
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4099 char *
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4100 gtk_imhtml_get_current_backcolor(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4101 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4102 return g_strdup(imhtml->edit.backcolor);
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4103 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4104
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4105 char *
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4106 gtk_imhtml_get_current_background(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4107 {
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4108 return g_strdup(imhtml->edit.background);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4109 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4110
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4111 gint
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4112 gtk_imhtml_get_current_fontsize(GtkIMHtml *imhtml)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4113 {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4114 return imhtml->edit.fontsize;
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4115 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4116
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4117 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4118 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4119 return imhtml->editable;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4120 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4121
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4122 void
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4123 gtk_imhtml_clear_formatting(GtkIMHtml *imhtml)
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4124 {
11275
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4125 GObject *object;
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4126
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4127 object = g_object_ref(G_OBJECT(imhtml));
cdcc651d7ecd [gaim-migrate @ 13461]
Richard Laager <rlaager@pidgin.im>
parents: 11269
diff changeset
4128 g_signal_emit(object, signals[CLEAR_FORMAT], 0);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4129
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4130 gtk_widget_grab_focus(GTK_WIDGET(imhtml));
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4131
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4132 g_object_unref(object);
11269
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4133 }
ca63789d57b9 [gaim-migrate @ 13451]
Richard Laager <rlaager@pidgin.im>
parents: 11267
diff changeset
4134
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4135 /*
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4136 * 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
4137 * 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
4138 * we actually set a new foreground color.
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4139 * 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
4140 * colors.
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4141 *
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4142 * 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
4143 *
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4144 * (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
4145 * (12:45:55) ?? ???: understand?
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4146 * (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
4147 * (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
4148 */
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4149
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4150 static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *arg1, GtkTextMark *mark,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4151 GtkIMHtml *imhtml)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4152 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4153 GSList *tags, *l;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4154 GtkTextIter iter;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4155
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4156 if (mark != gtk_text_buffer_get_insert(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4157 return;
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 if (!gtk_text_buffer_get_char_count(buffer))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4160 return;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4161
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4162 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
4163 g_free(imhtml->edit.forecolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4164 imhtml->edit.forecolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4165
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4166 g_free(imhtml->edit.backcolor);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4167 imhtml->edit.backcolor = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4168
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4169 g_free(imhtml->edit.fontface);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4170 imhtml->edit.fontface = NULL;
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14010
diff changeset
4171
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4172 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4173 imhtml->edit.link = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4174
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4175 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
4176
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4177
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4178 if (gtk_text_iter_is_end(&iter))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4179 tags = gtk_text_iter_get_toggled_tags(&iter, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4180 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4181 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4182
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4183 for (l = tags; l != NULL; l = l->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4184 GtkTextTag *tag = GTK_TEXT_TAG(l->data);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4185
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4186 if (tag->name) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4187 if (strcmp(tag->name, "BOLD") == 0)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4188 imhtml->edit.bold = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4189 else if (strcmp(tag->name, "ITALICS") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4190 imhtml->edit.italic = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4191 else if (strcmp(tag->name, "UNDERLINE") == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4192 imhtml->edit.underline = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4193 else if (strcmp(tag->name, "STRIKE") == 0)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4194 imhtml->edit.strike = TRUE;
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4195 else if (strncmp(tag->name, "FORECOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4196 imhtml->edit.forecolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4197 else if (strncmp(tag->name, "BACKCOLOR ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4198 imhtml->edit.backcolor = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4199 else if (strncmp(tag->name, "FONT FACE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4200 imhtml->edit.fontface = g_strdup(&(tag->name)[10]);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4201 else if (strncmp(tag->name, "FONT SIZE ", 10) == 0)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4202 imhtml->edit.fontsize = strtol(&(tag->name)[10], NULL, 10);
13138
4d3bd039da3e [gaim-migrate @ 15499]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13137
diff changeset
4203 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
4204 imhtml->edit.link = tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4205 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4206 }
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 g_slist_free(tags);
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
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4211 static void imhtml_emit_signal_for_format(GtkIMHtml *imhtml, GtkIMHtmlButtons button)
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4212 {
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4213 GObject *object;
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4214
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4215 g_return_if_fail(imhtml != NULL);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4216
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4217 object = g_object_ref(G_OBJECT(imhtml));
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4218 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4219 g_object_unref(object);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4220 }
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4221
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4222 static void imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4223 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4224 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4225
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4226 imhtml->edit.bold = !imhtml->edit.bold;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4227
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4228 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4229 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4230 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4231 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
4232 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4233 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
4234 } 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
4235 if (imhtml->edit.bold)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4236 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
4237 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4238 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
4239
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4240 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4241 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4242
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4243 void gtk_imhtml_toggle_bold(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4244 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4245 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_BOLD);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4246 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4247
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4248 static void imhtml_toggle_italic(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4249 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4250 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4251
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4252 imhtml->edit.italic = !imhtml->edit.italic;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4253
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4254 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4255 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4256 if (imhtml->edit.italic)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4257 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
4258 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4259 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
4260 } 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
4261 if (imhtml->edit.italic)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4262 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
4263 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4264 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
4265 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4266 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4267
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4268 void gtk_imhtml_toggle_italic(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4269 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4270 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_ITALIC);
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4271 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4272
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4273 static void imhtml_toggle_underline(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4274 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4275 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4276
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4277 imhtml->edit.underline = !imhtml->edit.underline;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4278
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4279 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4280 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4281 if (imhtml->edit.underline)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4282 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
4283 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4284 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
4285 } 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
4286 if (imhtml->edit.underline)
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4287 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
4288 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4289 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
4290 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4291 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4292
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4293 void gtk_imhtml_toggle_underline(GtkIMHtml *imhtml)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4294 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4295 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_UNDERLINE);
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4296 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4297
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4298 static void imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4299 {
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4300 GtkTextIter start, end;
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4301
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4302 imhtml->edit.strike = !imhtml->edit.strike;
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 if (imhtml->wbfo) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4305 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4306 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4307 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
4308 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4309 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
4310 } 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
4311 if (imhtml->edit.strike)
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4312 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
4313 else
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4314 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
4315 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4316 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4317
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4318 void gtk_imhtml_toggle_strike(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4319 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4320 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_STRIKE);
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4321 }
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4322
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4323 void gtk_imhtml_font_set_size(GtkIMHtml *imhtml, gint size)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4324 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4325 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4326 GtkTextIter start, end;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4327
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4328 imhtml->edit.fontsize = size;
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 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4331 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4332 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4333 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4334 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4335 } 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
4336 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4337 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4338 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4339 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4340
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4341 object = g_object_ref(G_OBJECT(imhtml));
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4342 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
4343 g_object_unref(object);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4344 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4345
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4346 static void imhtml_font_shrink(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4347 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4348 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4349
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4350 if (imhtml->edit.fontsize == 1)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4351 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4352
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4353 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4354 imhtml->edit.fontsize = 2;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4355 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4356 imhtml->edit.fontsize--;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4357
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4358 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4359 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4360 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4361 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4362 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4363 } 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
4364 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4365 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4366 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4367 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4368 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4369
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4370 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4371 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4372 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_SHRINK);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4373 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4374
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4375 static void imhtml_font_grow(GtkIMHtml *imhtml)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4376 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4377 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4378
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4379 if (imhtml->edit.fontsize == MAX_FONT_SIZE)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4380 return;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4381
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4382 if (!imhtml->edit.fontsize)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4383 imhtml->edit.fontsize = 4;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4384 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4385 imhtml->edit.fontsize++;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4386
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4387 if (imhtml->wbfo) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4388 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4389 remove_font_size(imhtml, &start, &end, TRUE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4390 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4391 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4392 } 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
4393 remove_font_size(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4394 gtk_text_buffer_apply_tag(imhtml->text_buffer,
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4395 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4396 }
11267
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4397 }
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4398
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4399 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
78f1eb5b3d6e [gaim-migrate @ 13449]
Richard Laager <rlaager@pidgin.im>
parents: 11240
diff changeset
4400 {
12605
7390627a6aaf [gaim-migrate @ 14940]
Richard Laager <rlaager@pidgin.im>
parents: 12600
diff changeset
4401 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_GROW);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4402 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4403
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4404 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
4405 void (*remove_func)(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4406 GtkTextTag *(find_func)(GtkIMHtml *imhtml, gchar *color), GtkIMHtmlButtons button)
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 GObject *object;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4409 GtkTextIter start;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4410 GtkTextIter end;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4411
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4412 g_free(*edit_field);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4413 *edit_field = NULL;
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4414
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4415 if (value && strcmp(value, "") != 0)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4416 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4417 *edit_field = g_strdup(value);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4418
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4419 if (imhtml->wbfo)
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 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4422 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4423 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4424 find_func(imhtml, *edit_field), &start, &end);
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 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4427 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4428 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4429 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4430 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
4431 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4432 remove_func(imhtml, &start, &end, FALSE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4433 gtk_text_buffer_apply_tag(imhtml->text_buffer,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4434 find_func(imhtml,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4435 *edit_field),
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4436 &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4437 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4438 }
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 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4441 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4442 if (imhtml->wbfo)
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4443 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4444 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4445 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4446 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4447 else
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4448 {
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4449 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
4450 remove_func(imhtml, &start, &end, TRUE);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4451 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4452 }
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4453
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4454 object = g_object_ref(G_OBJECT(imhtml));
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4455 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4456 g_object_unref(object);
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4457
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4458 return *edit_field != NULL;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4459 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4460
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4461 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4462 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4463 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.forecolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4464 remove_font_forecolor, find_font_forecolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4465 GTK_IMHTML_FORECOLOR);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4466 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4467
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4468 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4469 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4470 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.backcolor,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4471 remove_font_backcolor, find_font_backcolor_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4472 GTK_IMHTML_BACKCOLOR);
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4473 }
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4474
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4475 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color)
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4476 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4477 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.background,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4478 remove_font_background, find_font_background_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4479 GTK_IMHTML_BACKGROUND);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4480 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4481
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4482 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4483 {
13225
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4484 return gtk_imhtml_toggle_str_tag(imhtml, face, &imhtml->edit.fontface,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4485 remove_font_face, find_font_face_tag,
b82e04c17537 [gaim-migrate @ 15588]
Richard Laager <rlaager@pidgin.im>
parents: 13224
diff changeset
4486 GTK_IMHTML_FACE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4487 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4488
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4489 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4490 {
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4491 GObject *object;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4492 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4493 GtkTextTag *linktag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4494 static guint linkno = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4495 gchar str[48];
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4496 GdkColor *color = NULL;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4497
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4498 imhtml->edit.link = NULL;
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 if (url) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4501 g_snprintf(str, sizeof(str), "LINK %d", linkno++);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4502 str[47] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4503
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4504 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
4505 if (color) {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4506 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
4507 gdk_color_free(color);
0be1d8921114 [gaim-migrate @ 9784]
Tim Ringenbach <marv@pidgin.im>
parents: 9007
diff changeset
4508 } else {
9007
87c8402bc0e3 [gaim-migrate @ 9783]
Tim Ringenbach <marv@pidgin.im>
parents: 8962
diff changeset
4509 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
4510 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4511 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
4512 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
4513
11276
aec923529d31 [gaim-migrate @ 13463]
Richard Laager <rlaager@pidgin.im>
parents: 11275
diff changeset
4514 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
4515 remove_font_link(imhtml, &start, &end, FALSE);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4516 gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4517 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4518 }
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4519
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4520 object = g_object_ref(G_OBJECT(imhtml));
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4521 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_LINK);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 9008
diff changeset
4522 g_object_unref(object);
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4523 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4524
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4525 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
4526 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4527 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4528
9599
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4529 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
4530 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
1089c73e0586 [gaim-migrate @ 10442]
Tim Ringenbach <marv@pidgin.im>
parents: 9574
diff changeset
4531
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4532 gtk_imhtml_toggle_link(imhtml, url);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4533 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
4534 gtk_text_buffer_insert(imhtml->text_buffer, &iter, text, -1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4535 gtk_imhtml_toggle_link(imhtml, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4536 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4537
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4538 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
4539 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4540 GtkTextMark *mark;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4541 GtkTextIter iter;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4542
11750
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4543 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
4544 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
63f951281392 [gaim-migrate @ 14041]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11701
diff changeset
4545
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4546 mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4547
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4548 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
4549 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, smiley, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4550 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4551
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4552 static gboolean
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4553 image_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4554 {
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4555 GTK_WIDGET_CLASS(GTK_WIDGET_GET_CLASS(widget))->expose_event(widget, event);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4556
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4557 return TRUE;
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4558 }
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4559
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
4560 /* 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
4561 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
4562 {
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4563 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
4564 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
4565 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
4566 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
4567 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
4568 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
4569 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
4570 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
4571 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4572 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
4573 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4574 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4575
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4576 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
4577 {
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4578 GdkPixbuf *pixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4579 GdkPixbufAnimation *annipixbuf = NULL;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4580 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
4581 GtkTextChildAnchor *anchor = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4582 char *unescaped = purple_unescape_html(smiley);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11485
diff changeset
4583 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
4584 GtkWidget *ebox = NULL;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4585
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4586 if (imhtml->format_functions & GTK_IMHTML_SMILEY) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4587 annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4588 if (annipixbuf) {
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4589 if (gdk_pixbuf_animation_is_static_image(annipixbuf)) {
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4590 pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
10526
05b5c6d4090d [gaim-migrate @ 11843]
Tim Ringenbach <marv@pidgin.im>
parents: 10525
diff changeset
4591 if (pixbuf)
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4592 icon = gtk_image_new_from_pixbuf(pixbuf);
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4593 } else {
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4594 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
4595 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
4596 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
4597 GdkPixbufAnimation *anim = gtk_image_get_animation(image);
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4598 g_signal_handlers_disconnect_matched(G_OBJECT(image), G_SIGNAL_MATCH_FUNC,
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4599 0, 0, NULL, G_CALLBACK(animated_smiley_destroy_cb), 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
4600 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
4601 GdkPixbuf *pb = gdk_pixbuf_animation_get_static_image(anim);
20638
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4602 if (pb != NULL) {
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4603 GdkPixbuf *copy = gdk_pixbuf_copy(pb);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4604 gtk_image_set_from_pixbuf(image, copy);
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4605 g_object_unref(G_OBJECT(copy));
38507ef4007f Fix some crashes with animated smileys. Fixes #3179, #938, #3134, #2872, #1594
Daniel Atallah <datallah@pidgin.im>
parents: 20330
diff changeset
4606 }
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
4607 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4608 } 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
4609 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
4610 }
aa5b9456e258 Fixes #213 This allows only 20 animated smileys to be animnating at a time
Sean Egan <seanegan@pidgin.im>
parents: 16291
diff changeset
4611 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
4612 g_queue_push_tail(imhtml->animations, icon);
10522
d505522bcc93 [gaim-migrate @ 11838]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
4613 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4614 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4615 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4616
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
4617 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
4618 ebox = gtk_event_box_new();
17406
bc37f59a34f1 Fix for gtk < 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17288
diff changeset
4619 #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
4620 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
4621 #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
4622 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
4623 }
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
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4625 if (icon) {
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4626 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4627 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
4628 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
4629
13552
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4630 /* This catches the expose events generated by animated
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4631 * images, and ensures that they are handled by the image
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4632 * itself, without propagating to the textview and causing
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4633 * a complete refresh */
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4634 g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL);
1b9cad7ba558 [gaim-migrate @ 15929]
Fernando Herrera
parents: 13539
diff changeset
4635
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4636 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
4637 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
4638 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
4639 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
4640 } 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
4641 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
4642 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
4643 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
4644 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
4645 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
4646 gtk_widget_show(img);
18543
c590aed61aa4 Show tooltip for smileys. Fixes #1981.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18371
diff changeset
4647 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free);
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
4648 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
4649 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4650 } else {
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4651 gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4652 }
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4653
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
4654 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
4655 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
4656 }
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
4657
8890
0a37b4a8ff32 [gaim-migrate @ 9659]
Kevin Stange <kstange@pidgin.im>
parents: 8881
diff changeset
4658 g_free(unescaped);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4659 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4660
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4661 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
4662 {
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4663 GdkPixbufAnimation *anim = NULL;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4664 const char *filename = NULL;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4665 gpointer image;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4666 GdkRectangle rect;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4667 GtkIMHtmlScalable *scalable = NULL;
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4668 struct scalable_data *sd;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4669 int minus;
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 if (!imhtml->funcs || !imhtml->funcs->image_get ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4672 !imhtml->funcs->image_get_size || !imhtml->funcs->image_get_data ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4673 !imhtml->funcs->image_get_filename || !imhtml->funcs->image_ref ||
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4674 !imhtml->funcs->image_unref)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4675 return;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4676
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4677 image = imhtml->funcs->image_get(id);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4678
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4679 if (image) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4680 gpointer data;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4681 size_t len;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4682
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4683 data = imhtml->funcs->image_get_data(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4684 len = imhtml->funcs->image_get_size(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4685
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4686 if (data && len) {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4687 GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4688 gdk_pixbuf_loader_write(loader, data, len, NULL);
12230
2f327bccf63b [gaim-migrate @ 14532]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12229
diff changeset
4689 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
4690 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
4691 if (anim)
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4692 g_object_ref(G_OBJECT(anim));
9337
4bd369a6e4dc [gaim-migrate @ 10145]
Tim Ringenbach <marv@pidgin.im>
parents: 9335
diff changeset
4693 g_object_unref(G_OBJECT(loader));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4694 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4695
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4696 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4697
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4698 if (anim) {
11299
06bb44ed0cf3 [gaim-migrate @ 13499]
Richard Laager <rlaager@pidgin.im>
parents: 11276
diff changeset
4699 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
4700 filename = imhtml->funcs->image_get_filename(image);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4701 imhtml->funcs->image_ref(id);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4702 t->id = id;
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4703 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
4704 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
4705 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
4706 g_object_unref(G_OBJECT(anim));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4707 } else {
18151
97fd60f47229 When an animated image is inserted into a conversation window, animate
Mark Doliner <markdoliner@pidgin.im>
parents: 18119
diff changeset
4708 GdkPixbuf *pixbuf;
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4709 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
4710 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
4711 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
4712 g_object_unref(G_OBJECT(pixbuf));
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4713 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4714
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4715 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
4716 sd->scalable = scalable;
11233
28c0f184a2d4 [gaim-migrate @ 13373]
Daniel Atallah <datallah@pidgin.im>
parents: 11224
diff changeset
4717 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
4718 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4719 scalable->add_to(scalable, imhtml, iter);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4720 minus = gtk_text_view_get_left_margin(GTK_TEXT_VIEW(imhtml)) +
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4721 gtk_text_view_get_right_margin(GTK_TEXT_VIEW(imhtml));
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4722 scalable->scale(scalable, rect.width - minus, rect.height);
11224
04c1712bb953 [gaim-migrate @ 13360]
Daniel Atallah <datallah@pidgin.im>
parents: 11143
diff changeset
4723 imhtml->scalables = g_list_append(imhtml->scalables, sd);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4724 }
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
4725
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4726 static const gchar *tag_to_html_start(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4727 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4728 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4729 static gchar buf[1024];
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4730
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4731 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4732 g_return_val_if_fail(name != NULL, "");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4733
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4734 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4735 return "<b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4736 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4737 return "<i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4738 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4739 return "<u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4740 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4741 return "<s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4742 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4743 char *tmp = g_object_get_data(G_OBJECT(tag), "link_url");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4744 if (tmp) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4745 g_snprintf(buf, sizeof(buf), "<a href=\"%s\">", tmp);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4746 buf[sizeof(buf)-1] = '\0';
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4747 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4748 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4749 return "";
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 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4752 g_snprintf(buf, sizeof(buf), "<font color=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4753 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4754 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4755 g_snprintf(buf, sizeof(buf), "<font back=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4756 return buf;
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4757 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4758 g_snprintf(buf, sizeof(buf), "<body bgcolor=\"%s\">", &name[11]);
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4759 return buf;
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4760 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4761 g_snprintf(buf, sizeof(buf), "<font face=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4762 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4763 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4764 g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4765 return buf;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4766 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4767 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4768 }
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4769 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4770
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4771 static const gchar *tag_to_html_end(GtkTextTag *tag)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4772 {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4773 const gchar *name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4774
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4775 name = tag->name;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4776 g_return_val_if_fail(name != NULL, "");
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 if (strcmp(name, "BOLD") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4779 return "</b>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4780 } else if (strcmp(name, "ITALICS") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4781 return "</i>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4782 } else if (strcmp(name, "UNDERLINE") == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4783 return "</u>";
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4784 } else if (strcmp(name, "STRIKE") == 0) {
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4785 return "</s>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4786 } else if (strncmp(name, "LINK ", 5) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4787 return "</a>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4788 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4789 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4790 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4791 return "</font>";
10776
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4792 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
b474d64f94ac [gaim-migrate @ 12387]
Tim Ringenbach <marv@pidgin.im>
parents: 10770
diff changeset
4793 return "</body>";
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4794 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4795 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4796 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4797 return "</font>";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4798 } else {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4799 return "";
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4800 }
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4803 static gboolean tag_ends_here(GtkTextTag *tag, GtkTextIter *iter, GtkTextIter *niter)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4804 {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4805 return ((gtk_text_iter_has_tag(iter, GTK_TEXT_TAG(tag)) &&
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4806 !gtk_text_iter_has_tag(niter, GTK_TEXT_TAG(tag))) ||
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4807 gtk_text_iter_is_end(niter));
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4808 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4809
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4810 /* 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
4811 * 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
4812 * 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
4813 * 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
4814 * Finally, replace <, >, &, and " with their HTML equivalent.
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4815 */
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4816 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
4817 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4818 gunichar c;
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4819 GtkTextIter iter, next_iter, non_neutral_iter;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4820 gboolean is_rtl_message = FALSE;
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4821 GString *str = g_string_new("");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4822 GSList *tags, *sl;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4823 GQueue *q, *r;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4824 GtkTextTag *tag;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4825
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4826 q = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4827 r = g_queue_new();
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4828
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4829
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4830 gtk_text_iter_order(start, end);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4831 non_neutral_iter = next_iter = iter = *start;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4832 gtk_text_iter_forward_char(&next_iter);
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4833
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4834 /* Bi-directional text support */
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4835 /* 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
4836 #ifdef HAVE_PANGO14
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4837 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
4838 && gtk_text_iter_forward_char(&non_neutral_iter));
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4839 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
4840 is_rtl_message = TRUE;
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4841 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
4842 }
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
4843 #endif
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4844
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4845 /* 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
4846 tags = gtk_text_iter_get_tags(start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4847
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4848 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4849 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4850 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
4851 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4852 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4853 g_queue_push_tail(q, tag);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4854 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4855 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4856 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4857
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4858 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
4859
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4860 tags = gtk_text_iter_get_tags(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4861
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4862 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4863 tag = sl->data;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4864 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
4865 if (strlen(tag_to_html_end(tag)) > 0)
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4866 g_string_append(str, tag_to_html_start(tag));
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4867 g_queue_push_tail(q, tag);
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 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4870
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4871
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4872 if (c == 0xFFFC) {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4873 GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(&iter);
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4874 if (anchor) {
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4875 char *text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_htmltext");
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4876 if (text)
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4877 str = g_string_append(str, text);
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4878 }
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4879 } else if (c == '<') {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4880 str = g_string_append(str, "&lt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4881 } else if (c == '>') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4882 str = g_string_append(str, "&gt;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4883 } else if (c == '&') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4884 str = g_string_append(str, "&amp;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4885 } else if (c == '"') {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4886 str = g_string_append(str, "&quot;");
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4887 } else if (c == '\n') {
19746
4537d921dab4 disapproval of revision '10d0834255f911ca2359c74b430025155af2b22e'
Kevin Stange <kstange@pidgin.im>
parents: 19745
diff changeset
4888 str = g_string_append(str, "<br>");
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4889 } else {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4890 str = g_string_append_unichar(str, c);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4891 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4892
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4893 tags = g_slist_reverse(tags);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4894 for (sl = tags; sl; sl = sl->next) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4895 tag = sl->data;
9071
a3b12b59a58b [gaim-migrate @ 9847]
Daniel Atallah <datallah@pidgin.im>
parents: 9037
diff changeset
4896 /** 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
4897 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
4898
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4899 GtkTextTag *tmp;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4900
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4901 while ((tmp = g_queue_pop_tail(q)) != tag) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4902 if (tmp == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4903 break;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4904
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4905 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
4906 g_queue_push_tail(r, tmp);
11572
3aaac95fa1ec [gaim-migrate @ 13840]
Daniel Atallah <datallah@pidgin.im>
parents: 11525
diff changeset
4907 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
4908 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4909
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4910 if (tmp == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15865
diff changeset
4911 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
4912 else
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4913 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
4914
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4915 while ((tmp = g_queue_pop_head(r))) {
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4916 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
4917 g_queue_push_tail(q, tmp);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4918 }
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 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4921
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4922 g_slist_free(tags);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4923 gtk_text_iter_forward_char(&iter);
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4924 gtk_text_iter_forward_char(&next_iter);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4925 }
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4926
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4927 while ((tag = g_queue_pop_tail(q)))
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4928 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
4929
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4930 /* Bi-directional text support - close tags */
16144
4e022531d1c9 Patch cleanups:
Richard Laager <rlaager@pidgin.im>
parents: 16143
diff changeset
4931 if (is_rtl_message)
16143
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4932 g_string_append(str, "</SPAN>");
6393e5b11ff5 Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents: 15931
diff changeset
4933
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4934 g_queue_free(q);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4935 g_queue_free(r);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4936 return g_string_free(str, FALSE);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4937 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4938
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
4939 void gtk_imhtml_close_tags(GtkIMHtml *imhtml, GtkTextIter *iter)
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4940 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4941 if (imhtml->edit.bold)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4942 gtk_imhtml_toggle_bold(imhtml);
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 if (imhtml->edit.italic)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4945 gtk_imhtml_toggle_italic(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4946
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4947 if (imhtml->edit.underline)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4948 gtk_imhtml_toggle_underline(imhtml);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4949
9924
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4950 if (imhtml->edit.strike)
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4951 gtk_imhtml_toggle_strike(imhtml);
55cc2ac0bd3f [gaim-migrate @ 10816]
Tim Ringenbach <marv@pidgin.im>
parents: 9815
diff changeset
4952
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4953 if (imhtml->edit.forecolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4954 gtk_imhtml_toggle_forecolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4955
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4956 if (imhtml->edit.backcolor)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4957 gtk_imhtml_toggle_backcolor(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4958
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4959 if (imhtml->edit.fontface)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4960 gtk_imhtml_toggle_fontface(imhtml, NULL);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4961
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4962 imhtml->edit.fontsize = 0;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4963
8719
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4964 if (imhtml->edit.link)
1d1a4e11b4ab [gaim-migrate @ 9474]
Tim Ringenbach <marv@pidgin.im>
parents: 8707
diff changeset
4965 gtk_imhtml_toggle_link(imhtml, NULL);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4966 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4967
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4968 char *gtk_imhtml_get_markup(GtkIMHtml *imhtml)
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4969 {
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4970 GtkTextIter start, end;
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4971
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4972 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4973 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4974 return gtk_imhtml_get_markup_range(imhtml, &start, &end);
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4975 }
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
4976
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4977 char **gtk_imhtml_get_markup_lines(GtkIMHtml *imhtml)
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 int i, j, lines;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4980 GtkTextIter start, end;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4981 char **ret;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4982
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4983 lines = gtk_text_buffer_get_line_count(imhtml->text_buffer);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4984 ret = g_new0(char *, lines + 1);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4985 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4986 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4987 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4988
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4989 for (i = 0, j = 0; i < lines; i++) {
9612
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4990 if (gtk_text_iter_get_char(&start) != '\n') {
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4991 ret[j] = gtk_imhtml_get_markup_range(imhtml, &start, &end);
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4992 if (ret[j] != NULL)
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4993 j++;
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4994 }
89f5a9900fdd [gaim-migrate @ 10455]
Tim Ringenbach <marv@pidgin.im>
parents: 9599
diff changeset
4995
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4996 gtk_text_iter_forward_line(&start);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4997 end = start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4998 gtk_text_iter_forward_to_line_end(&end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
4999 }
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5000
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5001 return ret;
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
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5004 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
5005 {
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5006 GString *str = g_string_new("");
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5007 GtkTextIter iter, end;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5008 gunichar c;
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5009
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5010 if (start == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5011 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5012 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5013 iter = *start;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5014
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5015 if (stop == NULL)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5016 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5017 else
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5018 end = *stop;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5019
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5020 gtk_text_iter_order(&iter, &end);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5021
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5022 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
5023 if (c == 0xFFFC) {
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5024 GtkTextChildAnchor* anchor;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5025 char *text = NULL;
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5026
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5027 anchor = gtk_text_iter_get_child_anchor(&iter);
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5028 if (anchor)
8698
47d7bcc95e40 [gaim-migrate @ 9451]
Tim Ringenbach <marv@pidgin.im>
parents: 8693
diff changeset
5029 text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_plaintext");
8677
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5030 if (text)
18b494207322 [gaim-migrate @ 9430]
Tim Ringenbach <marv@pidgin.im>
parents: 8654
diff changeset
5031 str = g_string_append(str, text);
8519
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5032 } else {
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5033 g_string_append_unichar(str, c);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5034 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5035 gtk_text_iter_forward_char(&iter);
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5036 }
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5037
13be07662047 [gaim-migrate @ 9258]
Gary Kramlich <grim@pidgin.im>
parents: 8516
diff changeset
5038 return g_string_free(str, FALSE);
8061
a765ea99b49f [gaim-migrate @ 8749]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
5039 }
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5040
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5041 void gtk_imhtml_set_funcs(GtkIMHtml *imhtml, GtkIMHtmlFuncs *f)
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5042 {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5043 g_return_if_fail(imhtml != NULL);
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5044 imhtml->funcs = f;
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8957
diff changeset
5045 }
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
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 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
5048 {
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5049 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
5050
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
5051 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
5052 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
5053 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
5054
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5055 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
5056
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5057 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
5058 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
5059 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
5060 {
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5061 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
5062 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
5063 }
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5064 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
5065 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
5066
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
5067 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
5068 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
5069 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
5070
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 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
5072 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
5073
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 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
5075 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
5076
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 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
5078 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
5079
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 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
5081 {
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 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
5083
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 /* 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
5085 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
5086 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
5087 }
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
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 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
5090 {
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 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
5092 &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
5093 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
5094 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
5095 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
5096 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
5097 } 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
5098 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
5099
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5100 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
5101
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5102 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
5103 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
5104 {
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 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
5106 &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
5107 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
5108 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
5109 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
5110 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
5111 } 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
5112 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
5113
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5114 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
5115
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5116 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
5117 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
5118 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
5119 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
5120 } 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
5121 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
5122 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
5123 }
18240
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5124
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5125 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
5126 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
5127
0a7d2fde749b Fix setting the sensitivity of the toolbar items in a number of places
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18185
diff changeset
5128 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
5129 }
8be39f0de528 Allow formatted text in the pounce dialog. Also, use the same code to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17288
diff changeset
5130
18105
bab0b0bcb664 propagate from branch 'im.pidgin.pidgin' (head 1b4384bff09a39fca58692fb6c929d4fe1276022)
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18086 17877
diff changeset
5131

mercurial