annotate src/gtkimhtml.c @ 3913:419bf1bc8fa2

[gaim-migrate @ 4072] This should fix the bug where closing the debug window with the "X" would not uncheck the preference for it. Previously, it got unchecked then rechecked. The line I'm removing used to be "misc_options_new ^= OPT_MISC_DEBUG;", which I guess is a hold over or something of when prefs had that apply button, maybe. I dunno. I think this should be good... Roof. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 07 Nov 2002 03:34:46 +0000
parents 988485669631
children 30f52e7afd1d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * GtkIMHtml
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Copyright (C) 2000, Eric Warmenhoven <warmenhoven@yahoo.com>
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * under the terms of the GNU General Public License as published by
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * (at your option) any later version.
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * GNU General Public License for more details.
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 */
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
22 #ifdef HAVE_CONFIG_H
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
23 #include <config.h>
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
24 #endif
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 #include "gtkimhtml.h"
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
26
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
27 #ifndef _WIN32
1978
a7bfa23e80a1 [gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1964
diff changeset
28 #include <X11/Xlib.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
29 #include <gdk/gdkx.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
30 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
31 #include <gdk/gdkwin32.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
32 #endif
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
33
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
34 #include <stdlib.h>
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #include <gtk/gtk.h>
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #include <string.h>
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37 #include <ctype.h>
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
38 #include <stdio.h>
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 #include <math.h>
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
40 #ifdef HAVE_LANGINFO_CODESET
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
41 #include <langinfo.h>
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
42 #include <locale.h>
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
43 #endif
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
44
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
45 #ifdef _WIN32
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
46 /* GDK_SELECTION_PRIMARY is ignored win32 GTK */
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
47 #undef GDK_SELECTION_PRIMARY
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
48 #define GDK_SELECTION_PRIMARY GDK_SELECTION_CLIPBOARD
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
49 #endif
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
50
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
51 #include <gdk-pixbuf/gdk-pixbuf.h>
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
52 #include <gdk-pixbuf/gdk-pixbuf-loader.h>
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
53
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
54 #include <pango/pango.h>
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
55
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 #include "pixmaps/angel.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57 #include "pixmaps/bigsmile.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
58 #include "pixmaps/burp.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
59 #include "pixmaps/crossedlips.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
60 #include "pixmaps/cry.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
61 #include "pixmaps/embarrassed.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
62 #include "pixmaps/kiss.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
63 #include "pixmaps/moneymouth.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
64 #include "pixmaps/sad.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
65 #include "pixmaps/scream.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
66 #include "pixmaps/smile.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
67 #include "pixmaps/smile8.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
68 #include "pixmaps/think.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
69 #include "pixmaps/tongue.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
70 #include "pixmaps/wink.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
71 #include "pixmaps/yell.xpm"
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
72
2761
367d19133917 [gaim-migrate @ 2774]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2734
diff changeset
73 #define MAX_FONT_SIZE 7
367d19133917 [gaim-migrate @ 2774]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2734
diff changeset
74
2776
3316f391df38 [gaim-migrate @ 2789]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2775
diff changeset
75 #define POINT_SIZE(x) (_point_sizes [MIN ((x), MAX_FONT_SIZE) - 1])
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
76 static gint _point_sizes [] = { 8, 10, 12, 14, 20, 30, 40 };
2761
367d19133917 [gaim-migrate @ 2774]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2734
diff changeset
77
3615
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
78 #define DEFAULT_PRE_FACE "sans"
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
80 #define BORDER_SIZE 2
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
81 #define TOP_BORDER 10
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
82 #define MIN_HEIGHT 20
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83 #define HR_HEIGHT 2
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
84 #define TOOLTIP_TIMEOUT 500
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
85
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
86 #define DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
87 #define COLOR_MOD 0x8000
1647
23b734cf1161 [gaim-migrate @ 1657]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1626
diff changeset
88 #define COLOR_DIFF 0x800
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
89
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
90 #define TYPE_TEXT 0
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
91 #define TYPE_SMILEY 1
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
92 #define TYPE_IMG 2
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
93 #define TYPE_SEP 3
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
94 #define TYPE_BR 4
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
95 #define TYPE_COMMENT 5
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
96
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
97 #define GTK_IMHTML_GET_STYLE_FONT(style) gtk_style_get_font (style)
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
98
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
99 #define DRAW_IMG(x) (((x)->type == TYPE_IMG) || (imhtml->smileys && ((x)->type == TYPE_SMILEY)))
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
100
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
101 typedef struct _GtkIMHtmlBit GtkIMHtmlBit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
102 typedef struct _FontDetail FontDetail;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
103
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
104 struct _GtkSmileyTree {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
105 GString *values;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
106 GtkSmileyTree **children;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
107 gchar **image;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
108 };
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
109
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
110 /*
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
111 * PROTOS
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
112 */
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
113 extern void debug_printf(char * fmt, ...);
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
114
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
115 static GtkSmileyTree*
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
116 gtk_smiley_tree_new ()
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
117 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
118 return g_new0 (GtkSmileyTree, 1);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
119 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
120
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
121 static void
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
122 gtk_smiley_tree_insert (GtkSmileyTree *tree,
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
123 const gchar *text,
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
124 gchar **image)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
125 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
126 GtkSmileyTree *t = tree;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
127 const gchar *x = text;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
128
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
129 if (!strlen (x))
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
130 return;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
131
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
132 while (*x) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
133 gchar *pos;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
134 gint index;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
135
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
136 if (!t->values)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
137 t->values = g_string_new ("");
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
138
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
139 pos = strchr (t->values->str, *x);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
140 if (!pos) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
141 t->values = g_string_append_c (t->values, *x);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
142 index = t->values->len - 1;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
143 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
144 t->children [index] = g_new0 (GtkSmileyTree, 1);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
145 } else
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
146 index = (int) pos - (int) t->values->str;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
147
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
148 t = t->children [index];
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
149
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
150 x++;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
151 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
152
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
153 t->image = image;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
154 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
155
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
156 static void
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
157 gtk_smiley_tree_remove (GtkSmileyTree *tree,
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
158 const gchar *text)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
159 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
160 GtkSmileyTree *t = tree;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
161 const gchar *x = text;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
162 gint len = 0;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
163
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
164 while (*x) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
165 gchar *pos;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
166
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
167 if (!t->values)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
168 return;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
169
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
170 pos = strchr (t->values->str, *x);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
171 if (pos)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
172 t = t->children [(int) pos - (int) t->values->str];
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
173 else
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
174 return;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
175
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
176 x++; len++;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
177 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
178
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
179 if (t->image)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
180 t->image = NULL;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
181 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
182
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
183 static gint
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
184 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
185 const gchar *text)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
186 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
187 GtkSmileyTree *t = tree;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
188 const gchar *x = text;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
189 gint len = 0;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
190
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
191 while (*x) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
192 gchar *pos;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
193
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
194 if (!t->values)
3460
66c7cca774f5 [gaim-migrate @ 3508]
Sean Egan <seanegan@gmail.com>
parents: 3396
diff changeset
195 break;
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
196
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
197 pos = strchr (t->values->str, *x);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
198 if (pos)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
199 t = t->children [(int) pos - (int) t->values->str];
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
200 else
3460
66c7cca774f5 [gaim-migrate @ 3508]
Sean Egan <seanegan@gmail.com>
parents: 3396
diff changeset
201 break;
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
202
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
203 x++; len++;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
204 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
205
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
206 if (t->image)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
207 return len;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
208
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
209 return 0;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
210 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
211
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
212 static gchar**
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
213 gtk_smiley_tree_image (GtkSmileyTree *tree,
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
214 const gchar *text)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
215 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
216 GtkSmileyTree *t = tree;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
217 const gchar *x = text;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
218
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
219 while (*x) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
220 gchar *pos;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
221
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
222 if (!t->values)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
223 return NULL;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
224
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
225 pos = strchr (t->values->str, *x);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
226 if (pos) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
227 t = t->children [(int) pos - (int) t->values->str];
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
228 } else
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
229 return NULL;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
230
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
231 x++;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
232 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
233
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
234 return t->image;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
235 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
236
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
237 static void
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
238 gtk_smiley_tree_destroy (GtkSmileyTree *tree)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
239 {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
240 GSList *list = g_slist_append (NULL, tree);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
241
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
242 while (list) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
243 GtkSmileyTree *t = list->data;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
244 gint i;
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
245 list = g_slist_remove(list, t);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
246 if (t->values) {
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
247 for (i = 0; i < t->values->len; i++)
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
248 list = g_slist_append (list, t->children [i]);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
249 g_string_free (t->values, TRUE);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
250 g_free (t->children);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
251 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
252 g_free (t);
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
253 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
254 }
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
255
2728
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
256 void
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
257 gtk_imhtml_remove_smileys (GtkIMHtml *imhtml)
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
258 {
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
259 g_return_if_fail (imhtml != NULL);
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
260 g_return_if_fail (GTK_IS_IMHTML (imhtml));
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
261
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
262 gtk_smiley_tree_destroy (imhtml->smiley_data);
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
263 imhtml->smiley_data = gtk_smiley_tree_new ();
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
264 }
16df889d81e2 [gaim-migrate @ 2741]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2714
diff changeset
265
3050
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
266 void
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
267 gtk_imhtml_reset_smileys (GtkIMHtml *imhtml)
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
268 {
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
269 gtk_imhtml_remove_smileys(imhtml);
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
270 gtk_imhtml_init_smileys (imhtml);
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
271 }
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
272
200b8133616a [gaim-migrate @ 3063]
Rob Flynn <gaim@robflynn.com>
parents: 3010
diff changeset
273
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
274 struct im_image {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
275 gchar *filename;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
276
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
277 gint len;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
278 gpointer data;
2994
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
279
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
280 gint x,y;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
281 gint width,height;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
282 GtkIMHtml *imhtml;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
283 GtkIMHtmlBit *bit;
2994
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
284 GdkPixbuf *pb;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
285 };
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
286
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287 struct _GtkIMHtmlBit {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
288 gint type;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
289
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
290 gchar *text;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
291 struct im_image *img;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
292 GdkPixmap *pm;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
293 GdkBitmap *bm;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
294
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
295 PangoFontDescription *font;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
296 GdkColor *fore;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
297 GdkColor *back;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
298 GdkColor *bg;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
299 gboolean underline;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
300 gboolean strike;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
301 gchar *url;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
302
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
303 GList *chunks;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
304 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
305
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
306 struct _FontDetail {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
307 gushort size;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
308 gchar *face;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
309 GdkColor *fore;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
310 GdkColor *back;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
311 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
312
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
313 struct line_info {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
314 gint x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
315 gint y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
316 gint width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
317 gint height;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
318 gint ascent;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
319
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
320 gboolean selected;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
321 gchar *sel_start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
322 gchar *sel_end;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
323
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
324 gchar *text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
325 GtkIMHtmlBit *bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
326 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
327
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
328 struct clickable {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
329 gint x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
330 gint y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
331 gint width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
332 gint height;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
333 GtkIMHtml *imhtml;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
334 GtkIMHtmlBit *bit;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
335 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
336
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
337 static GtkLayoutClass *parent_class = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
338
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
339 enum {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
340 TARGET_STRING,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
341 TARGET_TEXT,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
342 TARGET_COMPOUND_TEXT
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
343 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
344
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
345 enum {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
346 URL_CLICKED,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
347 LAST_SIGNAL
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
348 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
349 static guint signals [LAST_SIGNAL] = { 0 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
350
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
351 static void gtk_imhtml_draw_bit (GtkIMHtml *, GtkIMHtmlBit *);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
352 static GdkColor *gtk_imhtml_get_color (const gchar *);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
353 static gint gtk_imhtml_motion_notify_event (GtkWidget *, GdkEventMotion *);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
354
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
355 static void
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
356 gtk_imhtml_finalize (GObject *object)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
357 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
358 GtkIMHtml *imhtml;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
359
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
360 imhtml = GTK_IMHTML (object);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
361
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
362 gtk_imhtml_clear (imhtml);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
363
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
364 if (imhtml->selected_text)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
365 g_string_free (imhtml->selected_text, TRUE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
366
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
367 if (imhtml->default_font)
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
368 pango_font_description_free (imhtml->default_font);
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
369 if (imhtml->default_fg_color)
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
370 gdk_color_free (imhtml->default_fg_color);
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
371 if (imhtml->default_bg_color)
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
372 gdk_color_free (imhtml->default_bg_color);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
373 if (imhtml->default_hl_color)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
374 gdk_color_free (imhtml->default_hl_color);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
375 if (imhtml->default_hlfg_color)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
376 gdk_color_free (imhtml->default_hlfg_color);
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
377
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
378 gdk_cursor_destroy (imhtml->hand_cursor);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
379 gdk_cursor_destroy (imhtml->arrow_cursor);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
380
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
381 gtk_smiley_tree_destroy (imhtml->smiley_data);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
382
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
383 G_OBJECT_CLASS (parent_class)->finalize (object);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
384 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
385
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
386 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
387 gtk_imhtml_realize (GtkWidget *widget)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
388 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
389 GtkIMHtml *imhtml;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
390 GdkWindowAttr attributes;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
391 gint attributes_mask;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
392
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
393 g_return_if_fail (widget != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
394 g_return_if_fail (GTK_IS_IMHTML (widget));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
395
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
396 imhtml = GTK_IMHTML (widget);
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
397 GTK_WIDGET_SET_FLAGS (imhtml, GTK_REALIZED);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
398
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
399 attributes.window_type = GDK_WINDOW_CHILD;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
400 attributes.x = widget->allocation.x;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
401 attributes.y = widget->allocation.y;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
402 attributes.width = widget->allocation.width;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
403 attributes.height = widget->allocation.height;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
404 attributes.wclass = GDK_INPUT_OUTPUT;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
405 attributes.visual = gtk_widget_get_visual (widget);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
406 attributes.colormap = gtk_widget_get_colormap (widget);
2556
e284ab2882bd [gaim-migrate @ 2569]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2541
diff changeset
407 attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
408
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
409 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
410
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
411 widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
412 &attributes, attributes_mask);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
413 gdk_window_set_user_data (widget->window, widget);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
414
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
415 attributes.x = widget->style->xthickness + BORDER_SIZE;
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
416 attributes.y = widget->style->xthickness + BORDER_SIZE;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
417 attributes.width = MAX (1, (gint) widget->allocation.width - (gint) attributes.x * 2);
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
418 attributes.height = MAX (1, (gint) widget->allocation.height - (gint) attributes.y * 2);
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
419 attributes.event_mask = gtk_widget_get_events (widget)
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
420 | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
421 | GDK_POINTER_MOTION_MASK | GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
422
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
423 GTK_LAYOUT (imhtml)->bin_window = gdk_window_new (widget->window,
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
424 &attributes, attributes_mask);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
425 gdk_window_set_user_data (GTK_LAYOUT (imhtml)->bin_window, widget);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
426
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
427 widget->style = gtk_style_attach (widget->style, widget->window);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
429 gdk_window_set_cursor (widget->window, imhtml->arrow_cursor);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
430
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
431 imhtml->context = gtk_widget_get_pango_context(widget);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
432 imhtml->default_font = pango_font_description_copy(pango_context_get_font_description(imhtml->context));
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
433
3469
15089f9d3431 [gaim-migrate @ 3519]
Sean Egan <seanegan@gmail.com>
parents: 3468
diff changeset
434 gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]);
15089f9d3431 [gaim-migrate @ 3519]
Sean Egan <seanegan@gmail.com>
parents: 3468
diff changeset
435 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window,
15089f9d3431 [gaim-migrate @ 3519]
Sean Egan <seanegan@gmail.com>
parents: 3468
diff changeset
436 &widget->style->base [GTK_STATE_NORMAL]);
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
437
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
438 imhtml->default_fg_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->fg [GTK_STATE_NORMAL]);
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
439 imhtml->default_bg_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->base [GTK_STATE_NORMAL]);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
440 imhtml->default_hl_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->bg [GTK_STATE_SELECTED]);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
441 imhtml->default_hlfg_color=gdk_color_copy (&GTK_WIDGET (imhtml)->style->fg [GTK_STATE_SELECTED]);
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2365
diff changeset
442
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
443 gdk_window_show (GTK_LAYOUT (imhtml)->bin_window);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
444 }
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
445
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
446 static gboolean
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
447 similar_colors (GdkColor *bg,
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
448 GdkColor *fg)
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
449 {
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
450 if ((DIFF (bg->red, fg->red) < COLOR_DIFF) &&
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
451 (DIFF (bg->green, fg->green) < COLOR_DIFF) &&
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
452 (DIFF (bg->blue, fg->blue) < COLOR_DIFF)) {
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
453 fg->red = (0xff00 - COLOR_MOD > bg->red) ?
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
454 bg->red + COLOR_MOD : bg->red - COLOR_MOD;
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
455 fg->green = (0xff00 - COLOR_MOD > bg->green) ?
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
456 bg->green + COLOR_MOD : bg->green - COLOR_MOD;
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
457 fg->blue = (0xff00 - COLOR_MOD > bg->blue) ?
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
458 bg->blue + COLOR_MOD : bg->blue - COLOR_MOD;
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
459 return TRUE;
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
460 }
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
461 return FALSE;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
462 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
463
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
464 /* This is an expensive function! Don't blame me. I only stole it from eel */
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
465 static gint
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
466 text_width(PangoContext *context, PangoFontDescription *desc,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
467 const char *text, gint len)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
468 {
3614
2043eca1b412 [gaim-migrate @ 3728]
Sean Egan <seanegan@gmail.com>
parents: 3608
diff changeset
469 static PangoLayout *layout = NULL;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
470 int width;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
471
3614
2043eca1b412 [gaim-migrate @ 3728]
Sean Egan <seanegan@gmail.com>
parents: 3608
diff changeset
472 if (layout == NULL)
2043eca1b412 [gaim-migrate @ 3728]
Sean Egan <seanegan@gmail.com>
parents: 3608
diff changeset
473 layout = pango_layout_new(context);
2043eca1b412 [gaim-migrate @ 3728]
Sean Egan <seanegan@gmail.com>
parents: 3608
diff changeset
474
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
475 pango_layout_set_font_description(layout, desc);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
476 pango_layout_set_text(layout, text, len);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
477 pango_layout_get_pixel_size(layout, &width, NULL);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
478
3614
2043eca1b412 [gaim-migrate @ 3728]
Sean Egan <seanegan@gmail.com>
parents: 3608
diff changeset
479 /* g_object_unref(G_OBJECT(layout)); */
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
480
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
481 return width;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
482 }
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
483
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
484 static gint
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
485 string_width(PangoContext *context, PangoFontDescription *desc,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
486 const char *text)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
487 {
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
488 return text_width(context, desc, text, -1);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
489 }
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
490
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
491 static void
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
492 set_layout_font(PangoLayout *layout, const char *text, guint len,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
493 PangoFontDescription *desc)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
494 {
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
495 PangoAttribute *attr;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
496 PangoAttrList *list;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
497
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
498 if (len == -1)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
499 len = strlen(text);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
500
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
501 attr = pango_attr_font_desc_new(desc);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
502
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
503 attr->start_index = 0;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
504 attr->end_index = len;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
505
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
506 list = pango_attr_list_new();
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
507 pango_attr_list_insert(list, attr);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
508
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
509 pango_layout_set_attributes(layout, list);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
510 pango_attr_list_unref(list);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
511
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
512 pango_layout_set_indent(layout, 0);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
513 pango_layout_set_justify(layout, FALSE);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
514 pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
515 }
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
516
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
517 static gint
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
518 get_layout_first_baseline(PangoLayout* layout)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
519 {
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
520 PangoLayoutIter* iter = pango_layout_get_iter(layout);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
521 gint result = pango_layout_iter_get_baseline(iter) / PANGO_SCALE;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
522 pango_layout_iter_free(iter);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
523 return result;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
524 }
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
525
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
526 static void
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
527 draw_text (GtkIMHtml *imhtml,
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
528 struct line_info *line)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
529 {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
530 GtkIMHtmlBit *bit;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
531 GdkGC *gc;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
532 GdkColormap *cmap;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
533 GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
534 gfloat xoff, yoff;
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
535 GdkColor *bg, *fg;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
536 PangoLayout *layout;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
537 PangoFontMetrics *metrics;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
538 gchar *start = NULL, *end = NULL;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
539
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
540 if (GTK_LAYOUT (imhtml)->freeze_count)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
541 return;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
542
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
543 bit = line->bit;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
544 gc = gdk_gc_new (window);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
545 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml));
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
546 xoff = GTK_LAYOUT (imhtml)->hadjustment->value;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
547 yoff = GTK_LAYOUT (imhtml)->vadjustment->value;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
548
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
549 if (bit->bg != NULL) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
550 gdk_color_alloc (cmap, bit->bg);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
551 gdk_gc_set_foreground (gc, bit->bg);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
552 bg = bit->bg;
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
553 } else {
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
554 gdk_color_alloc (cmap, imhtml->default_bg_color);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
555 gdk_gc_set_foreground (gc, imhtml->default_bg_color);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
556 bg = imhtml->default_bg_color;
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
557 }
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
558
2338
2bf8a8131479 [gaim-migrate @ 2351]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2337
diff changeset
559 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff,
2bf8a8131479 [gaim-migrate @ 2351]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2337
diff changeset
560 line->width ? line->width : imhtml->xsize, line->height);
3469
15089f9d3431 [gaim-migrate @ 3519]
Sean Egan <seanegan@gmail.com>
parents: 3468
diff changeset
561
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
562 if (!line->text) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
563 gdk_gc_unref (gc);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
564 return;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
565 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
566
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
567 if (bit->back != NULL) {
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
568 gdk_color_alloc (cmap, bit->back);
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
569 gdk_gc_set_foreground (gc, bit->back);
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
570 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
571 string_width (imhtml->context, bit->font, line->text), line->height);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
572 bg = bit->back;
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
573 }
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
574
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
575 bg = gdk_color_copy (bg);
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
576
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
577 if (line->selected) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
578 gint width, x;
2998
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
579
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
580 if ((line->sel_start > line->sel_end) && (line->sel_end != NULL)) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
581 start = line->sel_end;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
582 end = line->sel_start;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
583 } else {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
584 start = line->sel_start;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
585 end = line->sel_end;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
586 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
587
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
588 if (start == NULL)
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
589 x = 0;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
590 else
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
591 x = text_width (imhtml->context, bit->font, line->text, start - line->text);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
592
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
593 if (end == NULL)
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
594 end = strchr(line->text, '\0');
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
595
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
596 width = text_width (imhtml->context, bit->font, line->text, end - line->text) - x;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
597
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
598 gdk_gc_set_foreground (gc, imhtml->default_hl_color);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
599
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
600 gdk_draw_rectangle (window, gc, TRUE, x + line->x - xoff, line->y - yoff,
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
601 width, line->height);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
602 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
603 fg = gdk_color_copy(imhtml->default_hlfg_color);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
604 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
605 if (bit->url) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
606 GdkColor *tc = gtk_imhtml_get_color ("#0000a0");
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
607 gdk_color_alloc (cmap, tc);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
608 gdk_gc_set_foreground (gc, tc);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
609 fg = gdk_color_copy (tc);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
610 gdk_color_free (tc);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
611 } else if (bit->fore) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
612 gdk_color_alloc (cmap, bit->fore);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
613 gdk_gc_set_foreground (gc, bit->fore);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
614 fg = gdk_color_copy (bit->fore);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
615 } else {
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
616 gdk_color_alloc (cmap, imhtml->default_fg_color);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
617 gdk_gc_set_foreground (gc, imhtml->default_fg_color);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
618 fg = gdk_color_copy (imhtml->default_fg_color);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
619 }
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
620
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
621 if (similar_colors (bg, fg)) {
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
622 gdk_color_alloc (cmap, fg);
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
623 gdk_gc_set_foreground (gc, fg);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
624 }
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
625
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
626 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
627
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
628 if (start) {
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
629 int offset = 0;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
630
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
631 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), NULL);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
632 pango_layout_set_text(layout, line->text, start - line->text);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
633 set_layout_font(layout, line->text, start - line->text, bit->font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
634 gdk_draw_layout(window, gc, line->x - xoff,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
635 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
636 get_layout_first_baseline(layout), layout);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
637 g_object_unref(G_OBJECT(layout));
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
638
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
639 offset = text_width (imhtml->context, bit->font, line->text, start - line->text);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
640 if (bit->underline || bit->url)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
641 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff,
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
642 line->y - yoff + line->ascent + 1,
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
643 offset, 1);
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
644 if (bit->strike)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
645 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
646 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
647 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2),
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
648 offset, 1);
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
649 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color);
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
650
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
651 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), NULL);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
652 pango_layout_set_text(layout, start, end - start);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
653 set_layout_font(layout, start, end - start, bit->font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
654 gdk_draw_layout(window, gc, line->x - xoff + offset,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
655 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
656 get_layout_first_baseline(layout), layout);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
657 g_object_unref(G_OBJECT(layout));
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
658
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
659 if (bit->underline || bit->url)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
660 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset,
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
661 line->y - yoff + line->ascent + 1,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
662 text_width (imhtml->context, bit->font, line->text, end - start), 1);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
663 if (bit->strike)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
664 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
665 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
666 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2),
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
667 text_width (imhtml->context, bit->font, line->text, end - start), 1);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
668 offset = text_width (imhtml->context, bit->font, line->text, end - line->text);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
669 gdk_gc_set_foreground (gc, fg);
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
670
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
671 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), end);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
672 set_layout_font(layout, end, -1, bit->font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
673 gdk_draw_layout(window, gc, line->x - xoff + offset,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
674 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
675 get_layout_first_baseline(layout), layout);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
676
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
677 g_object_unref(G_OBJECT(layout));
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
678
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
679 if (bit->underline || bit->url)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
680 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset,
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
681 line->y - yoff + line->ascent + 1,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
682 string_width (imhtml->context, bit->font, end), 1);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
683 if (bit->strike)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
684 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
685 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
686 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2),
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
687 string_width (imhtml->context, bit->font, end), 1);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
688 } else {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
689 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), line->text);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
690 set_layout_font(layout, line->text, -1, bit->font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
691 gdk_draw_layout(window, gc, line->x - xoff,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
692 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
693 get_layout_first_baseline(layout), layout);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
694 g_object_unref(G_OBJECT(layout));
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
695
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
696 if (bit->underline || bit->url)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
697 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff + line->ascent + 1,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
698 string_width (imhtml->context, bit->font, line->text), 1);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
699 if (bit->strike)
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
700 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
701 line->y - yoff + line->ascent -
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
702 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2),
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
703 string_width (imhtml->context, bit->font, line->text), 1);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
704 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
705
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
706 pango_font_metrics_unref(metrics);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
707
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
708 gdk_color_free (bg);
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
709 gdk_color_free (fg);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
710
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
711 gdk_gc_unref (gc);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
712 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
713
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
714 static void
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
715 draw_img (GtkIMHtml *imhtml,
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
716 struct line_info *line)
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
717 {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
718 GtkIMHtmlBit *bit;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
719 GdkGC *gc;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
720 GdkColormap *cmap;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
721 gint width, height, hoff;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
722 GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
723 gfloat xoff, yoff;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
724
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
725 if (GTK_LAYOUT (imhtml)->freeze_count)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
726 return;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
727
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
728 bit = line->bit;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
729 gdk_window_get_size (bit->pm, &width, &height);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
730 hoff = (line->height - height) / 2;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
731 xoff = GTK_LAYOUT (imhtml)->hadjustment->value;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
732 yoff = GTK_LAYOUT (imhtml)->vadjustment->value;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
733 gc = gdk_gc_new (window);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
734 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml));
2998
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
735
3000
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
736 if (bit->bg != NULL) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
737 gdk_color_alloc (cmap, bit->bg);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
738 gdk_gc_set_foreground (gc, bit->bg);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
739 } else {
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
740 gdk_color_alloc (cmap, imhtml->default_bg_color);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
741 gdk_gc_set_foreground (gc, imhtml->default_bg_color);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
742 }
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
743
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
744 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, line->width, line->height);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
745
3000
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
746 if (line->selected) {
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
747 gdk_color_alloc (cmap, imhtml->default_hl_color);
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
748 gdk_gc_set_foreground(gc, imhtml->default_hl_color);
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
749 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff,
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
750 width, line->height);
6d95285533df [gaim-migrate @ 3013]
Sean Egan <seanegan@gmail.com>
parents: 2998
diff changeset
751 } else if (bit->back != NULL) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
752 gdk_color_alloc (cmap, bit->back);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
753 gdk_gc_set_foreground (gc, bit->back);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
754 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
755
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
756 if (bit->bm) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
757 gdk_gc_set_clip_mask(gc, bit->bm);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
758 gdk_gc_set_clip_origin(gc, line->x - xoff, line->y - yoff + hoff);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
759 }
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
760 gdk_draw_pixmap (window, gc, bit->pm, 0, 0, line->x - xoff, line->y - yoff + hoff, -1, -1);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
761
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
762 gdk_gc_unref (gc);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
763 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
764
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
765 static void
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
766 draw_line (GtkIMHtml *imhtml,
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
767 struct line_info *line)
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
768 {
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
769 GtkIMHtmlBit *bit;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
770 GdkDrawable *drawable;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
771 GdkColormap *cmap;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
772 GdkGC *gc;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
773 guint line_height;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
774 gfloat xoff, yoff;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
775
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
776 if (GTK_LAYOUT (imhtml)->freeze_count)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
777 return;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
778
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
779 xoff = GTK_LAYOUT (imhtml)->hadjustment->value;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
780 yoff = GTK_LAYOUT (imhtml)->vadjustment->value;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
781 bit = line->bit;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
782 drawable = GTK_LAYOUT (imhtml)->bin_window;
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
783 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml));
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
784 gc = gdk_gc_new (drawable);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
785
2998
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
786 if (line->selected) {
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
787 gdk_color_alloc (cmap, imhtml->default_hl_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
788 gdk_gc_set_foreground (gc, imhtml->default_hl_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
789 } else if (bit->bg != NULL) {
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
790 gdk_color_alloc (cmap, bit->bg);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
791 gdk_gc_set_foreground (gc, bit->bg);
2998
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
792 } else {
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
793 gdk_color_alloc (cmap, imhtml->default_bg_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
794 gdk_gc_set_foreground (gc, imhtml->default_bg_color);
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
795 }
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
796
2998
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
797 gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff,
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
798 line->width, line->height);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
799
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
800
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
801 if (line->selected) {
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
802 gdk_color_alloc (cmap, imhtml->default_hlfg_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
803 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
804 } else {
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
805 gdk_color_alloc (cmap, imhtml->default_fg_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
806 gdk_gc_set_foreground (gc, imhtml->default_fg_color);
6fe330f1b951 [gaim-migrate @ 3011]
Sean Egan <seanegan@gmail.com>
parents: 2994
diff changeset
807 }
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
808
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
809 line_height = line->height / 2;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
810
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
811 gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff + line_height / 2,
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
812 line->width, line_height);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
813
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
814 gdk_gc_unref (gc);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
815 }
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
816
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
817 static void
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
818 gtk_imhtml_draw_focus (GtkWidget *widget)
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
819 {
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
820 GtkIMHtml *imhtml;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
821 gint x = 0,
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
822 y = 0,
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
823 w = 0,
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
824 h = 0;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
825
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
826 imhtml = GTK_IMHTML (widget);
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
827
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
828 if (!GTK_WIDGET_DRAWABLE (widget))
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
829 return;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
830
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
831 if (GTK_WIDGET_HAS_FOCUS (widget)) {
3071
55fa49dc545e [gaim-migrate @ 3085]
Sean Egan <seanegan@gmail.com>
parents: 3050
diff changeset
832 gtk_paint_focus (widget->style, widget->window, GTK_STATE_NORMAL, NULL, widget, "text",
55fa49dc545e [gaim-migrate @ 3085]
Sean Egan <seanegan@gmail.com>
parents: 3050
diff changeset
833 0, 0, widget->allocation.width - 1, widget->allocation.height - 1);
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
834 x = 1; y = 1; w = 2; h = 2;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
835 }
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
836
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
837 gtk_paint_shadow (widget->style, widget->window, GTK_STATE_NORMAL,
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
838 GTK_SHADOW_IN, NULL, widget, "text", x, y,
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
839 widget->allocation.width - w, widget->allocation.height - h);
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
840 }
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
841
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
842 static void
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
843 gtk_imhtml_draw_exposed (GtkIMHtml *imhtml)
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
844 {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
845 GList *bits;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
846 GtkIMHtmlBit *bit;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
847 GList *chunks;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
848 struct line_info *line;
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
849 gfloat x, y;
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
850 guint32 width, height;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
851
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
852 x = GTK_LAYOUT (imhtml)->hadjustment->value;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
853 y = GTK_LAYOUT (imhtml)->vadjustment->value;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
854 gdk_window_get_size (GTK_LAYOUT (imhtml)->bin_window, &width, &height);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
855
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
856 bits = imhtml->bits;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
857
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
858 while (bits) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
859 bit = bits->data;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
860 chunks = bit->chunks;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
861 if (DRAW_IMG (bit)) {
1461
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
862 if (chunks) {
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
863 line = chunks->data;
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
864 if ((line->x <= x + width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
865 (line->y <= y + height) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
866 (x <= line->x + line->width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
867 (y <= line->y + line->height))
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
868 draw_img (imhtml, line);
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
869 }
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
870 } else if (bit->type == TYPE_SEP) {
1461
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
871 if (chunks) {
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
872 line = chunks->data;
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
873 if ((line->x <= x + width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
874 (line->y <= y + height) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
875 (x <= line->x + line->width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
876 (y <= line->y + line->height))
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
877 draw_line (imhtml, line);
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
878
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
879 line = chunks->next->data;
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
880 if ((line->x <= x + width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
881 (line->y <= y + height) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
882 (x <= line->x + line->width) &&
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
883 (y <= line->y + line->height))
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
884 draw_text (imhtml, line);
9774a0a304c4 [gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1460
diff changeset
885 }
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
886 } else {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
887 while (chunks) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
888 line = chunks->data;
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
889 if ((line->x <= x + width) &&
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
890 (line->y <= y + height) &&
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
891 (x <= line->x + line->width) &&
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
892 (y <= line->y + line->height))
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
893 draw_text (imhtml, line);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
894 chunks = g_list_next (chunks);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
895 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
896 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
897 bits = g_list_next (bits);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
898 }
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
899
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
900 gtk_imhtml_draw_focus (GTK_WIDGET (imhtml));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
901 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
902
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
903 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
904 gtk_imhtml_style_set (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
905 GtkStyle *style)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
906 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
907 GtkIMHtml *imhtml;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
908
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
909 g_return_if_fail (widget != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
910 g_return_if_fail (GTK_IS_IMHTML (widget));
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
911
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
912 if (GTK_WIDGET_CLASS (parent_class)->style_set)
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
913 (* GTK_WIDGET_CLASS (parent_class)->style_set) (widget, style);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
914
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
915 if (!GTK_WIDGET_REALIZED (widget))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
916 return;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
917
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
918 imhtml = GTK_IMHTML (widget);
2994
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
919 if (imhtml->default_fg_color)
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
920 gdk_color_free(imhtml->default_fg_color);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
921 if (imhtml->default_bg_color)
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
922 gdk_color_free(imhtml->default_bg_color);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
923 if (imhtml->default_hl_color)
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
924 gdk_color_free(imhtml->default_hl_color);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
925 if (imhtml->default_hlfg_color)
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
926 gdk_color_free(imhtml->default_hlfg_color);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
927 imhtml->default_fg_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->fg [GTK_STATE_NORMAL]);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
928 imhtml->default_bg_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->base [GTK_STATE_NORMAL]);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
929 imhtml->default_hl_color = gdk_color_copy (&GTK_WIDGET (imhtml)->style->bg [GTK_STATE_SELECTED]);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
930 imhtml->default_hlfg_color=gdk_color_copy (&GTK_WIDGET (imhtml)->style->fg [GTK_STATE_SELECTED]);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
931 gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]);
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
932 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window,
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
933 &widget->style->base [GTK_STATE_NORMAL]);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
934 gtk_imhtml_draw_exposed (imhtml);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
935 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
936
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
937 static gint
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
938 gtk_imhtml_expose_event (GtkWidget *widget,
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
939 GdkEventExpose *event)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
940 {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
941 GtkIMHtml *imhtml;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
942
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
943 g_return_val_if_fail (widget != NULL, FALSE);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
944 g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
945
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
946 imhtml = GTK_IMHTML (widget);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
947 gtk_imhtml_draw_exposed (imhtml);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
948
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
949 return FALSE;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
950 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
951
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
952 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
953 gtk_imhtml_redraw_all (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
954 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
955 GList *b;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
956 GtkIMHtmlBit *bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
957 GtkAdjustment *vadj;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
958 gfloat oldvalue;
1527
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
959 gint oldy;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
960
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
961 vadj = GTK_LAYOUT (imhtml)->vadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
962 oldvalue = vadj->value / vadj->upper;
1527
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
963 oldy = imhtml->y;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
964
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
965 gtk_layout_freeze (GTK_LAYOUT (imhtml));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
966
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
967 g_list_free (imhtml->line);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
968 imhtml->line = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
969
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
970 while (imhtml->click) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
971 g_free (imhtml->click->data);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
972 imhtml->click = g_list_remove (imhtml->click, imhtml->click->data);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
973 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
974
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
975 imhtml->x = 0;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
976 imhtml->y = TOP_BORDER;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
977 imhtml->llheight = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
978 imhtml->llascent = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
979
2809
c479d54abc0a [gaim-migrate @ 2822]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2779
diff changeset
980 if (GTK_LAYOUT (imhtml)->vadjustment->value < TOP_BORDER)
2002
7c2457745344 [gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1998
diff changeset
981 gdk_window_clear_area (GTK_LAYOUT (imhtml)->bin_window, 0, 0,
2809
c479d54abc0a [gaim-migrate @ 2822]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2779
diff changeset
982 imhtml->xsize,
c479d54abc0a [gaim-migrate @ 2822]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2779
diff changeset
983 TOP_BORDER - GTK_LAYOUT (imhtml)->vadjustment->value);
2002
7c2457745344 [gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1998
diff changeset
984
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
985 b = imhtml->bits;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
986 while (b) {
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
987 bit = b->data;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
988 b = g_list_next (b);
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
989 while (bit->chunks) {
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
990 struct line_info *li = bit->chunks->data;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
991 if (li->text)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
992 g_free (li->text);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
993 bit->chunks = g_list_remove (bit->chunks, li);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
994 g_free (li);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
995 }
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
996 gtk_imhtml_draw_bit (imhtml, bit);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
997 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
998
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
999 GTK_LAYOUT (imhtml)->height = imhtml->y;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1000 GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1001 gtk_signal_emit_by_name (GTK_OBJECT (GTK_LAYOUT (imhtml)->vadjustment), "changed");
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1002
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1003 gtk_widget_set_usize (GTK_WIDGET (imhtml), -1, imhtml->y);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1004 gtk_adjustment_set_value (vadj, vadj->upper * oldvalue);
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1005
1527
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1006 if (GTK_LAYOUT (imhtml)->bin_window && (imhtml->y < oldy)) {
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1007 GdkGC *gc;
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1008 GdkColormap *cmap;
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1009
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1010 gc = gdk_gc_new (GTK_LAYOUT (imhtml)->bin_window);
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1011 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml));
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1012
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1013 gdk_color_alloc (cmap, imhtml->default_bg_color);
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1014 gdk_gc_set_foreground (gc, imhtml->default_bg_color);
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1015
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1016 gdk_draw_rectangle (GTK_LAYOUT (imhtml)->bin_window, gc, TRUE,
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1017 0, imhtml->y - GTK_LAYOUT (imhtml)->vadjustment->value,
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1018 GTK_WIDGET (imhtml)->allocation.width,
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1019 oldy - imhtml->y);
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1020
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1021 gdk_gc_unref (gc);
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1022 }
11977dd0fd29 [gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1524
diff changeset
1023
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1024 gtk_layout_thaw (GTK_LAYOUT (imhtml));
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1025 gtk_imhtml_draw_focus (GTK_WIDGET (imhtml));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1026 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1027
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1028 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1029 gtk_imhtml_size_allocate (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1030 GtkAllocation *allocation)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1031 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1032 GtkIMHtml *imhtml;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1033 GtkLayout *layout;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1034 gint new_xsize, new_ysize;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1035
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1036 g_return_if_fail (widget != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1037 g_return_if_fail (GTK_IS_IMHTML (widget));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1038 g_return_if_fail (allocation != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1039
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1040 imhtml = GTK_IMHTML (widget);
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1041 layout = GTK_LAYOUT (widget);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1042
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1043 widget->allocation = *allocation;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1044
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1045 new_xsize = MAX (1, (gint) allocation->width -
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1046 (gint) (widget->style->xthickness + BORDER_SIZE) * 2);
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1047 new_ysize = MAX (1, (gint) allocation->height -
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1048 (gint) (widget->style->ythickness + BORDER_SIZE) * 2);
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1049
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1050 if (GTK_WIDGET_REALIZED (widget)) {
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1051 gint x = widget->style->xthickness + BORDER_SIZE;
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1052 gint y = widget->style->ythickness + BORDER_SIZE;
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1053 gdk_window_move_resize (widget->window,
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1054 allocation->x, allocation->y,
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1055 allocation->width, allocation->height);
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1056 gdk_window_move_resize (layout->bin_window,
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1057 x, y, new_xsize, new_ysize);
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
1058 }
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1059
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1060 layout->hadjustment->page_size = new_xsize;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1061 layout->hadjustment->page_increment = new_xsize / 2;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1062 layout->hadjustment->lower = 0;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1063 layout->hadjustment->upper = imhtml->x;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1064
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1065 layout->vadjustment->page_size = new_ysize;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1066 layout->vadjustment->page_increment = new_ysize / 2;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1067 layout->vadjustment->lower = 0;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1068 layout->vadjustment->upper = imhtml->y;
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1069
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1070 gtk_signal_emit_by_name (GTK_OBJECT (layout->hadjustment), "changed");
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1071 gtk_signal_emit_by_name (GTK_OBJECT (layout->vadjustment), "changed");
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1072
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1073 if (new_xsize == imhtml->xsize) {
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1074 if ((GTK_LAYOUT (imhtml)->vadjustment->value > imhtml->y - new_ysize)) {
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1075 if (imhtml->y > new_ysize)
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
1076 gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment,
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1077 imhtml->y - new_ysize);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
1078 else
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
1079 gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment, 0);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
1080 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1081 return;
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
1082 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1083
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1084 imhtml->xsize = new_xsize;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1085
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1086 if (GTK_WIDGET_REALIZED (widget))
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1087 gtk_imhtml_redraw_all (imhtml);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1088 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1089
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1090 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1091 gtk_imhtml_select_none (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1092 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1093 GList *bits;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1094 GList *chunks;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1095 GtkIMHtmlBit *bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1096 struct line_info *chunk;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1097
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1098 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1099
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1100 bits = imhtml->bits;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1101 while (bits) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1102 bit = bits->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1103 chunks = bit->chunks;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1104
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1105 while (chunks) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1106 chunk = chunks->data;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1107
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1108 if (chunk->selected) {
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1109 chunk->selected = FALSE;
1449
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
1110 chunk->sel_start = chunk->text;
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
1111 chunk->sel_end = NULL;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1112 if (DRAW_IMG (bit))
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1113 draw_img (imhtml, chunk);
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
1114 else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk))
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
1115 draw_line (imhtml, chunk);
2348
dd5f18429dd9 [gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2338
diff changeset
1116 else if (chunk->width)
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1117 draw_text (imhtml, chunk);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1118 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1119
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1120 chunks = g_list_next (chunks);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1121 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1122
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1123 bits = g_list_next (bits);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1124 }
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1125 imhtml->sel_endchunk = NULL;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1126 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1127
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1128 static gchar*
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1129 get_position (GtkIMHtml *imhtml,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1130 struct line_info *chunk,
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1131 gint x,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1132 gboolean smileys)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1133 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1134 gint width = x - chunk->x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1135 gchar *text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1136 gchar *pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1137 guint total = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1138
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1139 switch (chunk->bit->type) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1140 case TYPE_TEXT:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1141 case TYPE_COMMENT:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1142 text = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1143 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1144 case TYPE_SMILEY:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1145 if (smileys)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1146 return NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1147 else
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1148 text = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1149 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1150 default:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1151 return NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1152 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1153 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1154
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1155 if (width <= 0)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1156 return text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1157
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1158 for (pos = text; *pos != '\0'; pos++) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1159 gint char_width = text_width (imhtml->context, chunk->bit->font, pos, 1);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1160 if ((width > total) && (width <= total + char_width)) {
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
1161 if (width < total + (char_width / 2))
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1162 return pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1163 else
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1164 return ++pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1165 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1166 total += char_width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1167 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1168
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1169 return pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1170 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1171
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1172 static GString*
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1173 append_to_sel (GString *string,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1174 struct line_info *chunk,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1175 gboolean smileys)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1176 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1177 GString *new_string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1178 gchar *buf;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1179 gchar *start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1180 gint length;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1181
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1182 switch (chunk->bit->type) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1183 case TYPE_TEXT:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1184 case TYPE_COMMENT:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1185 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1186 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1187 if (length <= 0)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1188 return string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1189 buf = g_strndup (start, length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1190 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1191 case TYPE_SMILEY:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1192 if (smileys) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1193 start = (chunk->sel_start == NULL) ? chunk->bit->text : chunk->sel_start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1194 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1195 if (length <= 0)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1196 return string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1197 buf = g_strndup (start, length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1198 } else {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1199 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1200 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1201 if (length <= 0)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1202 return string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1203 buf = g_strndup (start, length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1204 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1205 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1206 case TYPE_BR:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1207 buf = g_strdup ("\n");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1208 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1209 default:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1210 return string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1211 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1212 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1213
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1214 new_string = g_string_append (string, buf);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1215 g_free (buf);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1216
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1217 return new_string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1218 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1219
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1220 static void
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1221 chunk_select_words (struct line_info *chunk)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1222 {
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1223 char *start, *end;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1224
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1225 start = chunk->sel_start;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1226 end = chunk->sel_end;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1227
3208
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1228 if (start != chunk->text) {
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1229 if (isalnum(*start) || *start == '\'')
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1230 while (start > chunk->text &&
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1231 (isalnum(*(start-1)) || *(start-1) == '\''))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1232 start--;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1233 else if (isspace(*start))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1234 while (start > chunk->text && isspace(*(start-1)))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1235 start--;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1236 else if (ispunct(*start))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1237 while (start > chunk->text && ispunct(*(start-1)))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1238 start--;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1239 }
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1240 chunk->sel_start = start;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1241
3208
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1242 if (end != NULL) {
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1243 if (isalnum(*end) || *end == '\'')
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1244 while (*end != '\0' &&
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1245 (isalnum(*end) || *end == '\''))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1246 end++;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1247 else if (isspace(*end))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1248 while (*end != '\0' && isspace(*end))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1249 end++;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1250 else if (ispunct(*end))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1251 while (*end != '\0' && ispunct(*end))
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1252 end++;
2215aa4fabdb [gaim-migrate @ 3225]
Sean Egan <seanegan@gmail.com>
parents: 3176
diff changeset
1253 }
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1254 chunk->sel_end = end;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1255 }
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1256
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1257 #define COORDS_IN_CHUNK(xx, yy) (((xx) < chunk->x + chunk->width) && \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1258 ((yy) < chunk->y + chunk->height))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1259
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1260 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1261 gtk_imhtml_select_bits (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1262 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1263 GList *bits;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1264 GList *chunks;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1265 GtkIMHtmlBit *bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1266 struct line_info *chunk;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1267
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1268 guint startx = imhtml->sel_startx,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1269 starty = imhtml->sel_starty,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1270 endx = imhtml->sel_endx,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1271 endy = imhtml->sel_endy;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1272 gchar *new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1273 gint selection = 0;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1274 guint mode = imhtml->sel_mode;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1275 gboolean smileys = imhtml->smileys;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1276 gboolean redraw = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1277 gboolean got_start = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1278 gboolean got_end = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1279
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1280 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1281
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1282 if (!imhtml->selection)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1283 return;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1284
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1285 if (imhtml->selected_text) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1286 g_string_free (imhtml->selected_text, TRUE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1287 imhtml->selected_text = g_string_new ("");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1288 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1289
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1290 if (mode == 2)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1291 startx = endx = 0;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1292
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1293 bits = imhtml->bits;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1294 while (bits) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1295 bit = bits->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1296 chunks = bit->chunks;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1297
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1298 while (chunks) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1299 chunk = chunks->data;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1300
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1301 switch (selection) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1302 case 0:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1303 if (COORDS_IN_CHUNK (startx, starty)) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1304 new_pos = get_position (imhtml, chunk, startx, smileys);
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1305 if (!chunk->selected ||
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1306 (chunk->sel_start != new_pos) ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1307 (chunk->sel_end != NULL))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1308 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1309 chunk->selected = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1310 chunk->sel_start = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1311 chunk->sel_end = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1312 selection++;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1313 got_start = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1314 if (mode == 2)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1315 endy += chunk->height;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1316 if (mode == 1)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1317 chunk_select_words (chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1318 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1319
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1320 if (COORDS_IN_CHUNK (endx, endy)) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1321 if (got_start) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1322 new_pos = get_position (imhtml, chunk, endx, smileys);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1323 if (chunk->sel_end != new_pos)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1324 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1325 if (chunk->sel_start > new_pos) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1326 chunk->sel_end = chunk->sel_start;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1327 chunk->sel_start = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1328 } else
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1329 chunk->sel_end = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1330 selection = 2;
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1331 imhtml->sel_endchunk = chunk;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1332 got_end = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1333 if (mode == 1)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1334 chunk_select_words (chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1335 } else {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1336 new_pos = get_position (imhtml, chunk, endx, smileys);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1337 if ( !chunk->selected ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1338 (chunk->sel_start != new_pos) ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1339 (chunk->sel_end != NULL))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1340 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1341 chunk->selected = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1342 chunk->sel_start = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1343 chunk->sel_end = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1344 selection++;
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1345 imhtml->sel_endchunk = chunk;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1346 got_end = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1347 if (mode == 2)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1348 starty += chunk->height;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1349 if (mode == 1)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1350 chunk_select_words (chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1351 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1352 } else if (!COORDS_IN_CHUNK (startx, starty) && !got_start) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1353 if (chunk->selected)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1354 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1355 chunk->selected = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1356 chunk->sel_start = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1357 chunk->sel_end = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1358 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1359
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1360 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1361 case 1:
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1362 if (!got_start && COORDS_IN_CHUNK (startx, starty)) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1363 new_pos = get_position (imhtml, chunk, startx, smileys);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1364 if ( !chunk->selected ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1365 (chunk->sel_end != new_pos) ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1366 (chunk->sel_start != chunk->text))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1367 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1368 chunk->selected = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1369 chunk->sel_start = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1370 chunk->sel_end = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1371 selection++;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1372 got_start = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1373 if (mode == 1)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1374 chunk_select_words (chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1375 } else if (!got_end && COORDS_IN_CHUNK (endx, endy)) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1376 new_pos = get_position (imhtml, chunk, endx, smileys);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1377 if ( !chunk->selected ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1378 (chunk->sel_end != new_pos) ||
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1379 (chunk->sel_start != chunk->text))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1380 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1381 chunk->selected = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1382 chunk->sel_start = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1383 chunk->sel_end = new_pos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1384 selection++;
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1385 imhtml->sel_endchunk = chunk;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1386 got_end = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1387 if (mode == 1)
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1388 chunk_select_words (chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1389 } else {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1390 if ( !chunk->selected ||
1449
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
1391 (chunk->sel_end != NULL) ||
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
1392 (chunk->sel_start != chunk->text))
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1393 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1394 chunk->selected = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1395 chunk->sel_start = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1396 chunk->sel_end = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1397 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1398
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1399 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1400 case 2:
1449
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
1401 if (chunk->selected)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1402 redraw = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1403 chunk->selected = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1404 chunk->sel_start = chunk->text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1405 chunk->sel_end = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1406 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1407 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1408
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1409 if (chunk->selected == TRUE)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1410 imhtml->selected_text = append_to_sel (imhtml->selected_text,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1411 chunk, smileys);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1412
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1413 if (redraw) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1414 if (DRAW_IMG (bit))
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1415 draw_img (imhtml, chunk);
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
1416 else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk))
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
1417 draw_line (imhtml, chunk);
2348
dd5f18429dd9 [gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2338
diff changeset
1418 else if (chunk->width)
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1419 draw_text (imhtml, chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1420 redraw = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1421 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1422
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1423 chunks = g_list_next (chunks);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1424 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1425
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1426 bits = g_list_next (bits);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1427 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1428 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1429
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1430 static void
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1431 gtk_imhtml_select_in_chunk (GtkIMHtml *imhtml,
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1432 struct line_info *chunk)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1433 {
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1434 GtkIMHtmlBit *bit = chunk->bit;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1435 gchar *new_pos;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1436 guint endx = imhtml->sel_endx;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1437 guint startx = imhtml->sel_startx;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1438 guint starty = imhtml->sel_starty;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1439 gboolean smileys = imhtml->smileys;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1440 gboolean redraw = FALSE;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1441
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
1442 new_pos = get_position (imhtml, chunk, endx, smileys);
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1443 if ((starty < chunk->y) ||
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1444 ((starty < chunk->y + chunk->height) && (startx < endx))) {
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1445 if (chunk->sel_end != new_pos)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1446 redraw = TRUE;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1447 chunk->sel_end = new_pos;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1448 } else {
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1449 if (chunk->sel_start != new_pos)
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1450 redraw = TRUE;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1451 chunk->sel_start = new_pos;
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1452 }
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1453
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1454 if (redraw) {
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1455 if (DRAW_IMG (bit))
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1456 draw_img (imhtml, chunk);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1457 else if ((bit->type == TYPE_SEP) &&
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1458 (bit->chunks->data == chunk))
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1459 draw_line (imhtml, chunk);
2348
dd5f18429dd9 [gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2338
diff changeset
1460 else if (chunk->width)
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1461 draw_text (imhtml, chunk);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1462 }
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1463 }
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1464
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1465 static gint
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1466 scroll_timeout (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1467 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1468 GdkEventMotion event;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1469 gint x, y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1470 GdkModifierType mask;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1471
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1472 imhtml->scroll_timer = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1473
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
1474 gdk_window_get_pointer (GTK_LAYOUT (imhtml)->bin_window, &x, &y, &mask);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1475
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1476 if (mask & GDK_BUTTON1_MASK) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1477 event.is_hint = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1478 event.x = x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1479 event.y = y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1480 event.state = mask;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1481
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1482 gtk_imhtml_motion_notify_event (GTK_WIDGET (imhtml), &event);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1483 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1484
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1485 return FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1486 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1487
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1488 static gint
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1489 gtk_imhtml_tip_paint (GtkIMHtml *imhtml)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1490 {
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1491 int x,y;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1492 GtkStyle *style;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1493 PangoLayout *layout;
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1494 if (imhtml->tip_bit->url)
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1495 layout = gtk_widget_create_pango_layout (imhtml->tip_window, imhtml->tip_bit->url);
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1496 else if (imhtml->tip_bit->img)
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1497 layout = gtk_widget_create_pango_layout (imhtml->tip_window, imhtml->tip_bit->img->filename);
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1498 else
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1499 return FALSE;
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1500
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1501 style = imhtml->tip_window->style;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1502 pango_layout_get_size (layout, &x, &y);
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1503
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1504 if (!imhtml->tip_bit)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1505 return FALSE;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1506
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1507 gtk_paint_flat_box (style, imhtml->tip_window->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1508 NULL, imhtml->tip_window, "tooltip", 0, 0, -1, -1);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1509
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1510 gtk_paint_layout (style, imhtml->tip_window->window, GTK_STATE_NORMAL, TRUE,
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1511 NULL, imhtml->tip_window, "tooltip", 4, 4, layout);
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1512
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1513 g_object_unref (layout);
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1514 return FALSE;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1515 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1516
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1517 static gint
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1518 gtk_imhtml_tip (gpointer data)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1519 {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1520 GtkIMHtml *imhtml = data;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1521 GtkWidget *widget = GTK_WIDGET (imhtml);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1522 GtkStyle *style;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1523 PangoLayout *layout;
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1524 gint x, y, w, h, scr_w, scr_h;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1525
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1526 if (!imhtml->tip_bit || !GTK_WIDGET_DRAWABLE (widget)) {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1527 imhtml->tip_timer = 0;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1528 return FALSE;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1529 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1530
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1531 if (imhtml->tip_window)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1532 gtk_widget_destroy (imhtml->tip_window);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1533
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1534 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1535 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1536 gtk_window_set_policy (GTK_WINDOW (imhtml->tip_window), FALSE, FALSE, TRUE);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1537 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1538 gtk_signal_connect_object (GTK_OBJECT (imhtml->tip_window), "expose_event",
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1539 GTK_SIGNAL_FUNC (gtk_imhtml_tip_paint), GTK_OBJECT (imhtml));
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1540
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1541 gtk_widget_ensure_style (imhtml->tip_window);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1542 style = imhtml->tip_window->style;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1543 layout = gtk_widget_create_pango_layout(imhtml->tip_window,
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1544 imhtml->tip_bit->url ? imhtml->tip_bit->url : imhtml->tip_bit->img->filename);
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1545
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1546 scr_w = gdk_screen_width ();
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1547 scr_h = gdk_screen_height ();
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1548
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1549 pango_layout_get_size(layout, &w, &h);
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1550
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1551 w = PANGO_PIXELS(w) + 8;
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1552 h = PANGO_PIXELS(h) + 8;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1553
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1554 gdk_window_get_pointer (NULL, &x, &y, NULL);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1555 if (GTK_WIDGET_NO_WINDOW (widget))
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1556 y += widget->allocation.y;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1557
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1558 x -= ((w >> 1) + 4);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1559
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1560 if ((x + w) > scr_w)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1561 x -= (x + w) - scr_w;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1562 else if (x < 0)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1563 x = 0;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1564
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1565 if ((y + h + + 4) > scr_h)
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1566 y = y - h;
2071
0fd338304759 [gaim-migrate @ 2081]
Rob Flynn <gaim@robflynn.com>
parents: 2065
diff changeset
1567 else
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1568 y = y + h - 4;
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1569
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1570 gtk_widget_set_usize (imhtml->tip_window, w, h);
1955
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1571 gtk_widget_set_uposition (imhtml->tip_window, x, y);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1572 gtk_widget_show (imhtml->tip_window);
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1573
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1574 imhtml->tip_timer = 0;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1575 g_object_unref(layout);
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1576
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1577 return FALSE;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1578 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1579
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1580 static gint
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1581 gtk_imhtml_motion_notify_event (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1582 GdkEventMotion *event)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1583 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1584 gint x, y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1585 GdkModifierType state;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1586 GtkIMHtml *imhtml = GTK_IMHTML (widget);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1587 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1588 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1589
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1590 if (event->is_hint)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1591 gdk_window_get_pointer (event->window, &x, &y, &state);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1592 else {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1593 x = event->x + hadj->value;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1594 y = event->y + vadj->value;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1595 state = event->state;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1596 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1597
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1598 if (state & GDK_BUTTON1_MASK) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1599 gint diff;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1600 gint height = vadj->page_size;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1601 gint yy = y - vadj->value;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1602
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1603 if (((yy < 0) || (yy > height)) &&
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1604 (imhtml->scroll_timer == 0) &&
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1605 (vadj->upper > vadj->page_size)) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1606 imhtml->scroll_timer = gtk_timeout_add (100,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1607 (GtkFunction) scroll_timeout,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1608 imhtml);
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
1609 diff = (yy < 0) ? (yy / 2) : ((yy - height) / 2);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1610 gtk_adjustment_set_value (vadj,
2337
e3939d21c2f0 [gaim-migrate @ 2350]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2188
diff changeset
1611 MIN (vadj->value + diff, vadj->upper - height));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1612 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1613
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1614 if (imhtml->selection) {
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1615 struct line_info *chunk = imhtml->sel_endchunk;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1616 imhtml->sel_endx = MAX (x, 0);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1617 imhtml->sel_endy = MAX (y, 0);
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1618 if ((chunk == NULL) ||
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1619 (x < chunk->x) ||
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1620 (x > chunk->x + chunk->width) ||
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1621 (y < chunk->y) ||
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1622 (y > chunk->y + chunk->height) ||
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1623 (imhtml->sel_mode > 0))
1515
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1624 gtk_imhtml_select_bits (imhtml);
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1625 else
206f995a33f3 [gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1482
diff changeset
1626 gtk_imhtml_select_in_chunk (imhtml, chunk);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1627 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1628 } else {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1629 GList *click = imhtml->click;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1630 struct clickable *uw;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1631
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1632 while (click) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1633 uw = (struct clickable *) click->data;
3465
ec437d73b2ee [gaim-migrate @ 3515]
Sean Egan <seanegan@gmail.com>
parents: 3460
diff changeset
1634 if ((uw->bit->url) && (x > uw->x) && (x < uw->x + uw->width) &&
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1635 (y > uw->y) && (y < uw->y + uw->height) &&
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1636 (uw->bit->url || uw->bit->img)) {
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1637 if (imhtml->tip_bit != uw->bit) {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1638 imhtml->tip_bit = uw->bit;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1639 if (imhtml->tip_timer != 0)
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1640 gtk_timeout_remove (imhtml->tip_timer);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1641 if (imhtml->tip_window) {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1642 gtk_widget_destroy (imhtml->tip_window);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1643 imhtml->tip_window = NULL;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1644 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1645 imhtml->tip_timer = gtk_timeout_add (TOOLTIP_TIMEOUT,
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1646 gtk_imhtml_tip,
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1647 imhtml);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1648 }
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1649 if (uw->bit->url)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1650 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window,
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1651 imhtml->hand_cursor);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1652 return TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1653 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1654 click = g_list_next (click);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1655 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1656 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1657
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1658 if (imhtml->tip_timer) {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1659 gtk_timeout_remove (imhtml->tip_timer);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1660 imhtml->tip_timer = 0;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1661 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1662 if (imhtml->tip_window) {
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1663 gtk_widget_destroy (imhtml->tip_window);
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1664 imhtml->tip_window = NULL;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1665 }
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1666 imhtml->tip_bit = NULL;
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1667
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
1668 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1669
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1670 return TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1671 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1672
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1673 static gint
1613
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1674 gtk_imhtml_leave_notify_event (GtkWidget *widget,
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1675 GdkEventCrossing *event)
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1676 {
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1677 GtkIMHtml *imhtml = GTK_IMHTML (widget);
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1678
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1679 if (imhtml->tip_timer) {
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1680 gtk_timeout_remove (imhtml->tip_timer);
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1681 imhtml->tip_timer = 0;
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1682 }
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1683 if (imhtml->tip_window) {
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1684 gtk_widget_destroy (imhtml->tip_window);
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1685 imhtml->tip_window = NULL;
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1686 }
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1687 imhtml->tip_bit = NULL;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1688 return TRUE;
1613
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1689 }
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1690 struct imgsv {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1691 GtkWidget *savedialog;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1692 struct im_image *img;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1693 };
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1694
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1695 static void
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1696 save_img (GtkObject *object,
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1697 gpointer data)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1698 {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1699 struct imgsv *is = data;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1700 struct im_image *img = is->img;
3374
3cd2fbddf95a [gaim-migrate @ 3393]
Sean Egan <seanegan@gmail.com>
parents: 3250
diff changeset
1701 const gchar *filename;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1702 FILE *f;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1703 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(is->savedialog));
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
1704 debug_printf("Saving %s\n", filename);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1705 if (! (f=fopen(filename, "w"))) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1706 /* There should be some sort of dialog */
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
1707 debug_printf("Could not open file for writing.\n");
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1708 gtk_widget_destroy(is->savedialog);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1709 g_free(is);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1710 return;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1711 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1712
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1713 fwrite(img->data, 1, img->len, f);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1714 fclose(f);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1715 gtk_widget_destroy(is->savedialog);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1716 g_free(is);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1717 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1718
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1719 static void
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1720 save_img_dialog (GtkObject *object,
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1721 gpointer data)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1722 {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1723 struct imgsv *is = g_malloc(sizeof(struct imgsv));
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1724 struct im_image *img = data;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1725 GtkWidget *savedialog = gtk_file_selection_new ("Gaim - Save Image");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1726 gtk_file_selection_set_filename (GTK_FILE_SELECTION(savedialog), img->filename);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1727 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(savedialog)->cancel_button),
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1728 "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1729 (gpointer) savedialog);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1730
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1731 is->img = img;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1732 is->savedialog = savedialog;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1733
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1734 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(savedialog)->ok_button),
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1735 "clicked", GTK_SIGNAL_FUNC (save_img), is);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1736 gtk_widget_show (savedialog);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1737
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1738
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1739 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1740
1613
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1741
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1742 static void
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1743 menu_open_url (GtkObject *object,
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1744 gpointer data)
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1745 {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1746 struct clickable *uw = data;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1747
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1748 gtk_signal_emit (GTK_OBJECT (uw->imhtml), signals [URL_CLICKED], uw->bit->url);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1749 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1750
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1751 static void
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1752 menu_copy_link (GtkObject *object,
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1753 gpointer data)
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1754 {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1755 struct clickable *uw = data;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1756 GtkIMHtml *imhtml = uw->imhtml;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1757
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1758 if (imhtml->selected_text)
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1759 g_string_free (imhtml->selected_text, TRUE);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1760
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1761 gtk_imhtml_select_none (uw->imhtml);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1762
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1763 imhtml->selection = TRUE;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1764 imhtml->selected_text = g_string_new (uw->bit->url);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1765
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1766 gtk_selection_owner_set (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1767 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1768
1613
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
1769 static gint
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1770 gtk_imhtml_button_press_event (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1771 GdkEventButton *event)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1772 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1773 GtkIMHtml *imhtml = GTK_IMHTML (widget);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1774 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1775 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1776 gint x, y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1777
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1778 x = event->x + hadj->value;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1779 y = event->y + vadj->value;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1780
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1781 if (event->button == 1) {
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1782 imhtml->sel_startx = imhtml->sel_endx = x;
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1783 imhtml->sel_starty = imhtml->sel_endy = y;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1784 imhtml->selection = TRUE;
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1785 if (event->type == GDK_BUTTON_PRESS) {
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1786 imhtml->sel_mode = 0; /* select by letter */
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1787 gtk_imhtml_select_none (imhtml);
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1788 } else if (event->type == GDK_2BUTTON_PRESS) {
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1789 imhtml->sel_mode = 1; /* select by word */
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1790 gtk_imhtml_select_none (imhtml);
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1791 } else if (event->type == GDK_3BUTTON_PRESS) {
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1792 imhtml->sel_mode = 2; /* select by line */
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1793 gtk_imhtml_select_bits (imhtml);
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1794 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1795 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1796
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1797 if (event->button == 3) {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1798 GList *click = imhtml->click;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1799 struct clickable *uw;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1800
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1801 while (click) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1802 uw = click->data;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1803 if ((x > uw->x) && (x < uw->x + uw->width) &&
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1804 (y > uw->y) && (y < uw->y + uw->height)) {
3250
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1805 static GtkWidget *menu = NULL;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1806 GtkWidget *button;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1807
3250
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1808 /*
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1809 * If a menu already exists, destroy it before creating a new one,
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1810 * thus freeing-up the memory it occupied.
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1811 */
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1812 if(menu)
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1813 gtk_widget_destroy(menu);
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1814
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1815 menu = gtk_menu_new();
0970eabdd8df [gaim-migrate @ 3268]
Jim Seymour <jseymour>
parents: 3208
diff changeset
1816
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1817 if (uw->bit->url) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1818 button = gtk_menu_item_new_with_label ("Open URL");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1819 gtk_signal_connect (GTK_OBJECT (button), "activate",
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1820 GTK_SIGNAL_FUNC (menu_open_url), uw);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1821 gtk_menu_append (GTK_MENU (menu), button);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1822 gtk_widget_show (button);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1823
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1824 button = gtk_menu_item_new_with_label ("Copy Link Location");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1825 gtk_signal_connect (GTK_OBJECT (button), "activate",
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1826 GTK_SIGNAL_FUNC (menu_copy_link), uw);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1827 gtk_menu_append (GTK_MENU (menu), button);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1828 gtk_widget_show (button);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1829 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1830
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1831 if (uw->bit->img) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1832 button = gtk_menu_item_new_with_label ("Save Image");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1833 gtk_signal_connect (GTK_OBJECT (button), "activate",
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1834 GTK_SIGNAL_FUNC (save_img_dialog), uw->bit->img);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1835 gtk_menu_append (GTK_MENU (menu), button);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1836 gtk_widget_show (button);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1837 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1838
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1839 gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 3, event->time);
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1840
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1841 if (imhtml->tip_timer) {
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1842 gtk_timeout_remove (imhtml->tip_timer);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1843 imhtml->tip_timer = 0;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1844 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1845 if (imhtml->tip_window) {
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1846 gtk_widget_destroy (imhtml->tip_window);
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1847 imhtml->tip_window = NULL;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1848 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1849 imhtml->tip_bit = NULL;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1850
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1851 return TRUE;
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1852 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1853 click = g_list_next (click);
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1854 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1855 }
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
1856
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1857 return TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1858 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1859
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1860 static gint
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1861 gtk_imhtml_button_release_event (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1862 GdkEventButton *event)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1863 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1864 GtkIMHtml *imhtml = GTK_IMHTML (widget);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1865 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1866 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1867 gint x, y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1868
1456
6650776468b3 [gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1454
diff changeset
1869 x = event->x + hadj->value;
6650776468b3 [gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1454
diff changeset
1870 y = event->y + vadj->value;
6650776468b3 [gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1454
diff changeset
1871
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1872 if ((event->button == 1) && imhtml->selection) {
2982
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1873 if ((x == imhtml->sel_startx) && (y == imhtml->sel_starty) &&
73f303cb91c1 [gaim-migrate @ 2995]
Rob Flynn <gaim@robflynn.com>
parents: 2954
diff changeset
1874 (imhtml->sel_mode == 0)) {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1875 imhtml->sel_startx = imhtml->sel_starty = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1876 imhtml->selection = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1877 gtk_imhtml_select_none (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1878 } else {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1879 imhtml->sel_endx = MAX (x, 0);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1880 imhtml->sel_endy = MAX (y, 0);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1881 gtk_imhtml_select_bits (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1882 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1883
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1884 gtk_selection_owner_set (widget, GDK_SELECTION_PRIMARY, event->time);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1885 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1886
1547
7b50a08090a2 [gaim-migrate @ 1557]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1528
diff changeset
1887 if ((event->button == 1) && (imhtml->sel_startx == 0)) {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1888 GList *click = imhtml->click;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1889 struct clickable *uw;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1890
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1891 while (click) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1892 uw = (struct clickable *) click->data;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1893 if ((x > uw->x) && (x < uw->x + uw->width) &&
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1894 (y > uw->y) && (y < uw->y + uw->height)) {
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1895 gtk_signal_emit (GTK_OBJECT (imhtml), signals [URL_CLICKED],
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
1896 uw->bit->url);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1897 return TRUE;
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1898 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
1899 click = g_list_next (click);
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1900 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1901 }
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
1902
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1903 return TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1904 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1905
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1906 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1907 gtk_imhtml_selection_get (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1908 GtkSelectionData *sel_data,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1909 guint sel_info,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1910 guint32 time)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1911 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1912 GtkIMHtml *imhtml;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1913 gchar *string;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1914 gint length;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1915
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1916 g_return_if_fail (widget != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1917 g_return_if_fail (GTK_IS_IMHTML (widget));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1918 g_return_if_fail (sel_data->selection == GDK_SELECTION_PRIMARY);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1919
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1920 imhtml = GTK_IMHTML (widget);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1921
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1922 g_return_if_fail (imhtml->selected_text != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1923 g_return_if_fail (imhtml->selected_text->str != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1924
2188
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1925 if (imhtml->selected_text->len <= 0)
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1926 return;
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1927
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1928 string = g_strdup (imhtml->selected_text->str);
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1929 length = strlen (string);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1930
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1931 if (sel_info == TARGET_STRING) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1932 gtk_selection_data_set (sel_data,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1933 GDK_SELECTION_TYPE_STRING,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1934 8 * sizeof (gchar),
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1935 (guchar *) string,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1936 length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1937 } else if ((sel_info == TARGET_TEXT) || (sel_info == TARGET_COMPOUND_TEXT)) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1938 guchar *text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1939 GdkAtom encoding;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1940 gint format;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1941 gint new_length;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1942
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1943 gdk_string_to_compound_text (string, &encoding, &format, &text, &new_length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1944 gtk_selection_data_set (sel_data, encoding, format, text, new_length);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1945 gdk_free_compound_text (text);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1946 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1947
2188
98c434792ab7 [gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2140
diff changeset
1948 g_free (string);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1949 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1950
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1951 static gint
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1952 gtk_imhtml_selection_clear_event (GtkWidget *widget,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1953 GdkEventSelection *event)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1954 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1955 GtkIMHtml *imhtml;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1956
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1957 g_return_val_if_fail (widget != NULL, FALSE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1958 g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1959 g_return_val_if_fail (event != NULL, FALSE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1960 g_return_val_if_fail (event->selection == GDK_SELECTION_PRIMARY, TRUE);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1961
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1962 if (!gtk_selection_clear (widget, event))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1963 return FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1964
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1965 imhtml = GTK_IMHTML (widget);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1966
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1967 gtk_imhtml_select_none (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1968
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1969 return TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1970 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1971
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1972 static void
1955
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1973 gtk_imhtml_adjustment_changed (GtkAdjustment *adjustment,
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1974 GtkIMHtml *imhtml)
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1975 {
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1976 GtkLayout *layout = GTK_LAYOUT (imhtml);
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1977
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1978 if (!GTK_WIDGET_MAPPED (imhtml) || !GTK_WIDGET_REALIZED (imhtml))
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1979 return;
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1980
5b79252ea95c [gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1979
diff changeset
1981 if (layout->freeze_count)
1955
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1982 return;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1983
2809
c479d54abc0a [gaim-migrate @ 2822]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2779
diff changeset
1984 if (layout->vadjustment->value < TOP_BORDER)
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
1985 gdk_window_clear_area (layout->bin_window, 0, 0,
2809
c479d54abc0a [gaim-migrate @ 2822]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2779
diff changeset
1986 imhtml->xsize, TOP_BORDER - layout->vadjustment->value);
1961
0a3edeba05b6 [gaim-migrate @ 1971]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1955
diff changeset
1987
1955
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1988 gtk_imhtml_draw_exposed (imhtml);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1989 }
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1990
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1991 static void
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1992 gtk_imhtml_set_scroll_adjustments (GtkLayout *layout,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1993 GtkAdjustment *hadj,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1994 GtkAdjustment *vadj)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1995 {
1955
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1996 gboolean need_adjust = FALSE;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1997
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1998 g_return_if_fail (layout != NULL);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
1999 g_return_if_fail (GTK_IS_IMHTML (layout));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2000
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2001 if (hadj)
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2002 g_return_if_fail (GTK_IS_ADJUSTMENT (hadj));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2003 else
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2004 hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2005 if (vadj)
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2006 g_return_if_fail (GTK_IS_ADJUSTMENT (vadj));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2007 else
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2008 vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2009
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2010 if (layout->hadjustment && (layout->hadjustment != hadj)) {
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2011 gtk_signal_disconnect_by_data (GTK_OBJECT (layout->hadjustment), layout);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2012 gtk_object_unref (GTK_OBJECT (layout->hadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2013 }
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2014
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2015 if (layout->vadjustment && (layout->vadjustment != vadj)) {
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2016 gtk_signal_disconnect_by_data (GTK_OBJECT (layout->vadjustment), layout);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2017 gtk_object_unref (GTK_OBJECT (layout->vadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2018 }
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2019
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2020 if (layout->hadjustment != hadj) {
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2021 layout->hadjustment = hadj;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2022 gtk_object_ref (GTK_OBJECT (layout->hadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2023 gtk_object_sink (GTK_OBJECT (layout->hadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2024
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2025 gtk_signal_connect (GTK_OBJECT (layout->hadjustment), "value_changed",
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2026 (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2027 need_adjust = TRUE;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2028 }
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2029
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2030 if (layout->vadjustment != vadj) {
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2031 layout->vadjustment = vadj;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2032 gtk_object_ref (GTK_OBJECT (layout->vadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2033 gtk_object_sink (GTK_OBJECT (layout->vadjustment));
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2034
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2035 gtk_signal_connect (GTK_OBJECT (layout->vadjustment), "value_changed",
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2036 (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout);
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2037 need_adjust = TRUE;
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2038 }
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2039
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2040 if (need_adjust)
9ed99b8c5c9c [gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1780
diff changeset
2041 gtk_imhtml_adjustment_changed (NULL, GTK_IMHTML (layout));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2042 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2043
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2044 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2045 gtk_imhtml_class_init (GtkIMHtmlClass *class)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2046 {
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
2047 GObjectClass *gobject_class;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2048 GtkObjectClass *object_class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2049 GtkWidgetClass *widget_class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2050 GtkLayoutClass *layout_class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2051
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
2052 gobject_class = (GObjectClass*) class;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2053 object_class = (GtkObjectClass*) class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2054 widget_class = (GtkWidgetClass*) class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2055 layout_class = (GtkLayoutClass*) class;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2056
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2057 parent_class = gtk_type_class (GTK_TYPE_LAYOUT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2058
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2059 signals [URL_CLICKED] =
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2060 gtk_signal_new ("url_clicked",
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2061 GTK_RUN_FIRST,
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
2062 GTK_CLASS_TYPE (object_class),
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2063 GTK_SIGNAL_OFFSET (GtkIMHtmlClass, url_clicked),
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2064 gtk_marshal_NONE__POINTER,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2065 GTK_TYPE_NONE, 1,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2066 GTK_TYPE_POINTER);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2067
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
2068 gobject_class->finalize = gtk_imhtml_finalize;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2069
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2070 widget_class->realize = gtk_imhtml_realize;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2071 widget_class->style_set = gtk_imhtml_style_set;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2072 widget_class->expose_event = gtk_imhtml_expose_event;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2073 widget_class->size_allocate = gtk_imhtml_size_allocate;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2074 widget_class->motion_notify_event = gtk_imhtml_motion_notify_event;
1613
35a13ece3a9c [gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1582
diff changeset
2075 widget_class->leave_notify_event = gtk_imhtml_leave_notify_event;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2076 widget_class->button_press_event = gtk_imhtml_button_press_event;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2077 widget_class->button_release_event = gtk_imhtml_button_release_event;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2078 widget_class->selection_get = gtk_imhtml_selection_get;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2079 widget_class->selection_clear_event = gtk_imhtml_selection_clear_event;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2080
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2081 layout_class->set_scroll_adjustments = gtk_imhtml_set_scroll_adjustments;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2082 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2083
2861
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2084 /* the font stuff is the most insane stuff. i don't understand it half
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2085 * the time. so we're going to comment it. isn't that wonderful. */
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2086
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2087 /* when you g_strsplit a valid font name, these are the positions of all the various parts of it. */
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2088 #define FNDRY 1
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2089 #define FMLY 2
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2090 #define WGHT 3
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2091 #define SLANT 4
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2092 #define SWDTH 5
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2093 #define ADSTYL 6
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2094 #define PXLSZ 7
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2095 #define PTSZ 8
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2096 #define RESX 9
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2097 #define RESY 10
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2098 #define SPC 11
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2099 #define AVGWDTH 12
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2100 #define RGSTRY 13
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2101 #define ENCDNG 14
5d7e0a730c7f [gaim-migrate @ 2874]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2859
diff changeset
2102
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
2103 #if 0
3374
3cd2fbddf95a [gaim-migrate @ 3393]
Sean Egan <seanegan@gmail.com>
parents: 3250
diff changeset
2104 static const gchar*
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2105 gtk_imhtml_get_font_name (PangoFontDescription *font)
1978
a7bfa23e80a1 [gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1964
diff changeset
2106 {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2107 return pango_font_description_get_family(font);
1978
a7bfa23e80a1 [gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1964
diff changeset
2108 }
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
2109 #endif
1978
a7bfa23e80a1 [gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1964
diff changeset
2110
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2111 static PangoFontDescription *
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2112 gtk_imhtml_font_load (GtkIMHtml *imhtml,
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2113 gchar *name,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2114 gboolean bold,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2115 gboolean italics,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2116 gint fontsize)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2117 {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2118 PangoFontDescription *default_font = imhtml->default_font;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2119 PangoFontDescription *ret_font;
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2120
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2121 if (!name && !bold && !italics && !fontsize)
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2122 return default_font;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2123 // return pango_font_description_copy(default_font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2124
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2125 ret_font = pango_font_description_copy(default_font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2126
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2127 if (name)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2128 pango_font_description_set_family(ret_font, name);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2129
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2130 if (italics)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2131 pango_font_description_set_style(ret_font, PANGO_STYLE_ITALIC);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2132
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2133 if (bold)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2134 pango_font_description_set_weight(ret_font, PANGO_WEIGHT_BOLD);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2135
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2136 if (fontsize)
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2137 {
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2138 pango_font_description_set_size(ret_font,
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2139 POINT_SIZE(fontsize) * PANGO_SCALE);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2140 }
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2141
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2142 return ret_font;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2143 }
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2144
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2145 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2146 gtk_imhtml_init (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2147 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2148 static const GtkTargetEntry targets [] = {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2149 { "STRING", 0, TARGET_STRING },
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2150 { "TEXT", 0, TARGET_TEXT },
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2151 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2152 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2153
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2154 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2155 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2156
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2157 GTK_WIDGET_SET_FLAGS (GTK_WIDGET (imhtml), GTK_CAN_FOCUS);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2158 gtk_selection_add_targets (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, targets, 3);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2159 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2160
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2161 GtkType
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2162 gtk_imhtml_get_type (void)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2163 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2164 static GtkType imhtml_type = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2165
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2166 if (!imhtml_type) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2167 static const GtkTypeInfo imhtml_info = {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2168 "GtkIMHtml",
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2169 sizeof (GtkIMHtml),
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2170 sizeof (GtkIMHtmlClass),
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2171 (GtkClassInitFunc) gtk_imhtml_class_init,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2172 (GtkObjectInitFunc) gtk_imhtml_init,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2173 NULL,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2174 NULL,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2175 NULL
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2176 };
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2177
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2178 imhtml_type = gtk_type_unique (GTK_TYPE_LAYOUT, &imhtml_info);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2179 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2180
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2181 return imhtml_type;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2182 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2183
3159
fce1883cc608 [gaim-migrate @ 3175]
Sean Egan <seanegan@gmail.com>
parents: 3071
diff changeset
2184 void
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2185 gtk_imhtml_init_smileys (GtkIMHtml *imhtml)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2186 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2187 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2188 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2189
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2190 imhtml->smiley_data = gtk_smiley_tree_new ();
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2191
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2192 gtk_imhtml_associate_smiley (imhtml, ":)", smile_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2193 gtk_imhtml_associate_smiley (imhtml, ":-)", smile_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2194
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2195 gtk_imhtml_associate_smiley (imhtml, ":(", sad_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2196 gtk_imhtml_associate_smiley (imhtml, ":-(", sad_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2197
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2198 gtk_imhtml_associate_smiley (imhtml, ";)", wink_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2199 gtk_imhtml_associate_smiley (imhtml, ";-)", wink_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2200
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2201 gtk_imhtml_associate_smiley (imhtml, ":-p", tongue_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2202 gtk_imhtml_associate_smiley (imhtml, ":-P", tongue_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2203
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2204 gtk_imhtml_associate_smiley (imhtml, "=-O", scream_xpm);
3176
cbf2c8d259f2 [gaim-migrate @ 3192]
Rob Flynn <gaim@robflynn.com>
parents: 3159
diff changeset
2205 gtk_imhtml_associate_smiley (imhtml, "=-o", scream_xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2206 gtk_imhtml_associate_smiley (imhtml, ":-*", kiss_xpm);
3176
cbf2c8d259f2 [gaim-migrate @ 3192]
Rob Flynn <gaim@robflynn.com>
parents: 3159
diff changeset
2207 gtk_imhtml_associate_smiley (imhtml, ">:O", yell_xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2208 gtk_imhtml_associate_smiley (imhtml, ">:o", yell_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2209 gtk_imhtml_associate_smiley (imhtml, "8-)", smile8_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2210 gtk_imhtml_associate_smiley (imhtml, ":-$", moneymouth_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2211 gtk_imhtml_associate_smiley (imhtml, ":-!", burp_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2212 gtk_imhtml_associate_smiley (imhtml, ":-[", embarrassed_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2213 gtk_imhtml_associate_smiley (imhtml, ":'(", cry_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2214
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2215 gtk_imhtml_associate_smiley (imhtml, ":-/", think_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2216 gtk_imhtml_associate_smiley (imhtml, ":-\\", think_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2217
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2218 gtk_imhtml_associate_smiley (imhtml, ":-X", crossedlips_xpm);
3176
cbf2c8d259f2 [gaim-migrate @ 3192]
Rob Flynn <gaim@robflynn.com>
parents: 3159
diff changeset
2219 gtk_imhtml_associate_smiley (imhtml, ":-x", crossedlips_xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2220 gtk_imhtml_associate_smiley (imhtml, ":-D", bigsmile_xpm);
2583
ce3df2c43f46 [gaim-migrate @ 2596]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2556
diff changeset
2221 gtk_imhtml_associate_smiley (imhtml, ":-d", bigsmile_xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2222 gtk_imhtml_associate_smiley (imhtml, "O:-)", angel_xpm);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2223 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2224
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2225 GtkWidget*
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2226 gtk_imhtml_new (GtkAdjustment *hadj,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2227 GtkAdjustment *vadj)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2228 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2229 GtkIMHtml *imhtml = gtk_type_new (GTK_TYPE_IMHTML);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2230
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2231 gtk_imhtml_set_adjustments (imhtml, hadj, vadj);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2232
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2233 imhtml->im_images = NULL;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2234
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2235 imhtml->bits = NULL;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2236 imhtml->click = NULL;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2237
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2238 imhtml->x = 0;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2239 imhtml->y = TOP_BORDER;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2240 imhtml->llheight = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2241 imhtml->llascent = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2242 imhtml->line = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2243
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2244 imhtml->selected_text = g_string_new ("");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2245 imhtml->scroll_timer = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2246
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2247 imhtml->img = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2248
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2249 imhtml->smileys = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2250 imhtml->comments = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2251
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2252 gtk_imhtml_init_smileys (imhtml);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2253
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2254 return GTK_WIDGET (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2255 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2256
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2257 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2258 gtk_imhtml_set_adjustments (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2259 GtkAdjustment *hadj,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2260 GtkAdjustment *vadj)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2261 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2262 gtk_layout_set_hadjustment (GTK_LAYOUT (imhtml), hadj);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2263 gtk_layout_set_vadjustment (GTK_LAYOUT (imhtml), vadj);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2264 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2265
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2266 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2267 gtk_imhtml_set_defaults (GtkIMHtml *imhtml,
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2268 PangoFontDescription *font,
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2269 GdkColor *fg_color,
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2270 GdkColor *bg_color)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2271 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2272 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2273 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2274
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2275 if (font) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2276 if (imhtml->default_font)
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2277 pango_font_description_free(imhtml->default_font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2278 imhtml->default_font = pango_font_description_copy(font);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2279 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2280
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2281 if (fg_color) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2282 if (imhtml->default_fg_color)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2283 gdk_color_free (imhtml->default_fg_color);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2284 imhtml->default_fg_color = gdk_color_copy (fg_color);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2285 }
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2286
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2287 if (bg_color) {
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2288 if (imhtml->default_bg_color)
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2289 gdk_color_free (imhtml->default_bg_color);
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2290 imhtml->default_bg_color = gdk_color_copy (bg_color);
1647
23b734cf1161 [gaim-migrate @ 1657]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1626
diff changeset
2291 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, imhtml->default_bg_color);
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2292 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2293 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2294
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2295 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2296 gtk_imhtml_set_img_handler (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2297 GtkIMHtmlImage handler)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2298 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2299 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2300 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2301
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2302 imhtml->img = handler;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2303 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2304
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2305 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2306 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2307 gchar *text,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2308 gchar **xpm)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2309 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2310 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2311 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2312 g_return_if_fail (text != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2313
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2314 if (xpm == NULL)
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2315 gtk_smiley_tree_remove (imhtml->smiley_data, text);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2316 else
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2317 gtk_smiley_tree_insert (imhtml->smiley_data, text, xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2318 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2319
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2320 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2321 new_line (GtkIMHtml *imhtml)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2322 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2323 GList *last = g_list_last (imhtml->line);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2324 struct line_info *li;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2325
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2326 if (last) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2327 li = last->data;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2328 if (li->x + li->width != imhtml->xsize)
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2329 li->width = imhtml->xsize - li->x;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2330 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2331
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2332 last = imhtml->line;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2333 if (last) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2334 li = last->data;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2335 if (li->height < MIN_HEIGHT) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2336 while (last) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2337 gint diff;
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2338 li = last->data;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2339 diff = MIN_HEIGHT - li->height;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2340 li->height = MIN_HEIGHT;
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
2341 li->ascent += diff / 2;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2342 last = g_list_next (last);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2343 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2344 imhtml->llheight = MIN_HEIGHT;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2345 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2346 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2347
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2348 g_list_free (imhtml->line);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2349 imhtml->line = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2350
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2351 imhtml->x = 0;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2352 imhtml->y += imhtml->llheight;
1462
1ac49082e099 [gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1461
diff changeset
2353 imhtml->llheight = 0;
1ac49082e099 [gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1461
diff changeset
2354 imhtml->llascent = 0;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2355 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2356
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2357 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2358 backwards_update (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2359 GtkIMHtmlBit *bit,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2360 gint height,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2361 gint ascent)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2362 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2363 gint diff;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2364 GList *ls = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2365 struct line_info *li;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2366 struct clickable *uw;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2367 struct im_image *img;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2368
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2369 if (height > imhtml->llheight) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2370 diff = height - imhtml->llheight;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2371
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2372 ls = imhtml->line;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2373 while (ls) {
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2374 li = ls->data;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2375 li->height += diff;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2376 if (ascent)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2377 li->ascent = ascent;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2378 else
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
2379 li->ascent += diff / 2;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2380 ls = g_list_next (ls);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2381 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2382
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2383 ls = imhtml->click;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2384 while (ls) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2385 uw = ls->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2386 if (uw->y + diff > imhtml->y)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2387 uw->y += diff;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2388 ls = g_list_next (ls);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2389 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2390
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2391 ls = imhtml->im_images;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2392 while(ls) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2393 img = ls->data;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2394 if (img->y + diff > imhtml->y)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2395 img->y += diff;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2396 ls = g_list_next(ls);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2397 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2398
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2399 imhtml->llheight = height;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2400 if (ascent)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2401 imhtml->llascent = ascent;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2402 else
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
2403 imhtml->llascent += diff / 2;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2404 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2405 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2406
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2407 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2408 add_text_renderer (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2409 GtkIMHtmlBit *bit,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2410 gchar *text)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2411 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2412 struct line_info *li;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2413 struct clickable *uw;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2414 PangoFontMetrics *metrics;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2415 gint width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2416
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2417 if (text)
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2418 width = string_width (imhtml->context, bit->font, text);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2419 else
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2420 width = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2421
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2422 li = g_new0 (struct line_info, 1);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2423 li->x = imhtml->x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2424 li->y = imhtml->y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2425 li->width = width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2426 li->height = imhtml->llheight;
3615
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2427 if (text) {
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2428 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL);
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2429 li->ascent = MAX (imhtml->llascent, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE);
3615
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2430 pango_font_metrics_unref(metrics);
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2431 } else
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2432 li->ascent = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2433 li->text = text;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2434 li->bit = bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2435
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2436 if (bit->url) {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2437 uw = g_new0 (struct clickable, 1);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2438 uw->x = imhtml->x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2439 uw->y = imhtml->y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2440 uw->width = width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2441 uw->height = imhtml->llheight;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
2442 uw->imhtml = imhtml;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
2443 uw->bit = bit;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2444 imhtml->click = g_list_append (imhtml->click, uw);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2445 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2446
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2447 bit->chunks = g_list_append (bit->chunks, li);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2448 imhtml->line = g_list_append (imhtml->line, li);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2449 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2450
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2451 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2452 add_img_renderer (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2453 GtkIMHtmlBit *bit)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2454 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2455 struct line_info *li;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2456 struct clickable *uw;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2457 gint width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2458
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2459 gdk_window_get_size (bit->pm, &width, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2460
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2461 li = g_new0 (struct line_info, 1);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2462 li->x = imhtml->x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2463 li->y = imhtml->y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2464 li->width = width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2465 li->height = imhtml->llheight;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2466 li->ascent = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2467 li->bit = bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2468
2994
60018f862a51 [gaim-migrate @ 3007]
Sean Egan <seanegan@gmail.com>
parents: 2993
diff changeset
2469
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2470 if (bit->url || bit->img) {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2471 uw = g_new0 (struct clickable, 1);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2472 uw->x = imhtml->x;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2473 uw->y = imhtml->y;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2474 uw->width = width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2475 uw->height = imhtml->llheight;
2655
c4ad36781d1b [gaim-migrate @ 2668]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2622
diff changeset
2476 uw->imhtml = imhtml;
1574
7ad82fa9e6ce [gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1547
diff changeset
2477 uw->bit = bit;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2478 imhtml->click = g_list_append (imhtml->click, uw);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2479 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2480
1447
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2481 bit->chunks = g_list_append (bit->chunks, li);
5df631739769 [gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1428
diff changeset
2482 imhtml->line = g_list_append (imhtml->line, li);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2483
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2484 imhtml->x += width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2485 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2486
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2487 static void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2488 gtk_imhtml_draw_bit (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2489 GtkIMHtmlBit *bit)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2490 {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2491 PangoFontMetrics *metrics;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2492 gint width, height;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2493
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2494 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2495 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2496 g_return_if_fail (bit != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2497
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2498
2954
f6c4f2187c08 [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2499 if ( ((bit->type == TYPE_TEXT) ||
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2500 ((bit->type == TYPE_SMILEY) && !imhtml->smileys) ||
2954
f6c4f2187c08 [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2501 ((bit->type == TYPE_COMMENT) && imhtml->comments)) &&
f6c4f2187c08 [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2502 bit->text) {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2503 gchar *copy = g_strdup (bit->text);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2504 gint pos = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2505 gboolean seenspace = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2506 gchar *tmp;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2507
3615
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2508 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL);
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2509 height = (pango_font_metrics_get_ascent(metrics) + pango_font_metrics_get_descent(metrics)) / PANGO_SCALE;
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2510 width = string_width (imhtml->context, bit->font, bit->text);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2511
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2512 if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize)) {
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2513 gint remain = imhtml->xsize - imhtml->x;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2514 while (text_width (imhtml->context, bit->font, copy, pos) < remain) {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2515 if (copy [pos] == ' ')
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2516 seenspace = TRUE;
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2517 pos++;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2518 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2519 if (seenspace) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2520 while (copy [pos - 1] != ' ') pos--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2521
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2522 tmp = g_strndup (copy, pos);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2523
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2524 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2525 add_text_renderer (imhtml, bit, tmp);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2526 } else
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2527 pos = 0;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2528 seenspace = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2529 new_line (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2530 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2531
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2532 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2533
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2534 while (pos < strlen (bit->text)) {
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2535 width = string_width (imhtml->context, bit->font, copy + pos);
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2536 if (imhtml->x + width > imhtml->xsize) {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2537 gint newpos = 0;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2538 gint remain = imhtml->xsize - imhtml->x;
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2539 while (text_width (imhtml->context, bit->font, copy + pos, newpos) < remain) {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2540 if (copy [pos + newpos] == ' ')
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2541 seenspace = TRUE;
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2542 newpos++;
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2543 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2544
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2545 if (seenspace)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2546 while (copy [pos + newpos - 1] != ' ') newpos--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2547
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2548 if (newpos == 0)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2549 break;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2550
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2551 tmp = g_strndup (copy + pos, newpos);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2552 pos += newpos;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2553
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2554 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2555 add_text_renderer (imhtml, bit, tmp);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2556
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2557 seenspace = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2558 new_line (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2559 } else {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2560 tmp = g_strdup (copy + pos);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2561
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2562 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2563 add_text_renderer (imhtml, bit, tmp);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2564
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2565 pos = strlen (bit->text);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2566
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2567 imhtml->x += width;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2568 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2569 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2570
3615
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2571 pango_font_metrics_unref(metrics);
220bed0e439c [gaim-migrate @ 3729]
Sean Egan <seanegan@gmail.com>
parents: 3614
diff changeset
2572 g_free(copy);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2573 } else if ((bit->type == TYPE_SMILEY) || (bit->type == TYPE_IMG)) {
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2574 if (bit->img) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2575 GdkPixbuf *imagepb = bit->img->pb;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2576 GdkPixbuf *tmp = NULL;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2577 if (gdk_pixbuf_get_width(imagepb) > imhtml->xsize - imhtml->x)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2578 new_line (imhtml);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2579
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2580 if (gdk_pixbuf_get_width(imagepb) > imhtml->xsize) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2581 tmp = gdk_pixbuf_scale_simple(imagepb, imhtml->xsize,
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2582 gdk_pixbuf_get_height(imagepb) *
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2583 imhtml->xsize/
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2584 gdk_pixbuf_get_width(imagepb),
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2585 GDK_INTERP_TILES);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2586 if (bit->pm)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2587 gdk_pixmap_unref (bit->pm);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2588 if (bit->bm)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2589 gdk_bitmap_unref (bit->bm);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2590 gdk_pixbuf_render_pixmap_and_mask(tmp, &(bit->pm), &(bit->bm), 100);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2591 gdk_pixbuf_unref(tmp);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2592 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2593 else {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2594 if (bit->pm)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2595 gdk_pixmap_unref (bit->pm);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2596 if (bit->bm)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2597 gdk_bitmap_unref (bit->bm);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2598 gdk_pixbuf_render_pixmap_and_mask(imagepb, &(bit->pm), &(bit->bm), 100);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2599 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2600 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2601
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2602 gdk_window_get_size (bit->pm, &width, &height);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2603
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2604 if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize))
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2605 new_line (imhtml);
1462
1ac49082e099 [gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1461
diff changeset
2606 else
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2607 backwards_update (imhtml, bit, height, 0);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2608
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2609 add_img_renderer (imhtml, bit);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2610 } else if (bit->type == TYPE_BR) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2611 new_line (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2612 add_text_renderer (imhtml, bit, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2613 } else if (bit->type == TYPE_SEP) {
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2614 struct line_info *li;
1462
1ac49082e099 [gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1461
diff changeset
2615 if (imhtml->llheight)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2616 new_line (imhtml);
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2617
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2618 li = g_new0 (struct line_info, 1);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2619 li->x = imhtml->x;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2620 li->y = imhtml->y;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
2621 li->width = imhtml->xsize;
1454
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2622 li->height = HR_HEIGHT * 2;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2623 li->ascent = 0;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2624 li->text = NULL;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2625 li->bit = bit;
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2626
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2627 bit->chunks = g_list_append (bit->chunks, li);
637592eb8b24 [gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1453
diff changeset
2628
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2629 imhtml->llheight = HR_HEIGHT * 2;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2630 new_line (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2631 add_text_renderer (imhtml, bit, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2632 }
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2633
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2634 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2635
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2636 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2637 gtk_imhtml_show_smileys (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2638 gboolean show)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2639 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2640 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2641 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2642
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2643 imhtml->smileys = show;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2644
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2645 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml)))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2646 gtk_imhtml_redraw_all (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2647 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2648
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2649 void
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2650 gtk_imhtml_show_comments (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2651 gboolean show)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2652 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2653 g_return_if_fail (imhtml != NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2654 g_return_if_fail (GTK_IS_IMHTML (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2655
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2656 imhtml->comments = show;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2657
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2658 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml)))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2659 gtk_imhtml_redraw_all (imhtml);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2660 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2661
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2662 static GdkColor *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2663 gtk_imhtml_get_color (const gchar *color)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2664 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2665 GdkColor c;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2666
1453
ecf700f23852 [gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1449
diff changeset
2667 if (!gdk_color_parse (color, &c))
ecf700f23852 [gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1449
diff changeset
2668 return NULL;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2669
1449
91d84e2073de [gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1447
diff changeset
2670 return gdk_color_copy (&c);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2671 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2672
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2673 static gboolean
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2674 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2675 const gchar *text,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2676 gint *len)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2677 {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2678 *len = gtk_smiley_tree_lookup (imhtml->smiley_data, text);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2679 return (*len > 0);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2680 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2681
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2682 static GtkIMHtmlBit *
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2683 gtk_imhtml_new_bit (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2684 gint type,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2685 gchar *text,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2686 gint bold,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2687 gint italics,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2688 gint underline,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2689 gint strike,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2690 FontDetail *font,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2691 GdkColor *bg,
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2692 gchar *url,
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2693 gint pre,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2694 gint sub,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2695 gint sup)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2696 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2697 GtkIMHtmlBit *bit = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2698
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2699 g_return_val_if_fail (imhtml != NULL, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2700 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2701
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2702 if ((type == TYPE_TEXT) && ((text == NULL) || (strlen (text) == 0)))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2703 return NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2704
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2705 bit = g_new0 (GtkIMHtmlBit, 1);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2706 bit->type = type;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2707
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2708 if ((text != NULL) && (strlen (text) != 0))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2709 bit->text = g_strdup (text);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2710
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2711 if ((font != NULL) || bold || italics || pre) {
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2712 if (font && (bold || italics || font->size || font->face || pre)) {
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2713 if (pre) {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2714 bit->font = gtk_imhtml_font_load (imhtml, DEFAULT_PRE_FACE, bold, italics, font->size);
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2715 } else {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2716 bit->font = gtk_imhtml_font_load (imhtml, font->face, bold, italics, font->size);
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2717 }
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2718 } else if (bold || italics || pre) {
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2719 if (pre) {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2720 bit->font = gtk_imhtml_font_load (imhtml, DEFAULT_PRE_FACE, bold, italics, 0);
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2721 } else {
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2722 bit->font = gtk_imhtml_font_load (imhtml, NULL, bold, italics, 0);
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
2723 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2724 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2725
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2726 if (font && (type != TYPE_BR)) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2727 if (font->fore != NULL)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2728 bit->fore = gdk_color_copy (font->fore);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2729
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2730 if (font->back != NULL)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2731 bit->back = gdk_color_copy (font->back);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2732 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2733 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2734
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2735 if (((bit->type == TYPE_TEXT) || (bit->type == TYPE_SMILEY) || (bit->type == TYPE_COMMENT)) &&
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
2736 (bit->font == NULL))
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
2737 bit->font = pango_font_description_copy (imhtml->default_font);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2738
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2739 if (bg != NULL)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2740 bit->bg = gdk_color_copy (bg);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2741
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2742 bit->underline = underline;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2743 bit->strike = strike;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2744
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2745 if (url != NULL)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2746 bit->url = g_strdup (url);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2747
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2748 if (type == TYPE_SMILEY) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2749 GdkColor *clr;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2750
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2751 if ((font != NULL) && (font->back != NULL))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2752 clr = font->back;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2753 else
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
2754 clr = (bg != NULL) ? bg : imhtml->default_bg_color;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2755
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2756 bit->pm = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (imhtml)->window,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2757 &bit->bm,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2758 clr,
2349
60c716c32c40 [gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2348
diff changeset
2759 gtk_smiley_tree_image (imhtml->smiley_data, text));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2760 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2761
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2762 return bit;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2763 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2764
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2765 #define NEW_TEXT_BIT gtk_imhtml_new_bit (imhtml, TYPE_TEXT, ws, bold, italics, underline, strike, \
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2766 fonts ? fonts->data : NULL, bg, url, pre, sub, sup)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2767 #define NEW_SMILEY_BIT gtk_imhtml_new_bit (imhtml, TYPE_SMILEY, ws, bold, italics, underline, strike, \
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2768 fonts ? fonts->data : NULL, bg, url, pre, sub, sup)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2769 #define NEW_SEP_BIT gtk_imhtml_new_bit (imhtml, TYPE_SEP, NULL, 0, 0, 0, 0, NULL, bg, NULL, 0, 0, 0)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2770 #define NEW_BR_BIT gtk_imhtml_new_bit (imhtml, TYPE_BR, NULL, 0, 0, 0, 0, \
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2771 fonts ? fonts->data : NULL, bg, NULL, 0, 0, 0)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2772 #define NEW_COMMENT_BIT gtk_imhtml_new_bit (imhtml, TYPE_COMMENT, ws, bold, italics, underline, strike, \
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2773 fonts ? fonts->data : NULL, bg, url, pre, sub, sup)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2774
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2775 #define NEW_BIT(bit) ws [wpos] = '\0'; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2776 { GtkIMHtmlBit *tmp = bit; if (tmp != NULL) \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2777 newbits = g_list_append (newbits, tmp); } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2778 wpos = 0; ws [wpos] = '\0'
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2779
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2780 #define UPDATE_BG_COLORS \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2781 { \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2782 GdkColormap *cmap; \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2783 GList *rev; \
1476
721cd9b73704 [gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1473
diff changeset
2784 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); \
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2785 rev = g_list_last (newbits); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2786 while (rev) { \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2787 GtkIMHtmlBit *bit = rev->data; \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2788 if (bit->bg) \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2789 gdk_color_free (bit->bg); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2790 bit->bg = gdk_color_copy (bg); \
1582
4fcd012c0a6a [gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1574
diff changeset
2791 if (bit->type == TYPE_BR) \
4fcd012c0a6a [gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1574
diff changeset
2792 break; \
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2793 rev = g_list_previous (rev); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2794 } \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2795 if (!rev) { \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2796 rev = g_list_last (imhtml->bits); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2797 while (rev) { \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2798 GtkIMHtmlBit *bit = rev->data; \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2799 if (bit->bg) \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2800 gdk_color_free (bit->bg); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2801 bit->bg = gdk_color_copy (bg); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2802 gdk_color_alloc (cmap, bit->bg); \
1582
4fcd012c0a6a [gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1574
diff changeset
2803 if (bit->type == TYPE_BR) \
4fcd012c0a6a [gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1574
diff changeset
2804 break; \
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2805 rev = g_list_previous (rev); \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2806 } \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2807 } \
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2808 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2809
1472
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2810 static gboolean
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2811 gtk_imhtml_is_amp_escape (const gchar *string,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2812 gchar *replace,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2813 gint *length)
1472
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2814 {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2815 g_return_val_if_fail (string != NULL, FALSE);
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2816 g_return_val_if_fail (replace != NULL, FALSE);
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2817 g_return_val_if_fail (length != NULL, FALSE);
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2818
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2819 if (!g_strncasecmp (string, "&amp;", 5)) {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2820 *replace = '&';
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2821 *length = 5;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2822 } else if (!g_strncasecmp (string, "&lt;", 4)) {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2823 *replace = '<';
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2824 *length = 4;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2825 } else if (!g_strncasecmp (string, "&gt;", 4)) {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2826 *replace = '>';
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2827 *length = 4;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2828 } else if (!g_strncasecmp (string, "&nbsp;", 6)) {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2829 *replace = ' ';
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2830 *length = 6;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2831 } else if (!g_strncasecmp (string, "&copy;", 6)) {
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
2832 *replace = '©'; /* was: '©' */
1472
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2833 *length = 6;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2834 } else if (!g_strncasecmp (string, "&quot;", 6)) {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2835 *replace = '\"';
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2836 *length = 6;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2837 } else if (!g_strncasecmp (string, "&reg;", 5)) {
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3705
diff changeset
2838 *replace = '®'; /* was: '®' */
1472
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2839 *length = 5;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2840 } else if (*(string + 1) == '#') {
2022
199ba82faacb [gaim-migrate @ 2032]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2002
diff changeset
2841 guint pound = 0;
3004
bfd2b1ef907c [gaim-migrate @ 3017]
Sean Egan <seanegan@gmail.com>
parents: 3000
diff changeset
2842 if ((sscanf (string, "&#%u;", &pound) == 1) && pound != 0) {
1472
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2843 if (*(string + 3 + (gint)log10 (pound)) != ';')
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2844 return FALSE;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2845 *replace = (gchar)pound;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2846 *length = 2;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2847 while (isdigit ((gint) string [*length])) (*length)++;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2848 if (string [*length] == ';') (*length)++;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2849 } else {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2850 return FALSE;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2851 }
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2852 } else {
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2853 return FALSE;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2854 }
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2855
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2856 return TRUE;
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2857 }
be620a051d6d [gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1463
diff changeset
2858
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2859 #define VALID_TAG(x) if (!g_strncasecmp (string, x ">", strlen (x ">"))) { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2860 *tag = g_strndup (string, strlen (x)); \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2861 *len = strlen (x) + 1; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2862 return TRUE; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2863 } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2864 (*type)++
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2865
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2866 #define VALID_OPT_TAG(x) if (!g_strncasecmp (string, x " ", strlen (x " "))) { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2867 const gchar *c = string + strlen (x " "); \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2868 gchar e = '"'; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2869 gboolean quote = FALSE; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2870 while (*c) { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2871 if (*c == '"' || *c == '\'') { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2872 if (quote && (*c == e)) \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2873 quote = !quote; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2874 else if (!quote) { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2875 quote = !quote; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2876 e = *c; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2877 } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2878 } else if (!quote && (*c == '>')) \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2879 break; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2880 c++; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2881 } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2882 if (*c) { \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2883 *tag = g_strndup (string, c - string); \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2884 *len = c - string + 1; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2885 return TRUE; \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2886 } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2887 } \
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2888 (*type)++
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2889
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2890 static gboolean
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2891 gtk_imhtml_is_tag (const gchar *string,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2892 gchar **tag,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2893 gint *len,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2894 gint *type)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2895 {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2896 *type = 1;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2897
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2898 if (!strchr (string, '>'))
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2899 return FALSE;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2900
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2901 VALID_TAG ("B");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2902 VALID_TAG ("BOLD");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2903 VALID_TAG ("/B");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2904 VALID_TAG ("/BOLD");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2905 VALID_TAG ("I");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2906 VALID_TAG ("ITALIC");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2907 VALID_TAG ("/I");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2908 VALID_TAG ("/ITALIC");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2909 VALID_TAG ("U");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2910 VALID_TAG ("UNDERLINE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2911 VALID_TAG ("/U");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2912 VALID_TAG ("/UNDERLINE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2913 VALID_TAG ("S");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2914 VALID_TAG ("STRIKE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2915 VALID_TAG ("/S");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2916 VALID_TAG ("/STRIKE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2917 VALID_TAG ("SUB");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2918 VALID_TAG ("/SUB");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2919 VALID_TAG ("SUP");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2920 VALID_TAG ("/SUP");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2921 VALID_TAG ("PRE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2922 VALID_TAG ("/PRE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2923 VALID_TAG ("TITLE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2924 VALID_TAG ("/TITLE");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2925 VALID_TAG ("BR");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2926 VALID_TAG ("HR");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2927 VALID_TAG ("/FONT");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2928 VALID_TAG ("/A");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2929 VALID_TAG ("P");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2930 VALID_TAG ("/P");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2931 VALID_TAG ("H3");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2932 VALID_TAG ("/H3");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2933 VALID_TAG ("HTML");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2934 VALID_TAG ("/HTML");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2935 VALID_TAG ("BODY");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2936 VALID_TAG ("/BODY");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2937 VALID_TAG ("FONT");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2938 VALID_TAG ("HEAD");
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2939 VALID_TAG ("/HEAD");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2940 VALID_TAG ("BINARY");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2941 VALID_TAG ("/BINARY");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2942
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2943 VALID_OPT_TAG ("HR");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2944 VALID_OPT_TAG ("FONT");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2945 VALID_OPT_TAG ("BODY");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2946 VALID_OPT_TAG ("A");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2947 VALID_OPT_TAG ("IMG");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2948 VALID_OPT_TAG ("P");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2949 VALID_OPT_TAG ("H3");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2950
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2951 if (!g_strncasecmp(string, "!--", strlen ("!--"))) {
2954
f6c4f2187c08 [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
2952 gchar *e = strstr (string + strlen("!--"), "-->");
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2953 if (e) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2954 *len = e - string + strlen ("-->");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2955 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2956 return TRUE;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2957 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2958 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2959
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2960 return FALSE;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2961 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2962
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2963 static gchar*
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2964 gtk_imhtml_get_html_opt (gchar *tag,
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2965 const gchar *opt)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2966 {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2967 gchar *t = tag;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2968 gchar *e, *a;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2969
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2970 while (g_strncasecmp (t, opt, strlen (opt))) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2971 gboolean quote = FALSE;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2972 if (*t == '\0') break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2973 while (*t && !((*t == ' ') && !quote)) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2974 if (*t == '\"')
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2975 quote = ! quote;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2976 t++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2977 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2978 while (*t && (*t == ' ')) t++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2979 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2980
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2981 if (!g_strncasecmp (t, opt, strlen (opt))) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2982 t += strlen (opt);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2983 } else {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2984 return NULL;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2985 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2986
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2987 if ((*t == '\"') || (*t == '\'')) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2988 e = a = ++t;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2989 while (*e && (*e != *(t - 1))) e++;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2990 if (*e == '\0') {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2991 return NULL;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2992 } else
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2993 return g_strndup (a, e - a);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2994 } else {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2995 e = a = t;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2996 while (*e && !isspace ((gint) *e)) e++;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
2997 return g_strndup (a, e - a);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2998 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
2999 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3000
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3001 GString*
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3002 gtk_imhtml_append_text (GtkIMHtml *imhtml,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3003 const gchar *text,
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3004 gint len,
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3005 GtkIMHtmlOptions options)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3006 {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3007 const gchar *c;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3008 gboolean binary = TRUE;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3009 gchar *ws;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3010 gint pos = 0;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3011 gint wpos = 0;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3012
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3013 gchar *tag;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3014 gint tlen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3015 gint type;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3016
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3017 gchar amp;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3018
2871
10b808bee701 [gaim-migrate @ 2884]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2861
diff changeset
3019 gint smilelen;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3020
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3021 GList *newbits = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3022
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3023 guint bold = 0,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3024 italics = 0,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3025 underline = 0,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3026 strike = 0,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3027 sub = 0,
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3028 sup = 0,
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3029 title = 0,
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3030 pre = 0;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3031 GSList *fonts = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3032 GdkColor *bg = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3033 gchar *url = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3034
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3035 GtkAdjustment *vadj;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3036 gboolean scrolldown = TRUE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3037
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3038 GString *retval = NULL;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3039
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3040 g_return_val_if_fail (imhtml != NULL, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3041 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3042 g_return_val_if_fail (text != NULL, NULL);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3043
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3044 if (options & GTK_IMHTML_RETURN_LOG)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3045 retval = g_string_new ("");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3046
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3047 vadj = GTK_LAYOUT (imhtml)->vadjustment;
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3048 if ((vadj->value < imhtml->y - GTK_WIDGET (imhtml)->allocation.height) &&
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3049 (vadj->upper >= GTK_WIDGET (imhtml)->allocation.height))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3050 scrolldown = FALSE;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3051
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3052 c = text;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3053 if (len == -1) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3054 binary = FALSE;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3055 len = strlen (text);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3056 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3057
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3058 ws = g_malloc (len + 1);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3059 ws [0] = '\0';
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3060
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3061 while (pos < len) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3062 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3063 c++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3064 pos++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3065 switch (type) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3066 case 1: /* B */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3067 case 2: /* BOLD */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3068 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3069 bold++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3070 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3071 case 3: /* /B */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3072 case 4: /* /BOLD */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3073 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3074 if (bold)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3075 bold--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3076 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3077 case 5: /* I */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3078 case 6: /* ITALIC */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3079 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3080 italics++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3081 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3082 case 7: /* /I */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3083 case 8: /* /ITALIC */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3084 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3085 if (italics)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3086 italics--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3087 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3088 case 9: /* U */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3089 case 10: /* UNDERLINE */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3090 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3091 underline++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3092 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3093 case 11: /* /U */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3094 case 12: /* /UNDERLINE */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3095 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3096 if (underline)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3097 underline--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3098 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3099 case 13: /* S */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3100 case 14: /* STRIKE */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3101 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3102 strike++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3103 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3104 case 15: /* /S */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3105 case 16: /* /STRIKE */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3106 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3107 if (strike)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3108 strike--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3109 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3110 case 17: /* SUB */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3111 NEW_BIT (NEW_TEXT_BIT);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3112 sub++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3113 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3114 case 18: /* /SUB */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3115 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3116 if (sub)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3117 sub--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3118 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3119 case 19: /* SUP */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3120 NEW_BIT (NEW_TEXT_BIT);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3121 sup++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3122 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3123 case 20: /* /SUP */
1626
59c7e7831ccd [gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1613
diff changeset
3124 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3125 if (sup)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3126 sup--;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3127 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3128 case 21: /* PRE */
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3129 NEW_BIT (NEW_TEXT_BIT);
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3130 pre++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3131 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3132 case 22: /* /PRE */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3133 NEW_BIT (NEW_TEXT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3134 if (pre)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3135 pre--;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3136 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3137 case 23: /* TITLE */
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3138 NEW_BIT (NEW_TEXT_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3139 title++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3140 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3141 case 24: /* /TITLE */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3142 if (title) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3143 if (options & GTK_IMHTML_NO_TITLE) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3144 wpos = 0;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3145 ws [wpos] = '\0';
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3146 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3147 title--;
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3148 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3149 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3150 case 25: /* BR */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3151 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3152 NEW_BIT (NEW_BR_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3153 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3154 case 26: /* HR */
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3155 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3156 NEW_BIT (NEW_SEP_BIT);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3157 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3158 case 27: /* /FONT */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3159 if (fonts) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3160 FontDetail *font = fonts->data;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3161 NEW_BIT (NEW_TEXT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3162 fonts = g_slist_remove (fonts, font);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3163 if (font->face)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3164 g_free (font->face);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3165 if (font->fore)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3166 gdk_color_free (font->fore);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3167 if (font->back)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3168 gdk_color_free (font->back);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3169 g_free (font);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3170 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3171 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3172 case 28: /* /A */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3173 if (url) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3174 NEW_BIT (NEW_TEXT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3175 g_free (url);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3176 url = NULL;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3177 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3178 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3179 case 29: /* P */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3180 case 30: /* /P */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3181 case 31: /* H3 */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3182 case 32: /* /H3 */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3183 case 33: /* HTML */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3184 case 34: /* /HTML */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3185 case 35: /* BODY */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3186 case 36: /* /BODY */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3187 case 37: /* FONT */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3188 case 38: /* HEAD */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3189 case 39: /* /HEAD */
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3190 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3191 case 40: /* BINARY */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3192
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3193 NEW_BIT (NEW_TEXT_BIT);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3194 while (pos < len) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3195 if (!g_strncasecmp("</BINARY>", c, strlen("</BINARY>")))
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3196 break;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3197 else {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3198 c++;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3199 pos++;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3200 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3201 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3202 c = c - tlen; /* Because it will add this later */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3203 break;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3204 case 41: /* /BINARY */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3205 break;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3206
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3207 case 42: /* HR (opt) */
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3208 NEW_BIT (NEW_TEXT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3209 NEW_BIT (NEW_SEP_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3210 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3211 case 43: /* FONT (opt) */
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3212 {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3213 gchar *color, *back, *face, *size;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3214 FontDetail *font;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3215
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3216 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3217 back = gtk_imhtml_get_html_opt (tag, "BACK=");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3218 face = gtk_imhtml_get_html_opt (tag, "FACE=");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3219 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3220
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3221 if (!(color || back || face || size))
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3222 break;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3223
1738
bcd7f80f0086 [gaim-migrate @ 1748]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1703
diff changeset
3224 NEW_BIT (NEW_TEXT_BIT);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3225
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3226 font = g_new0 (FontDetail, 1);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3227 if (color && !(options & GTK_IMHTML_NO_COLOURS))
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3228 font->fore = gtk_imhtml_get_color (color);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3229 if (back && !(options & GTK_IMHTML_NO_COLOURS))
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3230 font->back = gtk_imhtml_get_color (back);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3231 if (face && !(options & GTK_IMHTML_NO_FONTS))
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3232 font->face = g_strdup (face);
2898
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3233 if (size && !(options & GTK_IMHTML_NO_SIZES)) {
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3234 if (*size == '+') {
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3235 sscanf (size + 1, "%hd", &font->size);
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3236 font->size += 3;
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3237 } else if (*size == '-') {
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3238 sscanf (size + 1, "%hd", &font->size);
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3239 font->size = MAX (0, 3 - font->size);
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3240 } else if (isdigit (*size)) {
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3241 sscanf (size, "%hd", &font->size);
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3242 }
eef6c9ca18c9 [gaim-migrate @ 2911]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2897
diff changeset
3243 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3244
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3245 g_free (color);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3246 g_free (back);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3247 g_free (face);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3248 g_free (size);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3249
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3250 if (fonts) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3251 FontDetail *oldfont = fonts->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3252 if (!font->size)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3253 font->size = oldfont->size;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3254 if (!font->face && oldfont->face)
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3255 font->face = g_strdup (oldfont->face);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3256 if (!font->fore && oldfont->fore)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3257 font->fore = gdk_color_copy (oldfont->fore);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3258 if (!font->back && oldfont->back)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3259 font->back = gdk_color_copy (oldfont->back);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3260 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3261
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3262 fonts = g_slist_prepend (fonts, font);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3263 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3264 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3265 case 44: /* BODY (opt) */
2885
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3266 if (!(options & GTK_IMHTML_NO_COLOURS)) {
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3267 gchar *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3268 if (bgcolor) {
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3269 GdkColor *tmp = gtk_imhtml_get_color (bgcolor);
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3270 g_free (bgcolor);
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3271 if (tmp) {
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3272 NEW_BIT (NEW_TEXT_BIT);
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3273 bg = tmp;
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3274 UPDATE_BG_COLORS;
f72efa29c109 [gaim-migrate @ 2898]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2871
diff changeset
3275 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3276 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3277 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3278 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3279 case 45: /* A (opt) */
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3280 {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3281 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3282 if (href) {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3283 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3284 g_free (url);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3285 url = href;
1453
ecf700f23852 [gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1449
diff changeset
3286 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3287 }
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3288 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3289 case 46: /* IMG (opt) */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3290 {
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3291 gchar *src = gtk_imhtml_get_html_opt (tag, "SRC=");
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3292 gchar *id = gtk_imhtml_get_html_opt (tag, "ID=");
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3293 gchar *datasize = gtk_imhtml_get_html_opt (tag, "DATASIZE=");
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3294 gchar **xpm;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3295 GdkColor *clr;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3296 GtkIMHtmlBit *bit;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3297
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3298 if (!src)
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3299 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3300
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3301 if (!imhtml->img && id && datasize) { /* This is an embedded IM image */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3302 char *tmp, *imagedata, *e;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3303 const gchar *alltext;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3304 struct im_image *img;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3305 GdkPixbufLoader *load;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3306 GdkPixbuf *imagepb = NULL;
3382
e9a89676d120 [gaim-migrate @ 3401]
Sean Egan <seanegan@gmail.com>
parents: 3374
diff changeset
3307 GError *err;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3308 NEW_BIT (NEW_TEXT_BIT);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3309 if (!id || !datasize)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3310 break;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3311 tmp = g_malloc(strlen("<DATA ID=\"\" SIZE=\"\">") +
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3312 strlen(id) + strlen(datasize));
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3313 g_snprintf(tmp, strlen("<DATA ID=\"\" SIZE=\"\">") +
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3314 strlen(id) + strlen(datasize) + 1,
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3315 "<DATA ID=\"%s\" SIZE=\"%s\">", id, datasize);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3316 alltext = c;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3317 while (g_strncasecmp(alltext, tmp, strlen(tmp)) && alltext < (c + len))
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3318 alltext++;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3319 alltext = alltext + strlen("<DATA ID=\"\" SIZE=\"\">") + strlen(id) + strlen(datasize);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3320 g_free(tmp);
3010
11827e3d714c [gaim-migrate @ 3023]
Sean Egan <seanegan@gmail.com>
parents: 3007
diff changeset
3321 if (atoi(datasize) > len - pos)
11827e3d714c [gaim-migrate @ 3023]
Sean Egan <seanegan@gmail.com>
parents: 3007
diff changeset
3322 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3323 imagedata = g_malloc(atoi(datasize));
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3324 memcpy(imagedata, alltext, atoi(datasize));
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3325
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3326 if (!GTK_WIDGET_REALIZED (imhtml))
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3327 gtk_widget_realize (GTK_WIDGET (imhtml));
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3328
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3329 img = g_new0 (struct im_image, 1);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3330 tmp = e = src;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3331 while (*tmp){
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3332 if (*tmp == '/' || *tmp == '\\') {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3333 tmp++;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3334 src = tmp;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3335 } else
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3336 tmp++;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3337 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3338
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3339 *tmp = '\0';
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3340
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3341 img->filename = g_strdup(src);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3342 img->len = atoi(datasize);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3343 if (img->len) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3344 img->data = g_malloc(img->len);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3345 memcpy(img->data, imagedata, img->len);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3346 load = gdk_pixbuf_loader_new();
3382
e9a89676d120 [gaim-migrate @ 3401]
Sean Egan <seanegan@gmail.com>
parents: 3374
diff changeset
3347
e9a89676d120 [gaim-migrate @ 3401]
Sean Egan <seanegan@gmail.com>
parents: 3374
diff changeset
3348 if (!gdk_pixbuf_loader_write(load, imagedata,
e9a89676d120 [gaim-migrate @ 3401]
Sean Egan <seanegan@gmail.com>
parents: 3374
diff changeset
3349 img->len, &err))
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3615
diff changeset
3350 debug_printf("IM Image corrupt or unreadable.\n");
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3351 else
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3352 imagepb = gdk_pixbuf_loader_get_pixbuf(load);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3353 img->pb = imagepb;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3354 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3355 if (imagepb) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3356 bit = g_new0 (GtkIMHtmlBit, 1);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3357 bit->type = TYPE_IMG;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3358 bit->img = img;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3359 if (url)
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3360 bit->url = g_strdup (url);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3361
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3362 NEW_BIT (bit);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3363 } else {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3364 g_free(img->filename);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3365 g_free(img->data);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3366 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3367 g_free(imagedata);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3368 g_free(e);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3369 g_free(id);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3370 g_free(datasize);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3371
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3372 break;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3373 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3374
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3375 if (!imhtml->img || ((xpm = imhtml->img (src)) == NULL)) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3376 g_free (src);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3377 break;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3378 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3379
2690
5a207e155c15 [gaim-migrate @ 2703]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2671
diff changeset
3380 if (!fonts || ((clr = ((FontDetail *) fonts->data)->back) == NULL))
1460
36c56d591674 [gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1456
diff changeset
3381 clr = (bg != NULL) ? bg : imhtml->default_bg_color;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3382
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3383 if (!GTK_WIDGET_REALIZED (imhtml))
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3384 gtk_widget_realize (GTK_WIDGET (imhtml));
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3385
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3386 bit = g_new0 (GtkIMHtmlBit, 1);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3387 bit->type = TYPE_IMG;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3388 bit->pm = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (imhtml)->window,
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3389 &bit->bm, clr, xpm);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3390 if (url)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3391 bit->url = g_strdup (url);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3392
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3393 NEW_BIT (bit);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3394
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3395 g_free (src);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3396 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3397 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3398 case 47: /* P (opt) */
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3399 case 48: /* H3 (opt) */
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3400 break;
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3401 case 49: /* comment */
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3402 NEW_BIT (NEW_TEXT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3403 wpos = g_snprintf (ws, len, "%s", tag);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3404 NEW_BIT (NEW_COMMENT_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3405 break;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3406 default:
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3407 break;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3408 }
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3409 g_free (tag);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3410 c += tlen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3411 pos += tlen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3412 } else if (*c == '&' && gtk_imhtml_is_amp_escape (c, &amp, &tlen)) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3413 ws [wpos++] = amp;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3414 c += tlen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3415 pos += tlen;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3416 } else if (*c == '\n') {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3417 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3418 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3419 NEW_BIT (NEW_BR_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3420 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3421 c++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3422 pos++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3423 } else if (gtk_imhtml_is_smiley (imhtml, c, &smilelen)) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3424 NEW_BIT (NEW_TEXT_BIT);
2871
10b808bee701 [gaim-migrate @ 2884]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2861
diff changeset
3425 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3426 NEW_BIT (NEW_SMILEY_BIT);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3427 c += smilelen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3428 pos += smilelen;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3429 } else if (*c) {
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3430 ws [wpos++] = *c++;
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3431 pos++;
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3432 } else {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3433 break;
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3434 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3435 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3436
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3437 NEW_BIT (NEW_TEXT_BIT);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3438
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3439 while (newbits) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3440 GtkIMHtmlBit *bit = newbits->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3441 imhtml->bits = g_list_append (imhtml->bits, bit);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3442 newbits = g_list_remove (newbits, bit);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3443 gtk_imhtml_draw_bit (imhtml, bit);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3444 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3445
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3446 GTK_LAYOUT (imhtml)->height = imhtml->y;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3447 GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3448 gtk_signal_emit_by_name (GTK_OBJECT (GTK_LAYOUT (imhtml)->vadjustment), "changed");
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3449
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3450 gtk_widget_set_usize (GTK_WIDGET (imhtml), -1, imhtml->y);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3451
2671
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3452 if (!(options & GTK_IMHTML_NO_SCROLL) &&
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3453 scrolldown &&
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3454 (imhtml->y >= MAX (1,
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3455 (GTK_WIDGET (imhtml)->allocation.height -
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3456 (GTK_WIDGET (imhtml)->style->ythickness + BORDER_SIZE) * 2))))
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3457 gtk_adjustment_set_value (vadj, imhtml->y -
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3458 MAX (1, (GTK_WIDGET (imhtml)->allocation.height -
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3459 (GTK_WIDGET (imhtml)->style->ythickness +
ffa58bbe595d [gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2655
diff changeset
3460 BORDER_SIZE) * 2)));
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3461
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3462 if (url) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3463 g_free (url);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3464 if (retval)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3465 retval = g_string_append (retval, "</A>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3466 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3467 if (bg)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3468 gdk_color_free (bg);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3469 while (fonts) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3470 FontDetail *font = fonts->data;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3471 fonts = g_slist_remove (fonts, font);
2690
5a207e155c15 [gaim-migrate @ 2703]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2671
diff changeset
3472 if (font->face)
5a207e155c15 [gaim-migrate @ 2703]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2671
diff changeset
3473 g_free (font->face);
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3474 if (font->fore)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3475 gdk_color_free (font->fore);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3476 if (font->back)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3477 gdk_color_free (font->back);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3478 g_free (font);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3479 if (retval)
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3480 retval = g_string_append (retval, "</FONT>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3481 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3482 if (retval) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3483 while (bold) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3484 retval = g_string_append (retval, "</B>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3485 bold--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3486 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3487 while (italics) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3488 retval = g_string_append (retval, "</I>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3489 italics--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3490 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3491 while (underline) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3492 retval = g_string_append (retval, "</U>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3493 underline--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3494 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3495 while (strike) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3496 retval = g_string_append (retval, "</S>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3497 strike--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3498 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3499 while (sub) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3500 retval = g_string_append (retval, "</SUB>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3501 sub--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3502 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3503 while (sup) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3504 retval = g_string_append (retval, "</SUP>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3505 sup--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3506 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3507 while (title) {
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3508 retval = g_string_append (retval, "</TITLE>");
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3509 title--;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3510 }
1691
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3511 while (pre) {
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3512 retval = g_string_append (retval, "</PRE>");
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3513 pre--;
d802b115800f [gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1647
diff changeset
3514 }
1428
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3515 }
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3516 g_free (ws);
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3517
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3518 return retval;
00b3d02a2168 [gaim-migrate @ 1438]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3519 }
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3520
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3521 void
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3522 gtk_imhtml_clear (GtkIMHtml *imhtml)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3523 {
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3524 GtkLayout *layout;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3525
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3526 g_return_if_fail (imhtml != NULL);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3527 g_return_if_fail (GTK_IS_IMHTML (imhtml));
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3528
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3529 layout = GTK_LAYOUT (imhtml);
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3530
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3531 while (imhtml->bits) {
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3532 GtkIMHtmlBit *bit = imhtml->bits->data;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3533 imhtml->bits = g_list_remove (imhtml->bits, bit);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3534 if (bit->text)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3535 g_free (bit->text);
3471
7fb93ecd631c [gaim-migrate @ 3522]
Sean Egan <seanegan@gmail.com>
parents: 3470
diff changeset
3536 if (bit->font)
3608
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
3537 pango_font_description_free(bit->font);
7703b2689791 [gaim-migrate @ 3721]
Sean Egan <seanegan@gmail.com>
parents: 3501
diff changeset
3538 //gdk_font_unref (bit->font);
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3539 if (bit->fore)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3540 gdk_color_free (bit->fore);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3541 if (bit->back)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3542 gdk_color_free (bit->back);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3543 if (bit->bg)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3544 gdk_color_free (bit->bg);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3545 if (bit->url)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3546 g_free (bit->url);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3547 if (bit->pm)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3548 gdk_pixmap_unref (bit->pm);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3549 if (bit->bm)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3550 gdk_bitmap_unref (bit->bm);
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3551 if (bit->img) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3552 g_free(bit->img->filename);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3553 g_free(bit->img->data);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3554 gdk_pixbuf_unref(bit->img->pb);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3555 g_free(bit->img);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3556 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3557
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3558 while (bit->chunks) {
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3559 struct line_info *li = bit->chunks->data;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3560 if (li->text)
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3561 g_free (li->text);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3562 bit->chunks = g_list_remove (bit->chunks, li);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3563 g_free (li);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3564 }
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3565 g_free (bit);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3566 }
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3567
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3568 while (imhtml->click) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3569 g_free (imhtml->click->data);
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3570 imhtml->click = g_list_remove (imhtml->click, imhtml->click->data);
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3571 }
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3572
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3573 while (imhtml->im_images) {
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3574 imhtml->im_images = g_list_remove(imhtml->im_images, imhtml->im_images->data);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3575 }
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3576
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3577 if (imhtml->selected_text) {
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3578 g_string_free (imhtml->selected_text, TRUE);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3579 imhtml->selected_text = g_string_new ("");
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3580 }
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3581
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3582 imhtml->sel_startx = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3583 imhtml->sel_starty = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3584 imhtml->sel_endx = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3585 imhtml->sel_endx = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3586 imhtml->sel_endchunk = NULL;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3587
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3588 if (imhtml->tip_timer) {
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3589 gtk_timeout_remove (imhtml->tip_timer);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3590 imhtml->tip_timer = 0;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3591 }
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3592 if (imhtml->tip_window) {
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3593 gtk_widget_destroy (imhtml->tip_window);
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3594 imhtml->tip_window = NULL;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3595 }
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3596 imhtml->tip_bit = NULL;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3597
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3598 if (imhtml->scroll_timer) {
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3599 gtk_timeout_remove (imhtml->scroll_timer);
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3600 imhtml->scroll_timer = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3601 }
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3602
2993
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3603 g_list_free(imhtml->im_images);
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3604 imhtml->im_images = NULL;
7239a392486c [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
3605
1998
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3606 imhtml->x = 0;
00dc6b2df5b6 [gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1997
diff changeset
3607 imhtml->y = TOP_BORDER;
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3608 imhtml->xsize = 0;
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3609 imhtml->llheight = 0;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3610 imhtml->llascent = 0;
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3611 if (imhtml->line)
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3612 g_list_free (imhtml->line);
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3613 imhtml->line = NULL;
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3614
2621
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3615 layout->hadjustment->page_size = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3616 layout->hadjustment->page_increment = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3617 layout->hadjustment->lower = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3618 layout->hadjustment->upper = imhtml->x;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3619 gtk_adjustment_set_value (layout->hadjustment, 0);
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3620
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3621 layout->vadjustment->page_size = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3622 layout->vadjustment->page_increment = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3623 layout->vadjustment->lower = 0;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3624 layout->vadjustment->upper = imhtml->y;
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3625 gtk_adjustment_set_value (layout->vadjustment, 0);
f8b02cf4af94 [gaim-migrate @ 2634]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2615
diff changeset
3626
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3627 if (GTK_WIDGET_REALIZED (GTK_WIDGET (imhtml))) {
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3628 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor);
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3629 gdk_window_clear (GTK_LAYOUT (imhtml)->bin_window);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3630 gtk_signal_emit_by_name (GTK_OBJECT (layout->hadjustment), "changed");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3631 gtk_signal_emit_by_name (GTK_OBJECT (layout->vadjustment), "changed");
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2826
diff changeset
3632 }
1780
d7cbedd1d651 [gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1738
diff changeset
3633 }
2363
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3634
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3635 void
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3636 gtk_imhtml_page_up (GtkIMHtml *imhtml)
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3637 {
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3638 GtkAdjustment *vadj;
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3639
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3640 g_return_if_fail (imhtml != NULL);
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3641 g_return_if_fail (GTK_IS_IMHTML (imhtml));
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3642
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3643 vadj = GTK_LAYOUT (imhtml)->vadjustment;
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3644 gtk_adjustment_set_value (vadj, MAX (vadj->value - vadj->page_increment,
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3645 vadj->lower));
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3646 gtk_signal_emit_by_name (GTK_OBJECT (vadj), "changed");
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3647 }
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3648
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3649 void
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3650 gtk_imhtml_page_down (GtkIMHtml *imhtml)
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3651 {
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3652 GtkAdjustment *vadj;
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3653
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3654 g_return_if_fail (imhtml != NULL);
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3655 g_return_if_fail (GTK_IS_IMHTML (imhtml));
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3656
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3657 vadj = GTK_LAYOUT (imhtml)->vadjustment;
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3658 gtk_adjustment_set_value (vadj, MIN (vadj->value + vadj->page_increment,
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3659 vadj->upper - vadj->page_size));
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3660 gtk_signal_emit_by_name (GTK_OBJECT (vadj), "changed");
08c66712364c [gaim-migrate @ 2376]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2349
diff changeset
3661 }
3705
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3662
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3663 void
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3664 gtk_imhtml_to_bottom (GtkIMHtml *imhtml)
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3665 {
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3666 GtkAdjustment *vadj;
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3667
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3668 g_return_if_fail (imhtml != NULL);
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3669 g_return_if_fail (GTK_IS_IMHTML (imhtml));
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3670
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3671 vadj = GTK_LAYOUT (imhtml)->vadjustment;
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3672 gtk_adjustment_set_value (vadj, vadj->upper - vadj->page_size);
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3673 gtk_signal_emit_by_name (GTK_OBJECT (vadj), "changed");
91498932cea7 [gaim-migrate @ 3838]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3674 }