Mercurial > pidgin
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 |
| rev | line source |
|---|---|
| 1428 | 1 /* |
| 2 * GtkIMHtml | |
| 3 * | |
| 4 * Copyright (C) 2000, Eric Warmenhoven <warmenhoven@yahoo.com> | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or modify | |
| 7 * under the terms of the GNU General Public License as published by | |
| 8 * the Free Software Foundation; either version 2 of the License, or | |
| 9 * (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 * | |
| 20 */ | |
| 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 | 25 #include "gtkimhtml.h" |
| 3630 | 26 |
| 27 #ifndef _WIN32 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
28 #include <X11/Xlib.h> |
| 3630 | 29 #include <gdk/gdkx.h> |
| 30 #else | |
| 31 #include <gdk/gdkwin32.h> | |
| 32 #endif | |
| 33 | |
| 2993 | 34 #include <stdlib.h> |
| 1428 | 35 #include <gtk/gtk.h> |
| 36 #include <string.h> | |
| 37 #include <ctype.h> | |
| 38 #include <stdio.h> | |
| 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 | 44 |
| 3630 | 45 #ifdef _WIN32 |
| 46 /* GDK_SELECTION_PRIMARY is ignored win32 GTK */ | |
| 47 #undef GDK_SELECTION_PRIMARY | |
| 48 #define GDK_SELECTION_PRIMARY GDK_SELECTION_CLIPBOARD | |
| 49 #endif | |
| 50 | |
| 2993 | 51 #include <gdk-pixbuf/gdk-pixbuf.h> |
| 52 #include <gdk-pixbuf/gdk-pixbuf-loader.h> | |
| 53 | |
| 3608 | 54 #include <pango/pango.h> |
| 55 | |
| 1428 | 56 #include "pixmaps/angel.xpm" |
| 57 #include "pixmaps/bigsmile.xpm" | |
| 58 #include "pixmaps/burp.xpm" | |
| 59 #include "pixmaps/crossedlips.xpm" | |
| 60 #include "pixmaps/cry.xpm" | |
| 61 #include "pixmaps/embarrassed.xpm" | |
| 62 #include "pixmaps/kiss.xpm" | |
| 63 #include "pixmaps/moneymouth.xpm" | |
| 64 #include "pixmaps/sad.xpm" | |
| 65 #include "pixmaps/scream.xpm" | |
| 66 #include "pixmaps/smile.xpm" | |
| 67 #include "pixmaps/smile8.xpm" | |
| 68 #include "pixmaps/think.xpm" | |
| 69 #include "pixmaps/tongue.xpm" | |
| 70 #include "pixmaps/wink.xpm" | |
| 71 #include "pixmaps/yell.xpm" | |
| 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 | 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 | 78 #define DEFAULT_PRE_FACE "sans" |
| 1428 | 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 | 82 #define MIN_HEIGHT 20 |
| 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 | 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 | 90 #define TYPE_TEXT 0 |
| 91 #define TYPE_SMILEY 1 | |
| 92 #define TYPE_IMG 2 | |
| 93 #define TYPE_SEP 3 | |
| 94 #define TYPE_BR 4 | |
| 95 #define TYPE_COMMENT 5 | |
| 96 | |
| 3465 | 97 #define GTK_IMHTML_GET_STYLE_FONT(style) gtk_style_get_font (style) |
| 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 | 101 typedef struct _GtkIMHtmlBit GtkIMHtmlBit; |
| 102 typedef struct _FontDetail FontDetail; | |
| 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 | 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 | 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 | 266 void |
| 267 gtk_imhtml_reset_smileys (GtkIMHtml *imhtml) | |
| 268 { | |
| 269 gtk_imhtml_remove_smileys(imhtml); | |
| 270 gtk_imhtml_init_smileys (imhtml); | |
| 271 } | |
| 272 | |
| 273 | |
| 2993 | 274 struct im_image { |
| 275 gchar *filename; | |
| 276 | |
| 277 gint len; | |
| 278 gpointer data; | |
| 2994 | 279 |
| 2993 | 280 gint x,y; |
| 281 gint width,height; | |
| 282 GtkIMHtml *imhtml; | |
| 283 GtkIMHtmlBit *bit; | |
| 2994 | 284 GdkPixbuf *pb; |
| 2993 | 285 }; |
| 286 | |
| 1428 | 287 struct _GtkIMHtmlBit { |
| 288 gint type; | |
| 289 | |
| 290 gchar *text; | |
| 2993 | 291 struct im_image *img; |
| 1428 | 292 GdkPixmap *pm; |
| 293 GdkBitmap *bm; | |
| 294 | |
| 3608 | 295 PangoFontDescription *font; |
| 1428 | 296 GdkColor *fore; |
| 297 GdkColor *back; | |
| 298 GdkColor *bg; | |
| 299 gboolean underline; | |
| 300 gboolean strike; | |
| 301 gchar *url; | |
| 302 | |
| 303 GList *chunks; | |
| 304 }; | |
| 305 | |
| 306 struct _FontDetail { | |
| 307 gushort size; | |
| 308 gchar *face; | |
| 309 GdkColor *fore; | |
| 310 GdkColor *back; | |
| 311 }; | |
| 312 | |
| 313 struct line_info { | |
| 314 gint x; | |
| 315 gint y; | |
| 316 gint width; | |
| 317 gint height; | |
| 318 gint ascent; | |
| 319 | |
| 320 gboolean selected; | |
| 321 gchar *sel_start; | |
| 322 gchar *sel_end; | |
| 323 | |
| 324 gchar *text; | |
| 325 GtkIMHtmlBit *bit; | |
| 326 }; | |
| 327 | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
328 struct clickable { |
| 1428 | 329 gint x; |
| 330 gint y; | |
| 331 gint width; | |
| 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 | 335 }; |
| 336 | |
| 337 static GtkLayoutClass *parent_class = NULL; | |
| 338 | |
| 339 enum { | |
| 340 TARGET_STRING, | |
| 341 TARGET_TEXT, | |
| 342 TARGET_COMPOUND_TEXT | |
| 343 }; | |
| 344 | |
| 345 enum { | |
| 346 URL_CLICKED, | |
| 347 LAST_SIGNAL | |
| 348 }; | |
| 349 static guint signals [LAST_SIGNAL] = { 0 }; | |
| 350 | |
| 351 static void gtk_imhtml_draw_bit (GtkIMHtml *, GtkIMHtmlBit *); | |
| 352 static GdkColor *gtk_imhtml_get_color (const gchar *); | |
| 353 static gint gtk_imhtml_motion_notify_event (GtkWidget *, GdkEventMotion *); | |
| 354 | |
| 355 static void | |
|
2671
ffa58bbe595d
[gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2655
diff
changeset
|
356 gtk_imhtml_finalize (GObject *object) |
| 1428 | 357 { |
| 358 GtkIMHtml *imhtml; | |
| 359 | |
| 360 imhtml = GTK_IMHTML (object); | |
| 361 | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
362 gtk_imhtml_clear (imhtml); |
| 1428 | 363 |
| 364 if (imhtml->selected_text) | |
| 365 g_string_free (imhtml->selected_text, TRUE); | |
| 366 | |
|
2541
8229710b343b
[gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2365
diff
changeset
|
367 if (imhtml->default_font) |
| 3608 | 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 | 373 if (imhtml->default_hl_color) |
| 374 gdk_color_free (imhtml->default_hl_color); | |
| 375 if (imhtml->default_hlfg_color) | |
| 376 gdk_color_free (imhtml->default_hlfg_color); | |
| 3608 | 377 |
| 1428 | 378 gdk_cursor_destroy (imhtml->hand_cursor); |
| 379 gdk_cursor_destroy (imhtml->arrow_cursor); | |
| 380 | |
|
2349
60c716c32c40
[gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2348
diff
changeset
|
381 gtk_smiley_tree_destroy (imhtml->smiley_data); |
| 1428 | 382 |
|
2671
ffa58bbe595d
[gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2655
diff
changeset
|
383 G_OBJECT_CLASS (parent_class)->finalize (object); |
| 1428 | 384 } |
| 385 | |
| 386 static void | |
| 387 gtk_imhtml_realize (GtkWidget *widget) | |
| 388 { | |
| 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 | 392 |
| 393 g_return_if_fail (widget != NULL); | |
| 394 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 395 | |
| 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 | 426 |
| 427 widget->style = gtk_style_attach (widget->style, widget->window); | |
| 428 | |
| 429 gdk_window_set_cursor (widget->window, imhtml->arrow_cursor); | |
| 430 | |
| 3608 | 431 imhtml->context = gtk_widget_get_pango_context(widget); |
| 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 | 434 gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]); |
| 435 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, | |
| 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 (>K_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 (>K_WIDGET (imhtml)->style->base [GTK_STATE_NORMAL]); |
| 2993 | 440 imhtml->default_hl_color = gdk_color_copy (>K_WIDGET (imhtml)->style->bg [GTK_STATE_SELECTED]); |
| 441 imhtml->default_hlfg_color=gdk_color_copy (>K_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 | 462 } |
| 463 | |
| 3608 | 464 /* This is an expensive function! Don't blame me. I only stole it from eel */ |
| 465 static gint | |
| 466 text_width(PangoContext *context, PangoFontDescription *desc, | |
| 467 const char *text, gint len) | |
| 468 { | |
| 3614 | 469 static PangoLayout *layout = NULL; |
| 3608 | 470 int width; |
| 471 | |
| 3614 | 472 if (layout == NULL) |
| 473 layout = pango_layout_new(context); | |
| 474 | |
| 3608 | 475 pango_layout_set_font_description(layout, desc); |
| 476 pango_layout_set_text(layout, text, len); | |
| 477 pango_layout_get_pixel_size(layout, &width, NULL); | |
| 478 | |
| 3614 | 479 /* g_object_unref(G_OBJECT(layout)); */ |
| 3608 | 480 |
| 481 return width; | |
| 482 } | |
| 483 | |
| 484 static gint | |
| 485 string_width(PangoContext *context, PangoFontDescription *desc, | |
| 486 const char *text) | |
| 487 { | |
| 488 return text_width(context, desc, text, -1); | |
| 489 } | |
| 490 | |
| 491 static void | |
| 492 set_layout_font(PangoLayout *layout, const char *text, guint len, | |
| 493 PangoFontDescription *desc) | |
| 494 { | |
| 495 PangoAttribute *attr; | |
| 496 PangoAttrList *list; | |
| 497 | |
| 498 if (len == -1) | |
| 499 len = strlen(text); | |
| 500 | |
| 501 attr = pango_attr_font_desc_new(desc); | |
| 502 | |
| 503 attr->start_index = 0; | |
| 504 attr->end_index = len; | |
| 505 | |
| 506 list = pango_attr_list_new(); | |
| 507 pango_attr_list_insert(list, attr); | |
| 508 | |
| 509 pango_layout_set_attributes(layout, list); | |
| 510 pango_attr_list_unref(list); | |
| 511 | |
| 512 pango_layout_set_indent(layout, 0); | |
| 513 pango_layout_set_justify(layout, FALSE); | |
| 514 pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT); | |
| 515 } | |
| 516 | |
| 517 static gint | |
| 518 get_layout_first_baseline(PangoLayout* layout) | |
| 519 { | |
| 520 PangoLayoutIter* iter = pango_layout_get_iter(layout); | |
| 521 gint result = pango_layout_iter_get_baseline(iter) / PANGO_SCALE; | |
| 522 pango_layout_iter_free(iter); | |
| 523 return result; | |
| 524 } | |
| 525 | |
| 1428 | 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 | 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 | 536 PangoLayout *layout; |
| 537 PangoFontMetrics *metrics; | |
| 2993 | 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 | 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 | 567 if (bit->back != NULL) { |
| 568 gdk_color_alloc (cmap, bit->back); | |
| 569 gdk_gc_set_foreground (gc, bit->back); | |
| 570 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, | |
| 3608 | 571 string_width (imhtml->context, bit->font, line->text), line->height); |
| 3471 | 572 bg = bit->back; |
| 573 } | |
| 574 | |
| 575 bg = gdk_color_copy (bg); | |
| 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 | 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 | 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 | 594 end = strchr(line->text, '\0'); |
| 595 | |
| 3608 | 596 width = text_width (imhtml->context, bit->font, line->text, end - line->text) - x; |
| 2993 | 597 |
| 598 gdk_gc_set_foreground (gc, imhtml->default_hl_color); | |
| 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 | 602 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color); |
| 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 | 625 |
| 626 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL); | |
| 2993 | 627 |
| 3471 | 628 if (start) { |
| 629 int offset = 0; | |
| 3608 | 630 |
| 631 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), NULL); | |
| 632 pango_layout_set_text(layout, line->text, start - line->text); | |
| 633 set_layout_font(layout, line->text, start - line->text, bit->font); | |
| 634 gdk_draw_layout(window, gc, line->x - xoff, | |
| 635 line->y - yoff + line->ascent - | |
| 636 get_layout_first_baseline(layout), layout); | |
| 637 g_object_unref(G_OBJECT(layout)); | |
| 638 | |
| 639 offset = text_width (imhtml->context, bit->font, line->text, start - line->text); | |
| 3471 | 640 if (bit->underline || bit->url) |
| 641 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, | |
| 642 line->y - yoff + line->ascent + 1, | |
| 643 offset, 1); | |
| 644 if (bit->strike) | |
| 645 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, | |
| 3608 | 646 line->y - yoff + line->ascent - |
| 647 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2), | |
| 3471 | 648 offset, 1); |
| 649 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color); | |
| 3608 | 650 |
| 651 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), NULL); | |
| 652 pango_layout_set_text(layout, start, end - start); | |
| 653 set_layout_font(layout, start, end - start, bit->font); | |
| 654 gdk_draw_layout(window, gc, line->x - xoff + offset, | |
| 655 line->y - yoff + line->ascent - | |
| 656 get_layout_first_baseline(layout), layout); | |
| 657 g_object_unref(G_OBJECT(layout)); | |
| 658 | |
| 3471 | 659 if (bit->underline || bit->url) |
| 660 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset, | |
| 661 line->y - yoff + line->ascent + 1, | |
| 3608 | 662 text_width (imhtml->context, bit->font, line->text, end - start), 1); |
| 3471 | 663 if (bit->strike) |
| 664 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset, | |
| 3608 | 665 line->y - yoff + line->ascent - |
| 666 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2), | |
| 667 text_width (imhtml->context, bit->font, line->text, end - start), 1); | |
| 668 offset = text_width (imhtml->context, bit->font, line->text, end - line->text); | |
| 3471 | 669 gdk_gc_set_foreground (gc, fg); |
| 3608 | 670 |
| 671 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), end); | |
| 672 set_layout_font(layout, end, -1, bit->font); | |
| 673 gdk_draw_layout(window, gc, line->x - xoff + offset, | |
| 674 line->y - yoff + line->ascent - | |
| 675 get_layout_first_baseline(layout), layout); | |
| 676 | |
| 677 g_object_unref(G_OBJECT(layout)); | |
| 678 | |
| 3471 | 679 if (bit->underline || bit->url) |
| 680 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset, | |
| 681 line->y - yoff + line->ascent + 1, | |
| 3608 | 682 string_width (imhtml->context, bit->font, end), 1); |
| 3471 | 683 if (bit->strike) |
| 684 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff + offset, | |
| 3608 | 685 line->y - yoff + line->ascent - |
| 686 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2), | |
| 687 string_width (imhtml->context, bit->font, end), 1); | |
| 3471 | 688 } else { |
| 3608 | 689 layout = gtk_widget_create_pango_layout(GTK_WIDGET(imhtml), line->text); |
| 690 set_layout_font(layout, line->text, -1, bit->font); | |
| 691 gdk_draw_layout(window, gc, line->x - xoff, | |
| 692 line->y - yoff + line->ascent - | |
| 693 get_layout_first_baseline(layout), layout); | |
| 694 g_object_unref(G_OBJECT(layout)); | |
| 695 | |
| 3471 | 696 if (bit->underline || bit->url) |
| 697 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff + line->ascent + 1, | |
| 3608 | 698 string_width (imhtml->context, bit->font, line->text), 1); |
| 3471 | 699 if (bit->strike) |
| 700 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, | |
| 3608 | 701 line->y - yoff + line->ascent - |
| 702 ((pango_font_metrics_get_ascent(metrics) / PANGO_SCALE) / 2), | |
| 703 string_width (imhtml->context, bit->font, line->text), 1); | |
| 2993 | 704 } |
| 705 | |
| 3608 | 706 pango_font_metrics_unref(metrics); |
| 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 | 735 |
| 3000 | 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 | 746 if (line->selected) { |
| 747 gdk_color_alloc (cmap, imhtml->default_hl_color); | |
| 748 gdk_gc_set_foreground(gc, imhtml->default_hl_color); | |
| 749 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, | |
| 750 width, line->height); | |
| 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 | 756 if (bit->bm) { |
| 757 gdk_gc_set_clip_mask(gc, bit->bm); | |
| 758 gdk_gc_set_clip_origin(gc, line->x - xoff, line->y - yoff + hoff); | |
| 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 | 786 if (line->selected) { |
| 787 gdk_color_alloc (cmap, imhtml->default_hl_color); | |
| 788 gdk_gc_set_foreground (gc, imhtml->default_hl_color); | |
| 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 | 792 } else { |
| 793 gdk_color_alloc (cmap, imhtml->default_bg_color); | |
| 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 | 797 gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff, |
| 798 line->width, line->height); | |
| 799 | |
| 800 | |
| 801 if (line->selected) { | |
| 802 gdk_color_alloc (cmap, imhtml->default_hlfg_color); | |
| 803 gdk_gc_set_foreground (gc, imhtml->default_hlfg_color); | |
| 804 } else { | |
| 805 gdk_color_alloc (cmap, imhtml->default_fg_color); | |
| 806 gdk_gc_set_foreground (gc, imhtml->default_fg_color); | |
| 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 | 832 gtk_paint_focus (widget->style, widget->window, GTK_STATE_NORMAL, NULL, widget, "text", |
| 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 | 901 } |
| 902 | |
| 903 static void | |
| 904 gtk_imhtml_style_set (GtkWidget *widget, | |
| 905 GtkStyle *style) | |
| 906 { | |
| 907 GtkIMHtml *imhtml; | |
| 908 | |
| 909 g_return_if_fail (widget != NULL); | |
| 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 | 915 if (!GTK_WIDGET_REALIZED (widget)) |
| 916 return; | |
| 917 | |
| 918 imhtml = GTK_IMHTML (widget); | |
| 2994 | 919 if (imhtml->default_fg_color) |
| 920 gdk_color_free(imhtml->default_fg_color); | |
| 921 if (imhtml->default_bg_color) | |
| 922 gdk_color_free(imhtml->default_bg_color); | |
| 923 if (imhtml->default_hl_color) | |
| 924 gdk_color_free(imhtml->default_hl_color); | |
| 925 if (imhtml->default_hlfg_color) | |
| 926 gdk_color_free(imhtml->default_hlfg_color); | |
| 927 imhtml->default_fg_color = gdk_color_copy (>K_WIDGET (imhtml)->style->fg [GTK_STATE_NORMAL]); | |
| 928 imhtml->default_bg_color = gdk_color_copy (>K_WIDGET (imhtml)->style->base [GTK_STATE_NORMAL]); | |
| 929 imhtml->default_hl_color = gdk_color_copy (>K_WIDGET (imhtml)->style->bg [GTK_STATE_SELECTED]); | |
| 930 imhtml->default_hlfg_color=gdk_color_copy (>K_WIDGET (imhtml)->style->fg [GTK_STATE_SELECTED]); | |
| 931 gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]); | |
| 932 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, | |
| 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 | 935 } |
| 936 | |
| 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 | 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 | 950 } |
| 951 | |
| 952 static void | |
| 953 gtk_imhtml_redraw_all (GtkIMHtml *imhtml) | |
| 954 { | |
| 955 GList *b; | |
| 956 GtkIMHtmlBit *bit; | |
| 957 GtkAdjustment *vadj; | |
| 958 gfloat oldvalue; | |
|
1527
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
959 gint oldy; |
| 1428 | 960 |
| 961 vadj = GTK_LAYOUT (imhtml)->vadjustment; | |
| 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 | 964 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
965 gtk_layout_freeze (GTK_LAYOUT (imhtml)); |
| 1428 | 966 |
| 967 g_list_free (imhtml->line); | |
| 968 imhtml->line = NULL; | |
| 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 | 973 } |
| 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 | 977 imhtml->llheight = 0; |
| 978 imhtml->llascent = 0; | |
| 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 | 985 b = imhtml->bits; |
| 986 while (b) { | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
987 bit = b->data; |
| 1428 | 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 | 997 } |
| 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 | 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 | 1026 } |
| 1027 | |
| 1028 static void | |
| 1029 gtk_imhtml_size_allocate (GtkWidget *widget, | |
| 1030 GtkAllocation *allocation) | |
| 1031 { | |
| 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 | 1035 |
| 1036 g_return_if_fail (widget != NULL); | |
| 1037 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 1038 g_return_if_fail (allocation != NULL); | |
| 1039 | |
| 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 | 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 | 1081 return; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1082 } |
| 1428 | 1083 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1084 imhtml->xsize = new_xsize; |
| 1428 | 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 | 1088 } |
| 1089 | |
| 1090 static void | |
| 1091 gtk_imhtml_select_none (GtkIMHtml *imhtml) | |
| 1092 { | |
| 1093 GList *bits; | |
| 1094 GList *chunks; | |
| 1095 GtkIMHtmlBit *bit; | |
| 1096 struct line_info *chunk; | |
| 1097 | |
| 1098 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1099 | |
| 1100 bits = imhtml->bits; | |
| 1101 while (bits) { | |
| 1102 bit = bits->data; | |
| 1103 chunks = bit->chunks; | |
| 1104 | |
| 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 | 1119 |
| 1120 chunks = g_list_next (chunks); | |
| 1121 } | |
| 1122 | |
| 1123 bits = g_list_next (bits); | |
| 1124 } | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1125 imhtml->sel_endchunk = NULL; |
| 1428 | 1126 } |
| 1127 | |
| 1128 static gchar* | |
| 3608 | 1129 get_position (GtkIMHtml *imhtml, |
| 1130 struct line_info *chunk, | |
| 1428 | 1131 gint x, |
| 1132 gboolean smileys) | |
| 1133 { | |
| 1134 gint width = x - chunk->x; | |
| 1135 gchar *text; | |
| 1136 gchar *pos; | |
| 1137 guint total = 0; | |
| 1138 | |
| 1139 switch (chunk->bit->type) { | |
| 1140 case TYPE_TEXT: | |
| 1141 case TYPE_COMMENT: | |
| 1142 text = chunk->text; | |
| 1143 break; | |
| 1144 case TYPE_SMILEY: | |
| 1145 if (smileys) | |
| 1146 return NULL; | |
| 1147 else | |
| 1148 text = chunk->text; | |
| 1149 break; | |
| 1150 default: | |
| 1151 return NULL; | |
| 1152 break; | |
| 1153 } | |
| 1154 | |
| 1155 if (width <= 0) | |
| 1156 return text; | |
| 1157 | |
| 1158 for (pos = text; *pos != '\0'; pos++) { | |
| 3608 | 1159 gint char_width = text_width (imhtml->context, chunk->bit->font, pos, 1); |
| 1428 | 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 | 1162 return pos; |
| 1163 else | |
| 1164 return ++pos; | |
| 1165 } | |
| 1166 total += char_width; | |
| 1167 } | |
| 1168 | |
| 1169 return pos; | |
| 1170 } | |
| 1171 | |
| 1172 static GString* | |
| 1173 append_to_sel (GString *string, | |
| 1174 struct line_info *chunk, | |
| 1175 gboolean smileys) | |
| 1176 { | |
| 1177 GString *new_string; | |
| 1178 gchar *buf; | |
| 1179 gchar *start; | |
| 1180 gint length; | |
| 1181 | |
| 1182 switch (chunk->bit->type) { | |
| 1183 case TYPE_TEXT: | |
| 1184 case TYPE_COMMENT: | |
| 1185 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start; | |
| 1186 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 1187 if (length <= 0) | |
| 1188 return string; | |
| 1189 buf = g_strndup (start, length); | |
| 1190 break; | |
| 1191 case TYPE_SMILEY: | |
| 1192 if (smileys) { | |
| 1193 start = (chunk->sel_start == NULL) ? chunk->bit->text : chunk->sel_start; | |
| 1194 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 1195 if (length <= 0) | |
| 1196 return string; | |
| 1197 buf = g_strndup (start, length); | |
| 1198 } else { | |
| 1199 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start; | |
| 1200 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 1201 if (length <= 0) | |
| 1202 return string; | |
| 1203 buf = g_strndup (start, length); | |
| 1204 } | |
| 1205 break; | |
| 1206 case TYPE_BR: | |
| 1207 buf = g_strdup ("\n"); | |
| 1208 break; | |
| 1209 default: | |
| 1210 return string; | |
| 1211 break; | |
| 1212 } | |
| 1213 | |
| 1214 new_string = g_string_append (string, buf); | |
| 1215 g_free (buf); | |
| 1216 | |
| 1217 return new_string; | |
| 1218 } | |
| 1219 | |
| 2982 | 1220 static void |
| 1221 chunk_select_words (struct line_info *chunk) | |
| 1222 { | |
| 1223 char *start, *end; | |
| 1224 | |
| 1225 start = chunk->sel_start; | |
| 1226 end = chunk->sel_end; | |
| 1227 | |
| 3208 | 1228 if (start != chunk->text) { |
| 1229 if (isalnum(*start) || *start == '\'') | |
| 1230 while (start > chunk->text && | |
| 1231 (isalnum(*(start-1)) || *(start-1) == '\'')) | |
| 1232 start--; | |
| 1233 else if (isspace(*start)) | |
| 1234 while (start > chunk->text && isspace(*(start-1))) | |
| 1235 start--; | |
| 1236 else if (ispunct(*start)) | |
| 1237 while (start > chunk->text && ispunct(*(start-1))) | |
| 1238 start--; | |
| 1239 } | |
| 2982 | 1240 chunk->sel_start = start; |
| 1241 | |
| 3208 | 1242 if (end != NULL) { |
| 1243 if (isalnum(*end) || *end == '\'') | |
| 1244 while (*end != '\0' && | |
| 1245 (isalnum(*end) || *end == '\'')) | |
| 1246 end++; | |
| 1247 else if (isspace(*end)) | |
| 1248 while (*end != '\0' && isspace(*end)) | |
| 1249 end++; | |
| 1250 else if (ispunct(*end)) | |
| 1251 while (*end != '\0' && ispunct(*end)) | |
| 1252 end++; | |
| 1253 } | |
| 2982 | 1254 chunk->sel_end = end; |
| 1255 } | |
| 1256 | |
| 1428 | 1257 #define COORDS_IN_CHUNK(xx, yy) (((xx) < chunk->x + chunk->width) && \ |
| 1258 ((yy) < chunk->y + chunk->height)) | |
| 1259 | |
| 1260 static void | |
| 1261 gtk_imhtml_select_bits (GtkIMHtml *imhtml) | |
| 1262 { | |
| 1263 GList *bits; | |
| 1264 GList *chunks; | |
| 1265 GtkIMHtmlBit *bit; | |
| 1266 struct line_info *chunk; | |
| 1267 | |
| 1268 guint startx = imhtml->sel_startx, | |
| 1269 starty = imhtml->sel_starty, | |
| 1270 endx = imhtml->sel_endx, | |
| 1271 endy = imhtml->sel_endy; | |
| 1272 gchar *new_pos; | |
| 1273 gint selection = 0; | |
| 2982 | 1274 guint mode = imhtml->sel_mode; |
| 1428 | 1275 gboolean smileys = imhtml->smileys; |
| 1276 gboolean redraw = FALSE; | |
| 1277 gboolean got_start = FALSE; | |
| 1278 gboolean got_end = FALSE; | |
| 1279 | |
| 1280 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1281 | |
| 1282 if (!imhtml->selection) | |
| 1283 return; | |
| 1284 | |
| 1285 if (imhtml->selected_text) { | |
| 1286 g_string_free (imhtml->selected_text, TRUE); | |
| 1287 imhtml->selected_text = g_string_new (""); | |
| 1288 } | |
| 1289 | |
| 2982 | 1290 if (mode == 2) |
| 1291 startx = endx = 0; | |
| 1292 | |
| 1428 | 1293 bits = imhtml->bits; |
| 1294 while (bits) { | |
| 1295 bit = bits->data; | |
| 1296 chunks = bit->chunks; | |
| 1297 | |
| 1298 while (chunks) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1299 chunk = chunks->data; |
| 1428 | 1300 |
| 1301 switch (selection) { | |
| 1302 case 0: | |
| 1303 if (COORDS_IN_CHUNK (startx, starty)) { | |
| 3608 | 1304 new_pos = get_position (imhtml, chunk, startx, smileys); |
| 2982 | 1305 if (!chunk->selected || |
| 1428 | 1306 (chunk->sel_start != new_pos) || |
| 1307 (chunk->sel_end != NULL)) | |
| 1308 redraw = TRUE; | |
| 1309 chunk->selected = TRUE; | |
| 1310 chunk->sel_start = new_pos; | |
| 1311 chunk->sel_end = NULL; | |
| 1312 selection++; | |
| 1313 got_start = TRUE; | |
| 2982 | 1314 if (mode == 2) |
| 1315 endy += chunk->height; | |
| 1316 if (mode == 1) | |
| 1317 chunk_select_words (chunk); | |
| 1428 | 1318 } |
| 1319 | |
| 1320 if (COORDS_IN_CHUNK (endx, endy)) { | |
| 1321 if (got_start) { | |
| 3608 | 1322 new_pos = get_position (imhtml, chunk, endx, smileys); |
| 1428 | 1323 if (chunk->sel_end != new_pos) |
| 1324 redraw = TRUE; | |
| 1325 if (chunk->sel_start > new_pos) { | |
| 1326 chunk->sel_end = chunk->sel_start; | |
| 1327 chunk->sel_start = new_pos; | |
| 1328 } else | |
| 1329 chunk->sel_end = new_pos; | |
| 1330 selection = 2; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1331 imhtml->sel_endchunk = chunk; |
| 1428 | 1332 got_end = TRUE; |
| 2982 | 1333 if (mode == 1) |
| 1334 chunk_select_words (chunk); | |
| 1428 | 1335 } else { |
| 3608 | 1336 new_pos = get_position (imhtml, chunk, endx, smileys); |
| 1428 | 1337 if ( !chunk->selected || |
| 1338 (chunk->sel_start != new_pos) || | |
| 1339 (chunk->sel_end != NULL)) | |
| 1340 redraw = TRUE; | |
| 1341 chunk->selected = TRUE; | |
| 1342 chunk->sel_start = new_pos; | |
| 1343 chunk->sel_end = NULL; | |
| 1344 selection++; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1345 imhtml->sel_endchunk = chunk; |
| 1428 | 1346 got_end = TRUE; |
| 2982 | 1347 if (mode == 2) |
| 1348 starty += chunk->height; | |
| 1349 if (mode == 1) | |
| 1350 chunk_select_words (chunk); | |
| 1428 | 1351 } |
| 1352 } else if (!COORDS_IN_CHUNK (startx, starty) && !got_start) { | |
| 1353 if (chunk->selected) | |
| 1354 redraw = TRUE; | |
| 1355 chunk->selected = FALSE; | |
| 1356 chunk->sel_start = chunk->text; | |
| 1357 chunk->sel_end = NULL; | |
| 1358 } | |
| 1359 | |
| 1360 break; | |
| 1361 case 1: | |
| 1362 if (!got_start && COORDS_IN_CHUNK (startx, starty)) { | |
| 3608 | 1363 new_pos = get_position (imhtml, chunk, startx, smileys); |
| 1428 | 1364 if ( !chunk->selected || |
| 1365 (chunk->sel_end != new_pos) || | |
| 1366 (chunk->sel_start != chunk->text)) | |
| 1367 redraw = TRUE; | |
| 1368 chunk->selected = TRUE; | |
| 1369 chunk->sel_start = chunk->text; | |
| 1370 chunk->sel_end = new_pos; | |
| 1371 selection++; | |
| 1372 got_start = TRUE; | |
| 2982 | 1373 if (mode == 1) |
| 1374 chunk_select_words (chunk); | |
| 1428 | 1375 } else if (!got_end && COORDS_IN_CHUNK (endx, endy)) { |
| 3608 | 1376 new_pos = get_position (imhtml, chunk, endx, smileys); |
| 1428 | 1377 if ( !chunk->selected || |
| 1378 (chunk->sel_end != new_pos) || | |
| 1379 (chunk->sel_start != chunk->text)) | |
| 1380 redraw = TRUE; | |
| 1381 chunk->selected = TRUE; | |
| 1382 chunk->sel_start = chunk->text; | |
| 1383 chunk->sel_end = new_pos; | |
| 1384 selection++; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1385 imhtml->sel_endchunk = chunk; |
| 1428 | 1386 got_end = TRUE; |
| 2982 | 1387 if (mode == 1) |
| 1388 chunk_select_words (chunk); | |
| 1428 | 1389 } else { |
| 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 | 1393 redraw = TRUE; |
| 1394 chunk->selected = TRUE; | |
| 1395 chunk->sel_start = chunk->text; | |
| 1396 chunk->sel_end = NULL; | |
| 1397 } | |
| 1398 | |
| 1399 break; | |
| 1400 case 2: | |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
1401 if (chunk->selected) |
| 1428 | 1402 redraw = TRUE; |
| 1403 chunk->selected = FALSE; | |
| 1404 chunk->sel_start = chunk->text; | |
| 1405 chunk->sel_end = NULL; | |
| 1406 break; | |
| 1407 } | |
| 1408 | |
| 1409 if (chunk->selected == TRUE) | |
| 1410 imhtml->selected_text = append_to_sel (imhtml->selected_text, | |
| 1411 chunk, smileys); | |
| 1412 | |
| 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 | 1420 redraw = FALSE; |
| 1421 } | |
| 1422 | |
| 1423 chunks = g_list_next (chunks); | |
| 1424 } | |
| 1425 | |
| 1426 bits = g_list_next (bits); | |
| 1427 } | |
| 1428 } | |
| 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 | 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 | 1465 static gint |
| 1466 scroll_timeout (GtkIMHtml *imhtml) | |
| 1467 { | |
| 1468 GdkEventMotion event; | |
| 1469 gint x, y; | |
| 1470 GdkModifierType mask; | |
| 1471 | |
| 1472 imhtml->scroll_timer = 0; | |
| 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 | 1475 |
| 1476 if (mask & GDK_BUTTON1_MASK) { | |
| 1477 event.is_hint = 0; | |
| 1478 event.x = x; | |
| 1479 event.y = y; | |
| 1480 event.state = mask; | |
| 1481 | |
| 1482 gtk_imhtml_motion_notify_event (GTK_WIDGET (imhtml), &event); | |
| 1483 } | |
| 1484 | |
| 1485 return FALSE; | |
| 1486 } | |
| 1487 | |
| 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 | 1491 int x,y; |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1492 GtkStyle *style; |
| 3465 | 1493 PangoLayout *layout; |
| 1494 if (imhtml->tip_bit->url) | |
| 1495 layout = gtk_widget_create_pango_layout (imhtml->tip_window, imhtml->tip_bit->url); | |
| 1496 else if (imhtml->tip_bit->img) | |
| 1497 layout = gtk_widget_create_pango_layout (imhtml->tip_window, imhtml->tip_bit->img->filename); | |
| 1498 else | |
| 1499 return FALSE; | |
| 1500 | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1501 style = imhtml->tip_window->style; |
| 3465 | 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 | 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 | 1510 gtk_paint_layout (style, imhtml->tip_window->window, GTK_STATE_NORMAL, TRUE, |
| 1511 NULL, imhtml->tip_window, "tooltip", 4, 4, layout); | |
| 1512 | |
| 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 | 1523 PangoLayout *layout; |
| 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 | 1543 layout = gtk_widget_create_pango_layout(imhtml->tip_window, |
| 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 | 1549 pango_layout_get_size(layout, &w, &h); |
| 1550 | |
| 1551 w = PANGO_PIXELS(w) + 8; | |
| 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 | 1566 y = y - h; |
| 2071 | 1567 else |
| 3465 | 1568 y = y + h - 4; |
| 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 | 1575 g_object_unref(layout); |
| 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 | 1581 gtk_imhtml_motion_notify_event (GtkWidget *widget, |
| 1582 GdkEventMotion *event) | |
| 1583 { | |
| 1584 gint x, y; | |
| 1585 GdkModifierType state; | |
| 1586 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1587 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1588 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1589 | |
| 1590 if (event->is_hint) | |
| 1591 gdk_window_get_pointer (event->window, &x, &y, &state); | |
| 1592 else { | |
| 1593 x = event->x + hadj->value; | |
| 1594 y = event->y + vadj->value; | |
| 1595 state = event->state; | |
| 1596 } | |
| 1597 | |
| 1598 if (state & GDK_BUTTON1_MASK) { | |
| 1599 gint diff; | |
| 1600 gint height = vadj->page_size; | |
| 1601 gint yy = y - vadj->value; | |
| 1602 | |
| 1603 if (((yy < 0) || (yy > height)) && | |
| 1604 (imhtml->scroll_timer == 0) && | |
| 1605 (vadj->upper > vadj->page_size)) { | |
| 1606 imhtml->scroll_timer = gtk_timeout_add (100, | |
| 1607 (GtkFunction) scroll_timeout, | |
| 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 | 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 | 1612 } |
| 1613 | |
| 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 | 1616 imhtml->sel_endx = MAX (x, 0); |
| 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 | 1622 (y > chunk->y + chunk->height) || |
| 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 | 1627 } |
| 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 | 1634 if ((uw->bit->url) && (x > uw->x) && (x < uw->x + uw->width) && |
| 2993 | 1635 (y > uw->y) && (y < uw->y + uw->height) && |
| 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 | 1649 if (uw->bit->url) |
| 1650 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, | |
| 1651 imhtml->hand_cursor); | |
| 1428 | 1652 return TRUE; |
| 1653 } | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
1654 click = g_list_next (click); |
| 1428 | 1655 } |
| 1656 } | |
| 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 | 1669 |
| 1670 return TRUE; | |
| 1671 } | |
| 1672 | |
| 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 | 1688 return TRUE; |
|
1613
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1689 } |
| 2993 | 1690 struct imgsv { |
| 1691 GtkWidget *savedialog; | |
| 1692 struct im_image *img; | |
| 1693 }; | |
| 1694 | |
| 1695 static void | |
| 1696 save_img (GtkObject *object, | |
| 1697 gpointer data) | |
| 1698 { | |
| 1699 struct imgsv *is = data; | |
| 1700 struct im_image *img = is->img; | |
| 3374 | 1701 const gchar *filename; |
| 2993 | 1702 FILE *f; |
| 1703 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(is->savedialog)); | |
| 3630 | 1704 debug_printf("Saving %s\n", filename); |
| 2993 | 1705 if (! (f=fopen(filename, "w"))) { |
| 1706 /* There should be some sort of dialog */ | |
| 3630 | 1707 debug_printf("Could not open file for writing.\n"); |
| 2993 | 1708 gtk_widget_destroy(is->savedialog); |
| 1709 g_free(is); | |
| 1710 return; | |
| 1711 } | |
| 1712 | |
| 1713 fwrite(img->data, 1, img->len, f); | |
| 1714 fclose(f); | |
| 1715 gtk_widget_destroy(is->savedialog); | |
| 1716 g_free(is); | |
| 1717 } | |
| 1718 | |
| 1719 static void | |
| 1720 save_img_dialog (GtkObject *object, | |
| 1721 gpointer data) | |
| 1722 { | |
| 1723 struct imgsv *is = g_malloc(sizeof(struct imgsv)); | |
| 1724 struct im_image *img = data; | |
| 1725 GtkWidget *savedialog = gtk_file_selection_new ("Gaim - Save Image"); | |
| 1726 gtk_file_selection_set_filename (GTK_FILE_SELECTION(savedialog), img->filename); | |
| 1727 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(savedialog)->cancel_button), | |
| 1728 "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), | |
| 1729 (gpointer) savedialog); | |
| 1730 | |
| 1731 is->img = img; | |
| 1732 is->savedialog = savedialog; | |
| 1733 | |
| 1734 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(savedialog)->ok_button), | |
| 1735 "clicked", GTK_SIGNAL_FUNC (save_img), is); | |
| 1736 gtk_widget_show (savedialog); | |
| 1737 | |
| 1738 | |
| 1739 } | |
| 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 | 1770 gtk_imhtml_button_press_event (GtkWidget *widget, |
| 1771 GdkEventButton *event) | |
| 1772 { | |
| 1773 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1774 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1775 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1776 gint x, y; | |
| 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 | 1781 if (event->button == 1) { |
| 2982 | 1782 imhtml->sel_startx = imhtml->sel_endx = x; |
| 1783 imhtml->sel_starty = imhtml->sel_endy = y; | |
| 1428 | 1784 imhtml->selection = TRUE; |
| 2982 | 1785 if (event->type == GDK_BUTTON_PRESS) { |
| 1786 imhtml->sel_mode = 0; /* select by letter */ | |
| 1787 gtk_imhtml_select_none (imhtml); | |
| 1788 } else if (event->type == GDK_2BUTTON_PRESS) { | |
| 1789 imhtml->sel_mode = 1; /* select by word */ | |
| 1790 gtk_imhtml_select_none (imhtml); | |
| 1791 } else if (event->type == GDK_3BUTTON_PRESS) { | |
| 1792 imhtml->sel_mode = 2; /* select by line */ | |
| 1793 gtk_imhtml_select_bits (imhtml); | |
| 1794 } | |
| 1428 | 1795 } |
| 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 | 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 | 1808 /* |
| 1809 * If a menu already exists, destroy it before creating a new one, | |
| 1810 * thus freeing-up the memory it occupied. | |
| 1811 */ | |
| 1812 if(menu) | |
| 1813 gtk_widget_destroy(menu); | |
| 1814 | |
| 1815 menu = gtk_menu_new(); | |
| 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 | 1831 if (uw->bit->img) { |
| 1832 button = gtk_menu_item_new_with_label ("Save Image"); | |
| 1833 gtk_signal_connect (GTK_OBJECT (button), "activate", | |
| 1834 GTK_SIGNAL_FUNC (save_img_dialog), uw->bit->img); | |
| 1835 gtk_menu_append (GTK_MENU (menu), button); | |
| 1836 gtk_widget_show (button); | |
| 1837 } | |
| 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 | 1857 return TRUE; |
| 1858 } | |
| 1859 | |
| 1860 static gint | |
| 1861 gtk_imhtml_button_release_event (GtkWidget *widget, | |
| 1862 GdkEventButton *event) | |
| 1863 { | |
| 1864 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1865 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1866 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1867 gint x, y; | |
| 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 | 1872 if ((event->button == 1) && imhtml->selection) { |
| 2982 | 1873 if ((x == imhtml->sel_startx) && (y == imhtml->sel_starty) && |
| 1874 (imhtml->sel_mode == 0)) { | |
| 1428 | 1875 imhtml->sel_startx = imhtml->sel_starty = 0; |
| 1876 imhtml->selection = FALSE; | |
| 1877 gtk_imhtml_select_none (imhtml); | |
| 1878 } else { | |
| 1879 imhtml->sel_endx = MAX (x, 0); | |
| 1880 imhtml->sel_endy = MAX (y, 0); | |
| 1881 gtk_imhtml_select_bits (imhtml); | |
| 1882 } | |
| 1883 | |
| 1884 gtk_selection_owner_set (widget, GDK_SELECTION_PRIMARY, event->time); | |
| 1885 } | |
| 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 | 1903 return TRUE; |
| 1904 } | |
| 1905 | |
| 1906 static void | |
| 1907 gtk_imhtml_selection_get (GtkWidget *widget, | |
| 1908 GtkSelectionData *sel_data, | |
| 1909 guint sel_info, | |
| 1910 guint32 time) | |
| 1911 { | |
| 1912 GtkIMHtml *imhtml; | |
| 1913 gchar *string; | |
| 1914 gint length; | |
| 1915 | |
| 1916 g_return_if_fail (widget != NULL); | |
| 1917 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 1918 g_return_if_fail (sel_data->selection == GDK_SELECTION_PRIMARY); | |
| 1919 | |
| 1920 imhtml = GTK_IMHTML (widget); | |
| 1921 | |
| 1922 g_return_if_fail (imhtml->selected_text != NULL); | |
| 1923 g_return_if_fail (imhtml->selected_text->str != NULL); | |
| 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 | 1930 |
| 1931 if (sel_info == TARGET_STRING) { | |
| 1932 gtk_selection_data_set (sel_data, | |
| 1933 GDK_SELECTION_TYPE_STRING, | |
| 1934 8 * sizeof (gchar), | |
| 1935 (guchar *) string, | |
| 1936 length); | |
| 1937 } else if ((sel_info == TARGET_TEXT) || (sel_info == TARGET_COMPOUND_TEXT)) { | |
| 1938 guchar *text; | |
| 1939 GdkAtom encoding; | |
| 1940 gint format; | |
| 1941 gint new_length; | |
| 1942 | |
| 1943 gdk_string_to_compound_text (string, &encoding, &format, &text, &new_length); | |
| 1944 gtk_selection_data_set (sel_data, encoding, format, text, new_length); | |
| 1945 gdk_free_compound_text (text); | |
| 1946 } | |
| 1947 | |
|
2188
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1948 g_free (string); |
| 1428 | 1949 } |
| 1950 | |
| 1951 static gint | |
| 1952 gtk_imhtml_selection_clear_event (GtkWidget *widget, | |
| 1953 GdkEventSelection *event) | |
| 1954 { | |
| 1955 GtkIMHtml *imhtml; | |
| 1956 | |
| 1957 g_return_val_if_fail (widget != NULL, FALSE); | |
| 1958 g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE); | |
| 1959 g_return_val_if_fail (event != NULL, FALSE); | |
| 1960 g_return_val_if_fail (event->selection == GDK_SELECTION_PRIMARY, TRUE); | |
| 1961 | |
| 1962 if (!gtk_selection_clear (widget, event)) | |
| 1963 return FALSE; | |
| 1964 | |
| 1965 imhtml = GTK_IMHTML (widget); | |
| 1966 | |
| 1967 gtk_imhtml_select_none (imhtml); | |
| 1968 | |
| 1969 return TRUE; | |
| 1970 } | |
| 1971 | |
| 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 | 1992 gtk_imhtml_set_scroll_adjustments (GtkLayout *layout, |
| 1993 GtkAdjustment *hadj, | |
| 1994 GtkAdjustment *vadj) | |
| 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 | 2042 } |
| 2043 | |
| 2044 static void | |
| 2045 gtk_imhtml_class_init (GtkIMHtmlClass *class) | |
| 2046 { | |
|
2671
ffa58bbe595d
[gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2655
diff
changeset
|
2047 GObjectClass *gobject_class; |
| 1428 | 2048 GtkObjectClass *object_class; |
| 2049 GtkWidgetClass *widget_class; | |
| 2050 GtkLayoutClass *layout_class; | |
| 2051 | |
|
2671
ffa58bbe595d
[gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2655
diff
changeset
|
2052 gobject_class = (GObjectClass*) class; |
| 1428 | 2053 object_class = (GtkObjectClass*) class; |
| 2054 widget_class = (GtkWidgetClass*) class; | |
| 2055 layout_class = (GtkLayoutClass*) class; | |
| 2056 | |
| 2057 parent_class = gtk_type_class (GTK_TYPE_LAYOUT); | |
| 2058 | |
| 2059 signals [URL_CLICKED] = | |
| 2060 gtk_signal_new ("url_clicked", | |
| 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 | 2063 GTK_SIGNAL_OFFSET (GtkIMHtmlClass, url_clicked), |
| 2064 gtk_marshal_NONE__POINTER, | |
| 2065 GTK_TYPE_NONE, 1, | |
| 2066 GTK_TYPE_POINTER); | |
| 2067 | |
|
2671
ffa58bbe595d
[gaim-migrate @ 2684]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2655
diff
changeset
|
2068 gobject_class->finalize = gtk_imhtml_finalize; |
| 1428 | 2069 |
| 2070 widget_class->realize = gtk_imhtml_realize; | |
| 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 | 2073 widget_class->size_allocate = gtk_imhtml_size_allocate; |
| 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 | 2076 widget_class->button_press_event = gtk_imhtml_button_press_event; |
| 2077 widget_class->button_release_event = gtk_imhtml_button_release_event; | |
| 2078 widget_class->selection_get = gtk_imhtml_selection_get; | |
| 2079 widget_class->selection_clear_event = gtk_imhtml_selection_clear_event; | |
| 2080 | |
| 2081 layout_class->set_scroll_adjustments = gtk_imhtml_set_scroll_adjustments; | |
| 2082 } | |
| 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 | 2104 static const gchar* |
| 3608 | 2105 gtk_imhtml_get_font_name (PangoFontDescription *font) |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
2106 { |
| 3608 | 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 | 2111 static PangoFontDescription * |
| 3471 | 2112 gtk_imhtml_font_load (GtkIMHtml *imhtml, |
| 1428 | 2113 gchar *name, |
| 2114 gboolean bold, | |
| 2115 gboolean italics, | |
| 2116 gint fontsize) | |
| 2117 { | |
| 3608 | 2118 PangoFontDescription *default_font = imhtml->default_font; |
| 2119 PangoFontDescription *ret_font; | |
| 3471 | 2120 |
| 2121 if (!name && !bold && !italics && !fontsize) | |
| 3608 | 2122 return default_font; |
| 2123 // return pango_font_description_copy(default_font); | |
| 2124 | |
| 2125 ret_font = pango_font_description_copy(default_font); | |
| 2126 | |
| 2127 if (name) | |
| 2128 pango_font_description_set_family(ret_font, name); | |
| 2993 | 2129 |
| 3608 | 2130 if (italics) |
| 2131 pango_font_description_set_style(ret_font, PANGO_STYLE_ITALIC); | |
| 2132 | |
| 2133 if (bold) | |
| 2134 pango_font_description_set_weight(ret_font, PANGO_WEIGHT_BOLD); | |
| 2135 | |
| 2136 if (fontsize) | |
| 2137 { | |
| 2138 pango_font_description_set_size(ret_font, | |
| 2139 POINT_SIZE(fontsize) * PANGO_SCALE); | |
| 2140 } | |
| 2141 | |
| 3471 | 2142 return ret_font; |
| 1428 | 2143 } |
| 2993 | 2144 |
| 1428 | 2145 static void |
| 2146 gtk_imhtml_init (GtkIMHtml *imhtml) | |
| 2147 { | |
| 2148 static const GtkTargetEntry targets [] = { | |
| 2149 { "STRING", 0, TARGET_STRING }, | |
| 2150 { "TEXT", 0, TARGET_TEXT }, | |
| 2151 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT } | |
| 2152 }; | |
| 2153 | |
| 2154 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2); | |
| 2155 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); | |
| 2156 | |
| 2157 GTK_WIDGET_SET_FLAGS (GTK_WIDGET (imhtml), GTK_CAN_FOCUS); | |
| 2158 gtk_selection_add_targets (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, targets, 3); | |
| 2159 } | |
| 2160 | |
| 2161 GtkType | |
| 2162 gtk_imhtml_get_type (void) | |
| 2163 { | |
| 2164 static GtkType imhtml_type = 0; | |
| 2165 | |
| 2166 if (!imhtml_type) { | |
| 2167 static const GtkTypeInfo imhtml_info = { | |
| 2168 "GtkIMHtml", | |
| 2169 sizeof (GtkIMHtml), | |
| 2170 sizeof (GtkIMHtmlClass), | |
| 2171 (GtkClassInitFunc) gtk_imhtml_class_init, | |
| 2172 (GtkObjectInitFunc) gtk_imhtml_init, | |
| 2173 NULL, | |
| 2174 NULL, | |
| 2175 NULL | |
| 2176 }; | |
| 2177 | |
| 2178 imhtml_type = gtk_type_unique (GTK_TYPE_LAYOUT, &imhtml_info); | |
| 2179 } | |
| 2180 | |
| 2181 return imhtml_type; | |
| 2182 } | |
| 2183 | |
| 3159 | 2184 void |
|
2349
60c716c32c40
[gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2348
diff
changeset
|
2185 gtk_imhtml_init_smileys (GtkIMHtml *imhtml) |
| 1428 | 2186 { |
| 2187 g_return_if_fail (imhtml != NULL); | |
| 2188 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2189 | |
|
2349
60c716c32c40
[gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2348
diff
changeset
|
2190 imhtml->smiley_data = gtk_smiley_tree_new (); |
| 1428 | 2191 |
| 2192 gtk_imhtml_associate_smiley (imhtml, ":)", smile_xpm); | |
| 2193 gtk_imhtml_associate_smiley (imhtml, ":-)", smile_xpm); | |
| 2194 | |
| 2195 gtk_imhtml_associate_smiley (imhtml, ":(", sad_xpm); | |
| 2196 gtk_imhtml_associate_smiley (imhtml, ":-(", sad_xpm); | |
| 2197 | |
| 2198 gtk_imhtml_associate_smiley (imhtml, ";)", wink_xpm); | |
| 2199 gtk_imhtml_associate_smiley (imhtml, ";-)", wink_xpm); | |
| 2200 | |
| 2201 gtk_imhtml_associate_smiley (imhtml, ":-p", tongue_xpm); | |
| 2202 gtk_imhtml_associate_smiley (imhtml, ":-P", tongue_xpm); | |
| 2203 | |
| 2204 gtk_imhtml_associate_smiley (imhtml, "=-O", scream_xpm); | |
| 3176 | 2205 gtk_imhtml_associate_smiley (imhtml, "=-o", scream_xpm); |
| 1428 | 2206 gtk_imhtml_associate_smiley (imhtml, ":-*", kiss_xpm); |
| 3176 | 2207 gtk_imhtml_associate_smiley (imhtml, ">:O", yell_xpm); |
| 1428 | 2208 gtk_imhtml_associate_smiley (imhtml, ">:o", yell_xpm); |
| 2209 gtk_imhtml_associate_smiley (imhtml, "8-)", smile8_xpm); | |
| 2210 gtk_imhtml_associate_smiley (imhtml, ":-$", moneymouth_xpm); | |
| 2211 gtk_imhtml_associate_smiley (imhtml, ":-!", burp_xpm); | |
| 2212 gtk_imhtml_associate_smiley (imhtml, ":-[", embarrassed_xpm); | |
| 2213 gtk_imhtml_associate_smiley (imhtml, ":'(", cry_xpm); | |
| 2214 | |
| 2215 gtk_imhtml_associate_smiley (imhtml, ":-/", think_xpm); | |
| 2216 gtk_imhtml_associate_smiley (imhtml, ":-\\", think_xpm); | |
| 2217 | |
| 2218 gtk_imhtml_associate_smiley (imhtml, ":-X", crossedlips_xpm); | |
| 3176 | 2219 gtk_imhtml_associate_smiley (imhtml, ":-x", crossedlips_xpm); |
| 1428 | 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 | 2222 gtk_imhtml_associate_smiley (imhtml, "O:-)", angel_xpm); |
| 2223 } | |
| 2224 | |
| 2225 GtkWidget* | |
| 2226 gtk_imhtml_new (GtkAdjustment *hadj, | |
| 2227 GtkAdjustment *vadj) | |
| 2228 { | |
| 2229 GtkIMHtml *imhtml = gtk_type_new (GTK_TYPE_IMHTML); | |
| 2230 | |
| 2231 gtk_imhtml_set_adjustments (imhtml, hadj, vadj); | |
| 2232 | |
| 2993 | 2233 imhtml->im_images = NULL; |
| 2234 | |
| 1428 | 2235 imhtml->bits = NULL; |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2236 imhtml->click = NULL; |
| 1428 | 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 | 2240 imhtml->llheight = 0; |
| 2241 imhtml->llascent = 0; | |
| 2242 imhtml->line = NULL; | |
| 2243 | |
| 2244 imhtml->selected_text = g_string_new (""); | |
| 2245 imhtml->scroll_timer = 0; | |
| 2246 | |
| 2247 imhtml->img = NULL; | |
| 2248 | |
| 2249 imhtml->smileys = TRUE; | |
| 2250 imhtml->comments = FALSE; | |
| 2251 | |
|
2349
60c716c32c40
[gaim-migrate @ 2362]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2348
diff
changeset
|
2252 gtk_imhtml_init_smileys (imhtml); |
| 1428 | 2253 |
| 2254 return GTK_WIDGET (imhtml); | |
| 2255 } | |
| 2256 | |
| 2257 void | |
| 2258 gtk_imhtml_set_adjustments (GtkIMHtml *imhtml, | |
| 2259 GtkAdjustment *hadj, | |
| 2260 GtkAdjustment *vadj) | |
| 2261 { | |
| 2262 gtk_layout_set_hadjustment (GTK_LAYOUT (imhtml), hadj); | |
| 2263 gtk_layout_set_vadjustment (GTK_LAYOUT (imhtml), vadj); | |
| 2264 } | |
| 2265 | |
| 2266 void | |
| 2267 gtk_imhtml_set_defaults (GtkIMHtml *imhtml, | |
| 3608 | 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 | 2271 { |
| 2272 g_return_if_fail (imhtml != NULL); | |
| 2273 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2274 | |
| 2275 if (font) { | |
| 2276 if (imhtml->default_font) | |
| 3608 | 2277 pango_font_description_free(imhtml->default_font); |
| 2278 imhtml->default_font = pango_font_description_copy(font); | |
| 1428 | 2279 } |
| 2280 | |
| 2281 if (fg_color) { | |
| 2282 if (imhtml->default_fg_color) | |
| 2283 gdk_color_free (imhtml->default_fg_color); | |
| 2284 imhtml->default_fg_color = gdk_color_copy (fg_color); | |
| 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 | 2293 } |
| 2294 | |
| 2295 void | |
| 2296 gtk_imhtml_set_img_handler (GtkIMHtml *imhtml, | |
| 2297 GtkIMHtmlImage handler) | |
| 2298 { | |
| 2299 g_return_if_fail (imhtml != NULL); | |
| 2300 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2301 | |
| 2302 imhtml->img = handler; | |
| 2303 } | |
| 2304 | |
| 2305 void | |
| 2306 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml, | |
| 2307 gchar *text, | |
| 2308 gchar **xpm) | |
| 2309 { | |
| 2310 g_return_if_fail (imhtml != NULL); | |
| 2311 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2312 g_return_if_fail (text != NULL); | |
| 2313 | |
| 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 | 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 | 2318 } |
| 2319 | |
| 2320 static void | |
| 2321 new_line (GtkIMHtml *imhtml) | |
| 2322 { | |
| 2323 GList *last = g_list_last (imhtml->line); | |
| 2324 struct line_info *li; | |
| 2325 | |
| 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 | 2330 } |
| 2331 | |
| 2332 last = imhtml->line; | |
| 2333 if (last) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2334 li = last->data; |
| 1428 | 2335 if (li->height < MIN_HEIGHT) { |
| 2336 while (last) { | |
| 2337 gint diff; | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2338 li = last->data; |
| 1428 | 2339 diff = MIN_HEIGHT - li->height; |
| 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 | 2342 last = g_list_next (last); |
| 2343 } | |
| 2344 imhtml->llheight = MIN_HEIGHT; | |
| 2345 } | |
| 2346 } | |
| 2347 | |
| 2348 g_list_free (imhtml->line); | |
| 2349 imhtml->line = NULL; | |
| 2350 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2351 imhtml->x = 0; |
| 1428 | 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 | 2355 } |
| 2356 | |
| 2357 static void | |
| 2358 backwards_update (GtkIMHtml *imhtml, | |
| 2359 GtkIMHtmlBit *bit, | |
| 2360 gint height, | |
| 2361 gint ascent) | |
| 2362 { | |
| 2363 gint diff; | |
| 2364 GList *ls = NULL; | |
| 2365 struct line_info *li; | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2366 struct clickable *uw; |
| 2993 | 2367 struct im_image *img; |
| 3608 | 2368 |
| 1428 | 2369 if (height > imhtml->llheight) { |
| 2370 diff = height - imhtml->llheight; | |
| 2371 | |
| 2372 ls = imhtml->line; | |
| 2373 while (ls) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2374 li = ls->data; |
| 1428 | 2375 li->height += diff; |
| 2376 if (ascent) | |
| 2377 li->ascent = ascent; | |
| 2378 else | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
2379 li->ascent += diff / 2; |
| 1428 | 2380 ls = g_list_next (ls); |
| 2381 } | |
| 2382 | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2383 ls = imhtml->click; |
| 1428 | 2384 while (ls) { |
| 2385 uw = ls->data; | |
| 2386 if (uw->y + diff > imhtml->y) | |
| 2387 uw->y += diff; | |
| 2388 ls = g_list_next (ls); | |
| 2389 } | |
| 2390 | |
| 2993 | 2391 ls = imhtml->im_images; |
| 2392 while(ls) { | |
| 2393 img = ls->data; | |
| 2394 if (img->y + diff > imhtml->y) | |
| 2395 img->y += diff; | |
| 2396 ls = g_list_next(ls); | |
| 2397 } | |
| 2398 | |
| 1428 | 2399 imhtml->llheight = height; |
| 2400 if (ascent) | |
| 2401 imhtml->llascent = ascent; | |
| 2402 else | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
2403 imhtml->llascent += diff / 2; |
| 1428 | 2404 } |
| 2405 } | |
| 2406 | |
| 2407 static void | |
| 2408 add_text_renderer (GtkIMHtml *imhtml, | |
| 2409 GtkIMHtmlBit *bit, | |
| 2410 gchar *text) | |
| 2411 { | |
| 2412 struct line_info *li; | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2413 struct clickable *uw; |
| 3608 | 2414 PangoFontMetrics *metrics; |
| 1428 | 2415 gint width; |
| 2416 | |
| 2417 if (text) | |
| 3608 | 2418 width = string_width (imhtml->context, bit->font, text); |
| 1428 | 2419 else |
| 2420 width = 0; | |
| 2421 | |
| 2422 li = g_new0 (struct line_info, 1); | |
| 2423 li->x = imhtml->x; | |
| 2424 li->y = imhtml->y; | |
| 2425 li->width = width; | |
| 2426 li->height = imhtml->llheight; | |
| 3615 | 2427 if (text) { |
| 2428 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL); | |
| 3608 | 2429 li->ascent = MAX (imhtml->llascent, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE); |
| 3615 | 2430 pango_font_metrics_unref(metrics); |
| 2431 } else | |
| 1428 | 2432 li->ascent = 0; |
| 2433 li->text = text; | |
| 2434 li->bit = bit; | |
| 2435 | |
| 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 | 2438 uw->x = imhtml->x; |
| 2439 uw->y = imhtml->y; | |
| 2440 uw->width = width; | |
| 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 | 2445 } |
| 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 | 2449 } |
| 2450 | |
| 2451 static void | |
| 2452 add_img_renderer (GtkIMHtml *imhtml, | |
| 2453 GtkIMHtmlBit *bit) | |
| 2454 { | |
| 2455 struct line_info *li; | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2456 struct clickable *uw; |
| 1428 | 2457 gint width; |
| 2458 | |
| 2459 gdk_window_get_size (bit->pm, &width, NULL); | |
| 2460 | |
| 2461 li = g_new0 (struct line_info, 1); | |
| 2462 li->x = imhtml->x; | |
| 2463 li->y = imhtml->y; | |
| 2464 li->width = width; | |
| 2465 li->height = imhtml->llheight; | |
| 2466 li->ascent = 0; | |
| 2467 li->bit = bit; | |
| 2468 | |
| 2994 | 2469 |
| 2993 | 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 | 2472 uw->x = imhtml->x; |
| 2473 uw->y = imhtml->y; | |
| 2474 uw->width = width; | |
| 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 | 2479 } |
| 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 | 2483 |
| 2484 imhtml->x += width; | |
| 2485 } | |
| 2486 | |
| 2487 static void | |
| 2488 gtk_imhtml_draw_bit (GtkIMHtml *imhtml, | |
| 2489 GtkIMHtmlBit *bit) | |
| 2490 { | |
| 3608 | 2491 PangoFontMetrics *metrics; |
| 1428 | 2492 gint width, height; |
| 2493 | |
| 2494 g_return_if_fail (imhtml != NULL); | |
| 2495 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2496 g_return_if_fail (bit != NULL); | |
| 2497 | |
| 3608 | 2498 |
|
2954
f6c4f2187c08
[gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents:
2898
diff
changeset
|
2499 if ( ((bit->type == TYPE_TEXT) || |
| 1428 | 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 | 2503 gchar *copy = g_strdup (bit->text); |
| 2504 gint pos = 0; | |
| 2505 gboolean seenspace = FALSE; | |
| 2506 gchar *tmp; | |
| 2507 | |
| 3615 | 2508 metrics = pango_context_get_metrics(imhtml->context, bit->font, NULL); |
| 3608 | 2509 height = (pango_font_metrics_get_ascent(metrics) + pango_font_metrics_get_descent(metrics)) / PANGO_SCALE; |
| 2510 width = string_width (imhtml->context, bit->font, bit->text); | |
| 1428 | 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 | 2514 while (text_width (imhtml->context, bit->font, copy, pos) < remain) { |
| 3471 | 2515 if (copy [pos] == ' ') |
| 2516 seenspace = TRUE; | |
| 2517 pos++; | |
| 1428 | 2518 } |
| 2519 if (seenspace) { | |
| 2520 while (copy [pos - 1] != ' ') pos--; | |
| 2521 | |
| 2522 tmp = g_strndup (copy, pos); | |
| 2523 | |
| 3608 | 2524 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE); |
| 1428 | 2525 add_text_renderer (imhtml, bit, tmp); |
| 2526 } else | |
| 2527 pos = 0; | |
| 2528 seenspace = FALSE; | |
| 2529 new_line (imhtml); | |
| 2530 } | |
| 2531 | |
| 3608 | 2532 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE); |
| 1428 | 2533 |
| 2534 while (pos < strlen (bit->text)) { | |
| 3608 | 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 | 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 | 2539 while (text_width (imhtml->context, bit->font, copy + pos, newpos) < remain) { |
| 3471 | 2540 if (copy [pos + newpos] == ' ') |
| 2541 seenspace = TRUE; | |
| 2542 newpos++; | |
| 2543 } | |
| 1428 | 2544 |
| 2545 if (seenspace) | |
| 2546 while (copy [pos + newpos - 1] != ' ') newpos--; | |
| 2547 | |
| 2548 if (newpos == 0) | |
| 2549 break; | |
| 2550 | |
| 2551 tmp = g_strndup (copy + pos, newpos); | |
| 2552 pos += newpos; | |
| 2553 | |
| 3608 | 2554 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE); |
| 1428 | 2555 add_text_renderer (imhtml, bit, tmp); |
| 2556 | |
| 2557 seenspace = FALSE; | |
| 2558 new_line (imhtml); | |
| 2559 } else { | |
| 2560 tmp = g_strdup (copy + pos); | |
| 2561 | |
| 3608 | 2562 backwards_update (imhtml, bit, height, pango_font_metrics_get_ascent(metrics) / PANGO_SCALE); |
| 1428 | 2563 add_text_renderer (imhtml, bit, tmp); |
| 2564 | |
| 2565 pos = strlen (bit->text); | |
| 2566 | |
| 2567 imhtml->x += width; | |
| 2568 } | |
| 2569 } | |
| 2570 | |
| 3615 | 2571 pango_font_metrics_unref(metrics); |
| 2572 g_free(copy); | |
| 1428 | 2573 } else if ((bit->type == TYPE_SMILEY) || (bit->type == TYPE_IMG)) { |
| 2993 | 2574 if (bit->img) { |
| 2575 GdkPixbuf *imagepb = bit->img->pb; | |
| 2576 GdkPixbuf *tmp = NULL; | |
| 2577 if (gdk_pixbuf_get_width(imagepb) > imhtml->xsize - imhtml->x) | |
| 2578 new_line (imhtml); | |
| 2579 | |
| 2580 if (gdk_pixbuf_get_width(imagepb) > imhtml->xsize) { | |
| 2581 tmp = gdk_pixbuf_scale_simple(imagepb, imhtml->xsize, | |
| 2582 gdk_pixbuf_get_height(imagepb) * | |
| 2583 imhtml->xsize/ | |
| 2584 gdk_pixbuf_get_width(imagepb), | |
| 2585 GDK_INTERP_TILES); | |
| 2586 if (bit->pm) | |
| 2587 gdk_pixmap_unref (bit->pm); | |
| 2588 if (bit->bm) | |
| 2589 gdk_bitmap_unref (bit->bm); | |
| 2590 gdk_pixbuf_render_pixmap_and_mask(tmp, &(bit->pm), &(bit->bm), 100); | |
| 2591 gdk_pixbuf_unref(tmp); | |
| 2592 } | |
| 2593 else { | |
| 2594 if (bit->pm) | |
| 2595 gdk_pixmap_unref (bit->pm); | |
| 2596 if (bit->bm) | |
| 2597 gdk_bitmap_unref (bit->bm); | |
| 2598 gdk_pixbuf_render_pixmap_and_mask(imagepb, &(bit->pm), &(bit->bm), 100); | |
| 2599 } | |
| 2600 } | |
| 2601 | |
| 1428 | 2602 gdk_window_get_size (bit->pm, &width, &height); |
| 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 | 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 | 2608 |
| 2609 add_img_renderer (imhtml, bit); | |
| 2610 } else if (bit->type == TYPE_BR) { | |
| 2611 new_line (imhtml); | |
| 2612 add_text_renderer (imhtml, bit, NULL); | |
| 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 | 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 | 2629 imhtml->llheight = HR_HEIGHT * 2; |
| 2630 new_line (imhtml); | |
| 2631 add_text_renderer (imhtml, bit, NULL); | |
| 2632 } | |
| 3608 | 2633 |
| 1428 | 2634 } |
| 2635 | |
| 2636 void | |
| 2637 gtk_imhtml_show_smileys (GtkIMHtml *imhtml, | |
| 2638 gboolean show) | |
| 2639 { | |
| 2640 g_return_if_fail (imhtml != NULL); | |
| 2641 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2642 | |
| 2643 imhtml->smileys = show; | |
| 2644 | |
| 2645 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml))) | |
| 2646 gtk_imhtml_redraw_all (imhtml); | |
| 2647 } | |
| 2648 | |
| 2649 void | |
| 2650 gtk_imhtml_show_comments (GtkIMHtml *imhtml, | |
| 2651 gboolean show) | |
| 2652 { | |
| 2653 g_return_if_fail (imhtml != NULL); | |
| 2654 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2655 | |
| 2656 imhtml->comments = show; | |
| 2657 | |
| 2658 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml))) | |
| 2659 gtk_imhtml_redraw_all (imhtml); | |
| 2660 } | |
| 2661 | |
| 2662 static GdkColor * | |
| 2663 gtk_imhtml_get_color (const gchar *color) | |
| 2664 { | |
| 2665 GdkColor c; | |
| 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 | 2669 |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
2670 return gdk_color_copy (&c); |
| 1428 | 2671 } |
| 2672 | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2673 static gboolean |
| 1428 | 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 | 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 | 2680 } |
| 2681 | |
| 2682 static GtkIMHtmlBit * | |
| 2683 gtk_imhtml_new_bit (GtkIMHtml *imhtml, | |
| 2684 gint type, | |
| 2685 gchar *text, | |
| 2686 gint bold, | |
| 2687 gint italics, | |
| 2688 gint underline, | |
| 2689 gint strike, | |
| 2690 FontDetail *font, | |
| 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 | 2696 { |
| 2697 GtkIMHtmlBit *bit = NULL; | |
| 2698 | |
| 2699 g_return_val_if_fail (imhtml != NULL, NULL); | |
| 2700 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); | |
| 2701 | |
| 2702 if ((type == TYPE_TEXT) && ((text == NULL) || (strlen (text) == 0))) | |
| 2703 return NULL; | |
| 2704 | |
| 2705 bit = g_new0 (GtkIMHtmlBit, 1); | |
| 2706 bit->type = type; | |
| 2707 | |
| 2708 if ((text != NULL) && (strlen (text) != 0)) | |
| 2709 bit->text = g_strdup (text); | |
| 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 | 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 | 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 | 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 | 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 | 2724 } |
| 2725 | |
| 2726 if (font && (type != TYPE_BR)) { | |
| 2727 if (font->fore != NULL) | |
| 2728 bit->fore = gdk_color_copy (font->fore); | |
| 2729 | |
| 2730 if (font->back != NULL) | |
| 2731 bit->back = gdk_color_copy (font->back); | |
| 2732 } | |
| 2733 } | |
| 2734 | |
| 2735 if (((bit->type == TYPE_TEXT) || (bit->type == TYPE_SMILEY) || (bit->type == TYPE_COMMENT)) && | |
| 3471 | 2736 (bit->font == NULL)) |
| 3608 | 2737 bit->font = pango_font_description_copy (imhtml->default_font); |
| 1428 | 2738 |
| 2739 if (bg != NULL) | |
| 2740 bit->bg = gdk_color_copy (bg); | |
| 2741 | |
| 2742 bit->underline = underline; | |
| 2743 bit->strike = strike; | |
| 2744 | |
| 2745 if (url != NULL) | |
| 2746 bit->url = g_strdup (url); | |
| 2747 | |
| 2748 if (type == TYPE_SMILEY) { | |
| 2749 GdkColor *clr; | |
| 2750 | |
| 2751 if ((font != NULL) && (font->back != NULL)) | |
| 2752 clr = font->back; | |
| 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 | 2755 |
| 2756 bit->pm = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (imhtml)->window, | |
| 2757 &bit->bm, | |
| 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 | 2760 } |
| 2761 | |
| 2762 return bit; | |
| 2763 } | |
| 2764 | |
| 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 | 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 | 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 | 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 | 2779 |
| 2780 #define UPDATE_BG_COLORS \ | |
| 2781 { \ | |
| 2782 GdkColormap *cmap; \ | |
| 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 | 2785 rev = g_list_last (newbits); \ |
| 2786 while (rev) { \ | |
| 2787 GtkIMHtmlBit *bit = rev->data; \ | |
| 2788 if (bit->bg) \ | |
| 2789 gdk_color_free (bit->bg); \ | |
| 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 | 2793 rev = g_list_previous (rev); \ |
| 2794 } \ | |
| 2795 if (!rev) { \ | |
| 2796 rev = g_list_last (imhtml->bits); \ | |
| 2797 while (rev) { \ | |
| 2798 GtkIMHtmlBit *bit = rev->data; \ | |
| 2799 if (bit->bg) \ | |
| 2800 gdk_color_free (bit->bg); \ | |
| 2801 bit->bg = gdk_color_copy (bg); \ | |
| 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 | 2805 rev = g_list_previous (rev); \ |
| 2806 } \ | |
| 2807 } \ | |
| 2808 } | |
| 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, "&", 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, "<", 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, ">", 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, " ", 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, "©", 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, """, 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, "®", 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 | 2842 if ((sscanf (string, "&#%u;", £) == 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 | 2939 VALID_TAG ("/HEAD"); |
| 2940 VALID_TAG ("BINARY"); | |
| 2941 VALID_TAG ("/BINARY"); | |
| 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 | 2990 if (*e == '\0') { |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
2991 return NULL; |
| 2993 | 2992 } else |
| 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 | 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 | 3001 GString* |
| 3002 gtk_imhtml_append_text (GtkIMHtml *imhtml, | |
| 3003 const gchar *text, | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3004 gint len, |
| 1428 | 3005 GtkIMHtmlOptions options) |
| 3006 { | |
| 3007 const gchar *c; | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3008 gboolean binary = TRUE; |
| 1428 | 3009 gchar *ws; |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3010 gint pos = 0; |
| 1428 | 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 | 3021 GList *newbits = NULL; |
| 3022 | |
| 3023 guint bold = 0, | |
| 3024 italics = 0, | |
| 3025 underline = 0, | |
| 3026 strike = 0, | |
| 3027 sub = 0, | |
| 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 | 3031 GSList *fonts = NULL; |
| 3032 GdkColor *bg = NULL; | |
| 3033 gchar *url = NULL; | |
| 3034 | |
| 3035 GtkAdjustment *vadj; | |
| 3036 gboolean scrolldown = TRUE; | |
| 3037 | |
| 3038 GString *retval = NULL; | |
| 3039 | |
| 3040 g_return_val_if_fail (imhtml != NULL, NULL); | |
| 3041 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); | |
| 3042 g_return_val_if_fail (text != NULL, NULL); | |
| 3043 | |
| 3044 if (options & GTK_IMHTML_RETURN_LOG) | |
| 3045 retval = g_string_new (""); | |
| 3046 | |
| 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 | 3049 (vadj->upper >= GTK_WIDGET (imhtml)->allocation.height)) |
| 3050 scrolldown = FALSE; | |
| 3051 | |
| 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 | 3059 ws [0] = '\0'; |
| 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 | 3068 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 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 | 3079 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 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 | 3090 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 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 | 3101 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 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 | 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 | 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 | 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 | 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 | 3151 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 3155 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 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 | 3191 case 40: /* BINARY */ |
| 3192 | |
| 3193 NEW_BIT (NEW_TEXT_BIT); | |
| 3194 while (pos < len) { | |
| 3195 if (!g_strncasecmp("</BINARY>", c, strlen("</BINARY>"))) | |
| 3196 break; | |
| 3197 else { | |
| 3198 c++; | |
| 3199 pos++; | |
| 3200 } | |
| 3201 } | |
| 3202 c = c - tlen; /* Because it will add this later */ | |
| 3203 break; | |
| 3204 case 41: /* /BINARY */ | |
| 3205 break; | |
| 3206 | |
| 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 | 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 | 3223 |
|
1738
bcd7f80f0086
[gaim-migrate @ 1748]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1703
diff
changeset
|
3224 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 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 | 3250 if (fonts) { |
| 3251 FontDetail *oldfont = fonts->data; | |
| 3252 if (!font->size) | |
| 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 | 3255 font->face = g_strdup (oldfont->face); |
| 3256 if (!font->fore && oldfont->fore) | |
| 3257 font->fore = gdk_color_copy (oldfont->fore); | |
| 3258 if (!font->back && oldfont->back) | |
| 3259 font->back = gdk_color_copy (oldfont->back); | |
| 3260 } | |
| 3261 | |
| 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 | 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 | 3276 } |
| 3277 } | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3278 break; |
| 2993 | 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 | 3283 NEW_BIT (NEW_TEXT_BIT); |
| 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 | 3289 case 46: /* IMG (opt) */ |
| 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 | 3292 gchar *id = gtk_imhtml_get_html_opt (tag, "ID="); |
| 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 | 3300 |
| 3301 if (!imhtml->img && id && datasize) { /* This is an embedded IM image */ | |
| 3302 char *tmp, *imagedata, *e; | |
| 3303 const gchar *alltext; | |
| 3304 struct im_image *img; | |
| 3305 GdkPixbufLoader *load; | |
| 3306 GdkPixbuf *imagepb = NULL; | |
| 3382 | 3307 GError *err; |
| 2993 | 3308 NEW_BIT (NEW_TEXT_BIT); |
| 3309 if (!id || !datasize) | |
| 3310 break; | |
| 3311 tmp = g_malloc(strlen("<DATA ID=\"\" SIZE=\"\">") + | |
| 3312 strlen(id) + strlen(datasize)); | |
| 3313 g_snprintf(tmp, strlen("<DATA ID=\"\" SIZE=\"\">") + | |
| 3314 strlen(id) + strlen(datasize) + 1, | |
| 3315 "<DATA ID=\"%s\" SIZE=\"%s\">", id, datasize); | |
| 3316 alltext = c; | |
| 3317 while (g_strncasecmp(alltext, tmp, strlen(tmp)) && alltext < (c + len)) | |
| 3318 alltext++; | |
| 3319 alltext = alltext + strlen("<DATA ID=\"\" SIZE=\"\">") + strlen(id) + strlen(datasize); | |
| 3320 g_free(tmp); | |
| 3010 | 3321 if (atoi(datasize) > len - pos) |
| 3322 break; | |
| 2993 | 3323 imagedata = g_malloc(atoi(datasize)); |
| 3324 memcpy(imagedata, alltext, atoi(datasize)); | |
| 3325 | |
| 3326 if (!GTK_WIDGET_REALIZED (imhtml)) | |
| 3327 gtk_widget_realize (GTK_WIDGET (imhtml)); | |
| 3328 | |
| 3329 img = g_new0 (struct im_image, 1); | |
| 3330 tmp = e = src; | |
| 3331 while (*tmp){ | |
| 3332 if (*tmp == '/' || *tmp == '\\') { | |
| 3333 tmp++; | |
| 3334 src = tmp; | |
| 3335 } else | |
| 3336 tmp++; | |
| 3337 } | |
| 3338 | |
| 3339 *tmp = '\0'; | |
| 3340 | |
| 3341 img->filename = g_strdup(src); | |
| 3342 img->len = atoi(datasize); | |
| 3343 if (img->len) { | |
| 3344 img->data = g_malloc(img->len); | |
| 3345 memcpy(img->data, imagedata, img->len); | |
| 3346 load = gdk_pixbuf_loader_new(); | |
| 3382 | 3347 |
| 3348 if (!gdk_pixbuf_loader_write(load, imagedata, | |
| 3349 img->len, &err)) | |
| 3630 | 3350 debug_printf("IM Image corrupt or unreadable.\n"); |
| 2993 | 3351 else |
| 3352 imagepb = gdk_pixbuf_loader_get_pixbuf(load); | |
| 3353 img->pb = imagepb; | |
| 3354 } | |
| 3355 if (imagepb) { | |
| 3356 bit = g_new0 (GtkIMHtmlBit, 1); | |
| 3357 bit->type = TYPE_IMG; | |
| 3358 bit->img = img; | |
| 3359 if (url) | |
| 3360 bit->url = g_strdup (url); | |
| 3361 | |
| 3362 NEW_BIT (bit); | |
| 3363 } else { | |
| 3364 g_free(img->filename); | |
| 3365 g_free(img->data); | |
| 3366 } | |
| 3367 g_free(imagedata); | |
| 3368 g_free(e); | |
| 3369 g_free(id); | |
| 3370 g_free(datasize); | |
| 3371 | |
| 3372 break; | |
| 3373 } | |
| 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 | 3378 } |
| 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 | 3382 |
| 3383 if (!GTK_WIDGET_REALIZED (imhtml)) | |
| 3384 gtk_widget_realize (GTK_WIDGET (imhtml)); | |
| 3385 | |
| 3386 bit = g_new0 (GtkIMHtmlBit, 1); | |
| 3387 bit->type = TYPE_IMG; | |
| 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 | 3390 if (url) |
| 3391 bit->url = g_strdup (url); | |
| 3392 | |
| 3393 NEW_BIT (bit); | |
| 3394 | |
| 3395 g_free (src); | |
| 3396 } | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3397 break; |
| 2993 | 3398 case 47: /* P (opt) */ |
| 3399 case 48: /* H3 (opt) */ | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2826
diff
changeset
|
3400 break; |
| 2993 | 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 | 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, &, &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 | 3416 } else if (*c == '\n') { |
| 3417 if (!(options & GTK_IMHTML_NO_NEWLINE)) { | |
| 3418 NEW_BIT (NEW_TEXT_BIT); | |
| 3419 NEW_BIT (NEW_BR_BIT); | |
| 3420 } | |
| 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 | 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 | 3434 } |
| 3435 } | |
| 3436 | |
| 3437 NEW_BIT (NEW_TEXT_BIT); | |
| 3438 | |
| 3439 while (newbits) { | |
| 3440 GtkIMHtmlBit *bit = newbits->data; | |
| 3441 imhtml->bits = g_list_append (imhtml->bits, bit); | |
| 3442 newbits = g_list_remove (newbits, bit); | |
| 3443 gtk_imhtml_draw_bit (imhtml, bit); | |
| 3444 } | |
| 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 | 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 | 3461 |
| 3462 if (url) { | |
| 3463 g_free (url); | |
| 3464 if (retval) | |
| 3465 retval = g_string_append (retval, "</A>"); | |
| 3466 } | |
| 3467 if (bg) | |
| 3468 gdk_color_free (bg); | |
| 3469 while (fonts) { | |
| 3470 FontDetail *font = fonts->data; | |
| 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 | 3474 if (font->fore) |
| 3475 gdk_color_free (font->fore); | |
| 3476 if (font->back) | |
| 3477 gdk_color_free (font->back); | |
| 3478 g_free (font); | |
| 3479 if (retval) | |
| 3480 retval = g_string_append (retval, "</FONT>"); | |
| 3481 } | |
| 3482 if (retval) { | |
| 3483 while (bold) { | |
| 3484 retval = g_string_append (retval, "</B>"); | |
| 3485 bold--; | |
| 3486 } | |
| 3487 while (italics) { | |
| 3488 retval = g_string_append (retval, "</I>"); | |
| 3489 italics--; | |
| 3490 } | |
| 3491 while (underline) { | |
| 3492 retval = g_string_append (retval, "</U>"); | |
| 3493 underline--; | |
| 3494 } | |
| 3495 while (strike) { | |
| 3496 retval = g_string_append (retval, "</S>"); | |
| 3497 strike--; | |
| 3498 } | |
| 3499 while (sub) { | |
| 3500 retval = g_string_append (retval, "</SUB>"); | |
| 3501 sub--; | |
| 3502 } | |
| 3503 while (sup) { | |
| 3504 retval = g_string_append (retval, "</SUP>"); | |
| 3505 sup--; | |
| 3506 } | |
| 3507 while (title) { | |
| 3508 retval = g_string_append (retval, "</TITLE>"); | |
| 3509 title--; | |
| 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 | 3515 } |
| 3516 g_free (ws); | |
| 3517 | |
| 3518 return retval; | |
| 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 | 3536 if (bit->font) |
| 3608 | 3537 pango_font_description_free(bit->font); |
| 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 | 3551 if (bit->img) { |
| 3552 g_free(bit->img->filename); | |
| 3553 g_free(bit->img->data); | |
| 3554 gdk_pixbuf_unref(bit->img->pb); | |
| 3555 g_free(bit->img); | |
| 3556 } | |
| 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 | 3572 |
| 3573 while (imhtml->im_images) { | |
| 3574 imhtml->im_images = g_list_remove(imhtml->im_images, imhtml->im_images->data); | |
| 3575 } | |
| 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 | 3603 g_list_free(imhtml->im_images); |
| 3604 imhtml->im_images = NULL; | |
| 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 | 3662 |
| 3663 void | |
| 3664 gtk_imhtml_to_bottom (GtkIMHtml *imhtml) | |
| 3665 { | |
| 3666 GtkAdjustment *vadj; | |
| 3667 | |
| 3668 g_return_if_fail (imhtml != NULL); | |
| 3669 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 3670 | |
| 3671 vadj = GTK_LAYOUT (imhtml)->vadjustment; | |
| 3672 gtk_adjustment_set_value (vadj, vadj->upper - vadj->page_size); | |
| 3673 gtk_signal_emit_by_name (GTK_OBJECT (vadj), "changed"); | |
| 3674 } |
