Mercurial > pidgin
annotate src/gtkimhtml.c @ 2348:dd5f18429dd9
[gaim-migrate @ 2361]
this renders selection better. i still need to rewrite the parser though. parsing for smileys is currently the most expensive thing but the rest of the parser could use some work (parsing tags twice is not good).
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sat, 22 Sep 2001 10:36:29 +0000 |
| parents | 2bf8a8131479 |
| children | 60c716c32c40 |
| 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 | |
| 22 #include "gtkimhtml.h" | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
23 #include <X11/Xlib.h> |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
24 #include <gdk/gdkx.h> |
| 1428 | 25 #include <gtk/gtk.h> |
| 26 #include <string.h> | |
| 27 #include <ctype.h> | |
| 28 #include <stdio.h> | |
| 29 #include <math.h> | |
| 30 | |
| 31 #include "pixmaps/angel.xpm" | |
| 32 #include "pixmaps/bigsmile.xpm" | |
| 33 #include "pixmaps/burp.xpm" | |
| 34 #include "pixmaps/crossedlips.xpm" | |
| 35 #include "pixmaps/cry.xpm" | |
| 36 #include "pixmaps/embarrassed.xpm" | |
| 37 #include "pixmaps/kiss.xpm" | |
| 38 #include "pixmaps/moneymouth.xpm" | |
| 39 #include "pixmaps/sad.xpm" | |
| 40 #include "pixmaps/scream.xpm" | |
| 41 #include "pixmaps/smile.xpm" | |
| 42 #include "pixmaps/smile8.xpm" | |
| 43 #include "pixmaps/think.xpm" | |
| 44 #include "pixmaps/tongue.xpm" | |
| 45 #include "pixmaps/wink.xpm" | |
| 46 #include "pixmaps/yell.xpm" | |
| 47 | |
| 48 #define DEFAULT_FONT_NAME "helvetica" | |
| 49 #define MAX_SIZE 7 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
50 #define MAX_FONTS 32767 |
| 1428 | 51 |
| 52 gint font_sizes [] = { 80, 100, 120, 140, 200, 300, 400 }; | |
| 53 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
54 #define BORDER_SIZE 2 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
55 #define TOP_BORDER 10 |
| 1428 | 56 #define MIN_HEIGHT 20 |
| 57 #define HR_HEIGHT 2 | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
58 #define TOOLTIP_TIMEOUT 500 |
| 1428 | 59 |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
60 #define DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a))) |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
61 #define COLOR_MOD 0x8000 |
|
1647
23b734cf1161
[gaim-migrate @ 1657]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1626
diff
changeset
|
62 #define COLOR_DIFF 0x800 |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
63 |
| 1428 | 64 #define TYPE_TEXT 0 |
| 65 #define TYPE_SMILEY 1 | |
| 66 #define TYPE_IMG 2 | |
| 67 #define TYPE_SEP 3 | |
| 68 #define TYPE_BR 4 | |
| 69 #define TYPE_COMMENT 5 | |
| 70 | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
71 #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
|
72 |
| 1428 | 73 typedef struct _GtkIMHtmlBit GtkIMHtmlBit; |
| 74 typedef struct _FontDetail FontDetail; | |
| 75 | |
| 76 struct _GtkIMHtmlBit { | |
| 77 gint type; | |
| 78 | |
| 79 gchar *text; | |
| 80 GdkPixmap *pm; | |
| 81 GdkBitmap *bm; | |
| 82 | |
| 83 GdkFont *font; | |
| 84 GdkColor *fore; | |
| 85 GdkColor *back; | |
| 86 GdkColor *bg; | |
| 87 gboolean underline; | |
| 88 gboolean strike; | |
| 89 gchar *url; | |
| 90 | |
| 91 GList *chunks; | |
| 92 }; | |
| 93 | |
| 94 struct _FontDetail { | |
| 95 gushort size; | |
| 96 gchar *face; | |
| 97 GdkColor *fore; | |
| 98 GdkColor *back; | |
| 99 }; | |
| 100 | |
| 101 struct line_info { | |
| 102 gint x; | |
| 103 gint y; | |
| 104 gint width; | |
| 105 gint height; | |
| 106 gint ascent; | |
| 107 | |
| 108 gboolean selected; | |
| 109 gchar *sel_start; | |
| 110 gchar *sel_end; | |
| 111 | |
| 112 gchar *text; | |
| 113 GtkIMHtmlBit *bit; | |
| 114 }; | |
| 115 | |
| 116 struct url_widget { | |
| 117 gint x; | |
| 118 gint y; | |
| 119 gint width; | |
| 120 gint height; | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
121 GtkIMHtmlBit *bit; |
| 1428 | 122 }; |
| 123 | |
| 124 static GtkLayoutClass *parent_class = NULL; | |
| 125 | |
| 126 enum { | |
| 127 TARGET_STRING, | |
| 128 TARGET_TEXT, | |
| 129 TARGET_COMPOUND_TEXT | |
| 130 }; | |
| 131 | |
| 132 enum { | |
| 133 URL_CLICKED, | |
| 134 LAST_SIGNAL | |
| 135 }; | |
| 136 static guint signals [LAST_SIGNAL] = { 0 }; | |
| 137 | |
| 138 static void gtk_imhtml_draw_bit (GtkIMHtml *, GtkIMHtmlBit *); | |
| 139 static GdkColor *gtk_imhtml_get_color (const gchar *); | |
| 140 static gint gtk_imhtml_motion_notify_event (GtkWidget *, GdkEventMotion *); | |
| 141 | |
| 142 static void | |
| 143 gtk_imhtml_destroy (GtkObject *object) | |
| 144 { | |
| 145 GtkIMHtml *imhtml; | |
| 146 | |
| 147 imhtml = GTK_IMHTML (object); | |
| 148 | |
| 149 while (imhtml->bits) { | |
| 150 GtkIMHtmlBit *bit = imhtml->bits->data; | |
| 151 imhtml->bits = g_list_remove (imhtml->bits, bit); | |
| 152 if (bit->text) | |
| 153 g_free (bit->text); | |
| 154 if (bit->font) | |
| 155 gdk_font_unref (bit->font); | |
| 156 if (bit->fore) | |
| 157 gdk_color_free (bit->fore); | |
| 158 if (bit->back) | |
| 159 gdk_color_free (bit->back); | |
| 160 if (bit->bg) | |
| 161 gdk_color_free (bit->bg); | |
| 162 if (bit->url) | |
| 163 g_free (bit->url); | |
| 164 if (bit->pm) | |
| 165 gdk_pixmap_unref (bit->pm); | |
| 166 if (bit->bm) | |
| 167 gdk_bitmap_unref (bit->bm); | |
| 168 while (bit->chunks) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
169 struct line_info *li = bit->chunks->data; |
| 1428 | 170 if (li->text) |
| 171 g_free (li->text); | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
172 bit->chunks = g_list_remove (bit->chunks, li); |
| 1428 | 173 g_free (li); |
| 174 } | |
| 175 g_free (bit); | |
| 176 } | |
| 177 | |
| 178 while (imhtml->urls) { | |
| 179 g_free (imhtml->urls->data); | |
| 180 imhtml->urls = g_list_remove (imhtml->urls, imhtml->urls->data); | |
| 181 } | |
| 182 | |
| 183 if (imhtml->selected_text) | |
| 184 g_string_free (imhtml->selected_text, TRUE); | |
| 185 | |
|
1780
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
186 if (imhtml->tip_timer) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
187 gtk_timeout_remove (imhtml->tip_timer); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
188 imhtml->tip_timer = 0; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
189 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
190 if (imhtml->tip_window) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
191 gtk_widget_destroy (imhtml->tip_window); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
192 imhtml->tip_window = NULL; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
193 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
194 imhtml->tip_bit = NULL; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
195 |
| 1428 | 196 gdk_font_unref (imhtml->default_font); |
| 197 gdk_color_free (imhtml->default_fg_color); | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
198 gdk_color_free (imhtml->default_bg_color); |
| 1428 | 199 |
| 200 gdk_cursor_destroy (imhtml->hand_cursor); | |
| 201 gdk_cursor_destroy (imhtml->arrow_cursor); | |
| 202 | |
| 203 g_hash_table_destroy (imhtml->smiley_hash); | |
|
1519
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
204 if (imhtml->smiley_start) |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
205 g_string_free (imhtml->smiley_start, TRUE); |
| 1428 | 206 |
| 207 if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL) | |
| 208 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); | |
| 209 } | |
| 210 | |
| 211 static void | |
| 212 gtk_imhtml_realize (GtkWidget *widget) | |
| 213 { | |
| 214 GtkIMHtml *imhtml; | |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
215 GdkWindowAttr attributes; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
216 gint attributes_mask; |
| 1428 | 217 |
| 218 g_return_if_fail (widget != NULL); | |
| 219 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 220 | |
| 221 imhtml = GTK_IMHTML (widget); | |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
222 GTK_WIDGET_SET_FLAGS (imhtml, GTK_REALIZED); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
223 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
224 attributes.window_type = GDK_WINDOW_CHILD; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
225 attributes.x = widget->allocation.x; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
226 attributes.y = widget->allocation.y; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
227 attributes.width = widget->allocation.width; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
228 attributes.height = widget->allocation.height; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
229 attributes.wclass = GDK_INPUT_OUTPUT; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
230 attributes.visual = gtk_widget_get_visual (widget); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
231 attributes.colormap = gtk_widget_get_colormap (widget); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
232 attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
233 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
234 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
|
235 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
236 widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
237 &attributes, attributes_mask); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
238 gdk_window_set_user_data (widget->window, widget); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
239 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
240 attributes.x = widget->style->klass->xthickness + BORDER_SIZE; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
241 attributes.y = widget->style->klass->xthickness + BORDER_SIZE; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
242 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
|
243 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
|
244 attributes.event_mask = gtk_widget_get_events (widget) |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
245 | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
246 | GDK_POINTER_MOTION_MASK | GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
247 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
248 GTK_LAYOUT (imhtml)->bin_window = gdk_window_new (widget->window, |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
249 &attributes, attributes_mask); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
250 gdk_window_set_user_data (GTK_LAYOUT (imhtml)->bin_window, widget); |
| 1428 | 251 |
| 252 widget->style = gtk_style_attach (widget->style, widget->window); | |
| 253 | |
| 254 gdk_window_set_cursor (widget->window, imhtml->arrow_cursor); | |
| 255 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
256 gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]); |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
257 gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
258 &widget->style->base [GTK_STATE_NORMAL]); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
259 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
260 gdk_window_show (GTK_LAYOUT (imhtml)->bin_window); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
261 } |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
262 |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
263 static gboolean |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
264 similar_colors (GdkColor *bg, |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
265 GdkColor *fg) |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
266 { |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
267 if ((DIFF (bg->red, fg->red) < COLOR_DIFF) && |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
268 (DIFF (bg->green, fg->green) < COLOR_DIFF) && |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
269 (DIFF (bg->blue, fg->blue) < COLOR_DIFF)) { |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
270 fg->red = (0xff00 - COLOR_MOD > bg->red) ? |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
271 bg->red + COLOR_MOD : bg->red - COLOR_MOD; |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
272 fg->green = (0xff00 - COLOR_MOD > bg->green) ? |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
273 bg->green + COLOR_MOD : bg->green - COLOR_MOD; |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
274 fg->blue = (0xff00 - COLOR_MOD > bg->blue) ? |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
275 bg->blue + COLOR_MOD : bg->blue - COLOR_MOD; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
276 return TRUE; |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
277 } |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
278 return FALSE; |
| 1428 | 279 } |
| 280 | |
| 281 static void | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
282 draw_text (GtkIMHtml *imhtml, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
283 struct line_info *line) |
| 1428 | 284 { |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
285 GtkIMHtmlBit *bit; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
286 GdkGC *gc; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
287 GdkColormap *cmap; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
288 GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
289 gfloat xoff, yoff; |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
290 GdkColor *bg, *fg; |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
291 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
292 if (GTK_LAYOUT (imhtml)->freeze_count) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
293 return; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
294 |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
295 bit = line->bit; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
296 gc = gdk_gc_new (window); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
297 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
298 xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
299 yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
300 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
301 if (bit->bg != NULL) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
302 gdk_color_alloc (cmap, bit->bg); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
303 gdk_gc_set_foreground (gc, bit->bg); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
304 bg = bit->bg; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
305 } else { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
306 gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
307 gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
308 bg = imhtml->default_bg_color; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
309 } |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
310 |
|
2338
2bf8a8131479
[gaim-migrate @ 2351]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2337
diff
changeset
|
311 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
|
312 line->width ? line->width : imhtml->xsize, line->height); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
313 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
314 if (!line->text) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
315 gdk_gc_unref (gc); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
316 return; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
317 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
318 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
319 if (bit->back != NULL) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
320 gdk_color_alloc (cmap, bit->back); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
321 gdk_gc_set_foreground (gc, bit->back); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
322 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
323 gdk_string_width (bit->font, line->text), line->height); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
324 bg = bit->back; |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
325 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
326 |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
327 bg = gdk_color_copy (bg); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
328 |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
329 if (line->selected) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
330 gint width, x; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
331 gchar *start, *end; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
332 GdkColor col; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
333 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
334 if ((line->sel_start > line->sel_end) && (line->sel_end != NULL)) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
335 start = line->sel_end; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
336 end = line->sel_start; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
337 } else { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
338 start = line->sel_start; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
339 end = line->sel_end; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
340 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
341 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
342 if (start == NULL) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
343 x = 0; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
344 else |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
345 x = gdk_text_width (bit->font, line->text, start - line->text); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
346 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
347 if (end == NULL) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
348 width = gdk_string_width (bit->font, line->text) - x; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
349 else |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
350 width = gdk_text_width (bit->font, line->text, end - line->text) - x; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
351 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
352 col.red = col.green = col.blue = 0xc000; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
353 gdk_color_alloc (cmap, &col); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
354 gdk_gc_set_foreground (gc, &col); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
355 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
356 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
|
357 width, line->height); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
358 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
359 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
360 if (bit->url) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
361 GdkColor *tc = gtk_imhtml_get_color ("#0000a0"); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
362 gdk_color_alloc (cmap, tc); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
363 gdk_gc_set_foreground (gc, tc); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
364 fg = gdk_color_copy (tc); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
365 gdk_color_free (tc); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
366 } else if (bit->fore) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
367 gdk_color_alloc (cmap, bit->fore); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
368 gdk_gc_set_foreground (gc, bit->fore); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
369 fg = gdk_color_copy (bit->fore); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
370 } else { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
371 gdk_color_alloc (cmap, imhtml->default_fg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
372 gdk_gc_set_foreground (gc, imhtml->default_fg_color); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
373 fg = gdk_color_copy (imhtml->default_fg_color); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
374 } |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
375 |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
376 if (similar_colors (bg, fg)) { |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
377 gdk_color_alloc (cmap, fg); |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
378 gdk_gc_set_foreground (gc, fg); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
379 } |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
380 gdk_color_free (bg); |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
381 gdk_color_free (fg); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
382 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
383 gdk_draw_string (window, bit->font, gc, line->x - xoff, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
384 line->y - yoff + line->ascent, line->text); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
385 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
386 if (bit->underline || bit->url) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
387 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff + line->ascent + 1, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
388 gdk_string_width (bit->font, line->text), 1); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
389 if (bit->strike) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
390 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
391 line->y - yoff + line->ascent - (bit->font->ascent / 2), |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
392 gdk_string_width (bit->font, line->text), 1); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
393 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
394 gdk_gc_unref (gc); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
395 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
396 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
397 static void |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
398 draw_img (GtkIMHtml *imhtml, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
399 struct line_info *line) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
400 { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
401 GtkIMHtmlBit *bit; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
402 GdkGC *gc; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
403 GdkColormap *cmap; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
404 gint width, height, hoff; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
405 GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
406 gfloat xoff, yoff; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
407 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
408 if (GTK_LAYOUT (imhtml)->freeze_count) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
409 return; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
410 |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
411 bit = line->bit; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
412 gdk_window_get_size (bit->pm, &width, &height); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
413 hoff = (line->height - height) / 2; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
414 xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
415 yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
416 gc = gdk_gc_new (window); |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
417 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
418 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
419 if (bit->bg != NULL) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
420 gdk_color_alloc (cmap, bit->bg); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
421 gdk_gc_set_foreground (gc, bit->bg); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
422 } else { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
423 gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
424 gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
425 } |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
426 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
427 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
|
428 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
429 if (bit->back != NULL) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
430 gdk_color_alloc (cmap, bit->back); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
431 gdk_gc_set_foreground (gc, bit->back); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
432 gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
433 width, line->height); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
434 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
435 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
436 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
|
437 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
438 gdk_gc_unref (gc); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
439 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
440 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
441 static void |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
442 draw_line (GtkIMHtml *imhtml, |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
443 struct line_info *line) |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
444 { |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
445 GtkIMHtmlBit *bit; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
446 GdkDrawable *drawable; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
447 GdkColormap *cmap; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
448 GdkGC *gc; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
449 guint line_height; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
450 gfloat xoff, yoff; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
451 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
452 if (GTK_LAYOUT (imhtml)->freeze_count) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
453 return; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
454 |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
455 xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
456 yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
457 bit = line->bit; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
458 drawable = GTK_LAYOUT (imhtml)->bin_window; |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
459 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
460 gc = gdk_gc_new (drawable); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
461 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
462 if (bit->bg != NULL) { |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
463 gdk_color_alloc (cmap, bit->bg); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
464 gdk_gc_set_foreground (gc, bit->bg); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
465 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
466 gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff, |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
467 line->width, line->height); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
468 } |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
469 |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
470 gdk_color_alloc (cmap, imhtml->default_fg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
471 gdk_gc_set_foreground (gc, imhtml->default_fg_color); |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
472 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
473 line_height = line->height / 2; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
474 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
475 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
|
476 line->width, line_height); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
477 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
478 gdk_gc_unref (gc); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
479 } |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
480 |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
481 static void |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
482 gtk_imhtml_draw_focus (GtkWidget *widget) |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
483 { |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
484 GtkIMHtml *imhtml; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
485 gint x = 0, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
486 y = 0, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
487 w = 0, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
488 h = 0; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
489 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
490 imhtml = GTK_IMHTML (widget); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
491 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
492 if (!GTK_WIDGET_DRAWABLE (widget)) |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
493 return; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
494 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
495 if (GTK_WIDGET_HAS_FOCUS (widget)) { |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
496 gtk_paint_focus (widget->style, widget->window, NULL, widget, "text", 0, 0, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
497 widget->allocation.width - 1, widget->allocation.height - 1); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
498 x = 1; y = 1; w = 2; h = 2; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
499 } |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
500 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
501 gtk_paint_shadow (widget->style, widget->window, GTK_STATE_NORMAL, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
502 GTK_SHADOW_IN, NULL, widget, "text", x, y, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
503 widget->allocation.width - w, widget->allocation.height - h); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
504 } |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
505 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
506 static void |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
507 gtk_imhtml_draw_exposed (GtkIMHtml *imhtml) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
508 { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
509 GList *bits; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
510 GtkIMHtmlBit *bit; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
511 GList *chunks; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
512 struct line_info *line; |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
513 gfloat x, y; |
|
2048
3366311426df
[gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2022
diff
changeset
|
514 gint width, height; |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
515 |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
516 x = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
517 y = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
518 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
|
519 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
520 bits = imhtml->bits; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
521 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
522 while (bits) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
523 bit = bits->data; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
524 chunks = bit->chunks; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
525 if (DRAW_IMG (bit)) { |
|
1461
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
526 if (chunks) { |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
527 line = chunks->data; |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
528 if ((line->x <= x + width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
529 (line->y <= y + height) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
530 (x <= line->x + line->width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
531 (y <= line->y + line->height)) |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
532 draw_img (imhtml, line); |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
533 } |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
534 } else if (bit->type == TYPE_SEP) { |
|
1461
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
535 if (chunks) { |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
536 line = chunks->data; |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
537 if ((line->x <= x + width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
538 (line->y <= y + height) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
539 (x <= line->x + line->width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
540 (y <= line->y + line->height)) |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
541 draw_line (imhtml, line); |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
542 |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
543 line = chunks->next->data; |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
544 if ((line->x <= x + width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
545 (line->y <= y + height) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
546 (x <= line->x + line->width) && |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
547 (y <= line->y + line->height)) |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
548 draw_text (imhtml, line); |
|
9774a0a304c4
[gaim-migrate @ 1471]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1460
diff
changeset
|
549 } |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
550 } else { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
551 while (chunks) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
552 line = chunks->data; |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
553 if ((line->x <= x + width) && |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
554 (line->y <= y + height) && |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
555 (x <= line->x + line->width) && |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
556 (y <= line->y + line->height)) |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
557 draw_text (imhtml, line); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
558 chunks = g_list_next (chunks); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
559 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
560 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
561 bits = g_list_next (bits); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
562 } |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
563 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
564 gtk_imhtml_draw_focus (GTK_WIDGET (imhtml)); |
| 1428 | 565 } |
| 566 | |
| 567 static void | |
| 568 gtk_imhtml_draw (GtkWidget *widget, | |
| 569 GdkRectangle *area) | |
| 570 { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
571 GtkIMHtml *imhtml; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
572 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
573 imhtml = GTK_IMHTML (widget); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
574 gtk_imhtml_draw_exposed (imhtml); |
| 1428 | 575 } |
| 576 | |
| 577 static void | |
| 578 gtk_imhtml_style_set (GtkWidget *widget, | |
| 579 GtkStyle *style) | |
| 580 { | |
| 581 GtkIMHtml *imhtml; | |
| 582 | |
| 583 g_return_if_fail (widget != NULL); | |
| 584 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
585 |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
586 if (GTK_WIDGET_CLASS (parent_class)->style_set) |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
587 (* GTK_WIDGET_CLASS (parent_class)->style_set) (widget, style); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
588 |
| 1428 | 589 if (!GTK_WIDGET_REALIZED (widget)) |
| 590 return; | |
| 591 | |
| 592 imhtml = GTK_IMHTML (widget); | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
593 gtk_imhtml_draw_exposed (imhtml); |
| 1428 | 594 } |
| 595 | |
| 596 static gint | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
597 gtk_imhtml_expose_event (GtkWidget *widget, |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
598 GdkEventExpose *event) |
| 1428 | 599 { |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
600 GtkIMHtml *imhtml; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
601 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
602 g_return_val_if_fail (widget != NULL, FALSE); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
603 g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE); |
|
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 imhtml = GTK_IMHTML (widget); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
606 gtk_imhtml_draw_exposed (imhtml); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
607 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
608 return FALSE; |
| 1428 | 609 } |
| 610 | |
| 611 static void | |
| 612 gtk_imhtml_redraw_all (GtkIMHtml *imhtml) | |
| 613 { | |
| 614 GList *b; | |
| 615 GtkIMHtmlBit *bit; | |
| 616 GtkAdjustment *vadj; | |
| 617 gfloat oldvalue; | |
|
1527
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
618 gint oldy; |
| 1428 | 619 |
| 620 vadj = GTK_LAYOUT (imhtml)->vadjustment; | |
| 621 oldvalue = vadj->value / vadj->upper; | |
|
1527
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
622 oldy = imhtml->y; |
| 1428 | 623 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
624 gtk_layout_freeze (GTK_LAYOUT (imhtml)); |
| 1428 | 625 |
| 626 g_list_free (imhtml->line); | |
| 627 imhtml->line = NULL; | |
| 628 | |
| 629 while (imhtml->urls) { | |
| 630 g_free (imhtml->urls->data); | |
| 631 imhtml->urls = g_list_remove (imhtml->urls, imhtml->urls->data); | |
| 632 } | |
| 633 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
634 imhtml->x = 0; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
635 imhtml->y = TOP_BORDER; |
| 1428 | 636 imhtml->llheight = 0; |
| 637 imhtml->llascent = 0; | |
| 638 | |
|
2002
7c2457745344
[gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1998
diff
changeset
|
639 if (GTK_LAYOUT (imhtml)->yoffset < TOP_BORDER) |
|
7c2457745344
[gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1998
diff
changeset
|
640 gdk_window_clear_area (GTK_LAYOUT (imhtml)->bin_window, 0, 0, |
|
7c2457745344
[gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1998
diff
changeset
|
641 imhtml->xsize, TOP_BORDER - GTK_LAYOUT (imhtml)->yoffset); |
|
7c2457745344
[gaim-migrate @ 2012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1998
diff
changeset
|
642 |
| 1428 | 643 b = imhtml->bits; |
| 644 while (b) { | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
645 bit = b->data; |
| 1428 | 646 b = g_list_next (b); |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
647 while (bit->chunks) { |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
648 struct line_info *li = bit->chunks->data; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
649 if (li->text) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
650 g_free (li->text); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
651 bit->chunks = g_list_remove (bit->chunks, li); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
652 g_free (li); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
653 } |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
654 gtk_imhtml_draw_bit (imhtml, bit); |
| 1428 | 655 } |
| 656 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
657 GTK_LAYOUT (imhtml)->height = imhtml->y; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
658 GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
659 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
|
660 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
661 gtk_widget_set_usize (GTK_WIDGET (imhtml), -1, imhtml->y); |
| 1428 | 662 gtk_adjustment_set_value (vadj, vadj->upper * oldvalue); |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
663 |
|
1527
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
664 if (GTK_LAYOUT (imhtml)->bin_window && (imhtml->y < oldy)) { |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
665 GdkGC *gc; |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
666 GdkColormap *cmap; |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
667 |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
668 gc = gdk_gc_new (GTK_LAYOUT (imhtml)->bin_window); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
669 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
670 |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
671 gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
672 gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
673 |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
674 gdk_draw_rectangle (GTK_LAYOUT (imhtml)->bin_window, gc, TRUE, |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
675 0, imhtml->y - GTK_LAYOUT (imhtml)->vadjustment->value, |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
676 GTK_WIDGET (imhtml)->allocation.width, |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
677 oldy - imhtml->y); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
678 |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
679 gdk_gc_unref (gc); |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
680 } |
|
11977dd0fd29
[gaim-migrate @ 1537]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1524
diff
changeset
|
681 |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
682 gtk_layout_thaw (GTK_LAYOUT (imhtml)); |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
683 gtk_imhtml_draw_focus (GTK_WIDGET (imhtml)); |
| 1428 | 684 } |
| 685 | |
| 686 static void | |
| 687 gtk_imhtml_size_allocate (GtkWidget *widget, | |
| 688 GtkAllocation *allocation) | |
| 689 { | |
| 690 GtkIMHtml *imhtml; | |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
691 GtkLayout *layout; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
692 gint new_xsize, new_ysize; |
| 1428 | 693 |
| 694 g_return_if_fail (widget != NULL); | |
| 695 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 696 g_return_if_fail (allocation != NULL); | |
| 697 | |
| 698 imhtml = GTK_IMHTML (widget); | |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
699 layout = GTK_LAYOUT (widget); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
700 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
701 widget->allocation = *allocation; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
702 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
703 new_xsize = MAX (1, (gint) allocation->width - |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
704 (gint) (widget->style->klass->xthickness + BORDER_SIZE) * 2); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
705 new_ysize = MAX (1, (gint) allocation->height - |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
706 (gint) (widget->style->klass->ythickness + BORDER_SIZE) * 2); |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
707 |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
708 if (GTK_WIDGET_REALIZED (widget)) { |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
709 gint x = widget->style->klass->xthickness + BORDER_SIZE; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
710 gint y = widget->style->klass->ythickness + BORDER_SIZE; |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
711 gdk_window_move_resize (widget->window, |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
712 allocation->x, allocation->y, |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
713 allocation->width, allocation->height); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
714 gdk_window_move_resize (layout->bin_window, |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
715 x, y, new_xsize, new_ysize); |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
716 } |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
717 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
718 layout->hadjustment->page_size = new_xsize; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
719 layout->hadjustment->page_increment = new_xsize / 2; |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
720 layout->hadjustment->lower = 0; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
721 layout->hadjustment->upper = imhtml->x; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
722 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
723 layout->vadjustment->page_size = new_ysize; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
724 layout->vadjustment->page_increment = new_ysize / 2; |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
725 layout->vadjustment->lower = 0; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
726 layout->vadjustment->upper = imhtml->y; |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
727 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
728 gtk_signal_emit_by_name (GTK_OBJECT (layout->hadjustment), "changed"); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
729 gtk_signal_emit_by_name (GTK_OBJECT (layout->vadjustment), "changed"); |
| 1428 | 730 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
731 if (new_xsize == imhtml->xsize) { |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
732 if ((GTK_LAYOUT (imhtml)->vadjustment->value > imhtml->y - new_ysize)) { |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
733 if (imhtml->y > new_ysize) |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
734 gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment, |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
735 imhtml->y - new_ysize); |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
736 else |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
737 gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment, 0); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
738 } |
| 1428 | 739 return; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
740 } |
| 1428 | 741 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
742 imhtml->xsize = new_xsize; |
| 1428 | 743 |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
744 if (GTK_WIDGET_REALIZED (widget)) |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
745 gtk_imhtml_redraw_all (imhtml); |
| 1428 | 746 } |
| 747 | |
| 748 static void | |
| 749 gtk_imhtml_select_none (GtkIMHtml *imhtml) | |
| 750 { | |
| 751 GList *bits; | |
| 752 GList *chunks; | |
| 753 GtkIMHtmlBit *bit; | |
| 754 struct line_info *chunk; | |
| 755 | |
| 756 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 757 | |
| 758 bits = imhtml->bits; | |
| 759 while (bits) { | |
| 760 bit = bits->data; | |
| 761 chunks = bit->chunks; | |
| 762 | |
| 763 while (chunks) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
764 chunk = chunks->data; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
765 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
766 if (chunk->selected) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
767 chunk->selected = FALSE; |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
768 chunk->sel_start = chunk->text; |
|
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
769 chunk->sel_end = NULL; |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
770 if (DRAW_IMG (bit)) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
771 draw_img (imhtml, chunk); |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
772 else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk)) |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
773 draw_line (imhtml, chunk); |
|
2348
dd5f18429dd9
[gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2338
diff
changeset
|
774 else if (chunk->width) |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
775 draw_text (imhtml, chunk); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
776 } |
| 1428 | 777 |
| 778 chunks = g_list_next (chunks); | |
| 779 } | |
| 780 | |
| 781 bits = g_list_next (bits); | |
| 782 } | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
783 imhtml->sel_endchunk = NULL; |
| 1428 | 784 } |
| 785 | |
| 786 static gchar* | |
| 787 get_position (struct line_info *chunk, | |
| 788 gint x, | |
| 789 gboolean smileys) | |
| 790 { | |
| 791 gint width = x - chunk->x; | |
| 792 gchar *text; | |
| 793 gchar *pos; | |
| 794 guint total = 0; | |
| 795 | |
| 796 switch (chunk->bit->type) { | |
| 797 case TYPE_TEXT: | |
| 798 case TYPE_COMMENT: | |
| 799 text = chunk->text; | |
| 800 break; | |
| 801 case TYPE_SMILEY: | |
| 802 if (smileys) | |
| 803 return NULL; | |
| 804 else | |
| 805 text = chunk->text; | |
| 806 break; | |
| 807 default: | |
| 808 return NULL; | |
| 809 break; | |
| 810 } | |
| 811 | |
| 812 if (width <= 0) | |
| 813 return text; | |
| 814 | |
| 815 for (pos = text; *pos != '\0'; pos++) { | |
| 816 gint char_width = gdk_text_width (chunk->bit->font, pos, 1); | |
| 817 if ((width > total) && (width <= total + char_width)) { | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
818 if (width < total + (char_width / 2)) |
| 1428 | 819 return pos; |
| 820 else | |
| 821 return ++pos; | |
| 822 } | |
| 823 total += char_width; | |
| 824 } | |
| 825 | |
| 826 return pos; | |
| 827 } | |
| 828 | |
| 829 static GString* | |
| 830 append_to_sel (GString *string, | |
| 831 struct line_info *chunk, | |
| 832 gboolean smileys) | |
| 833 { | |
| 834 GString *new_string; | |
| 835 gchar *buf; | |
| 836 gchar *start; | |
| 837 gint length; | |
| 838 | |
| 839 switch (chunk->bit->type) { | |
| 840 case TYPE_TEXT: | |
| 841 case TYPE_COMMENT: | |
| 842 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start; | |
| 843 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 844 if (length <= 0) | |
| 845 return string; | |
| 846 buf = g_strndup (start, length); | |
| 847 break; | |
| 848 case TYPE_SMILEY: | |
| 849 if (smileys) { | |
| 850 start = (chunk->sel_start == NULL) ? chunk->bit->text : chunk->sel_start; | |
| 851 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 852 if (length <= 0) | |
| 853 return string; | |
| 854 buf = g_strndup (start, length); | |
| 855 } else { | |
| 856 start = (chunk->sel_start == NULL) ? chunk->text : chunk->sel_start; | |
| 857 length = (chunk->sel_end == NULL) ? strlen (start) : chunk->sel_end - start; | |
| 858 if (length <= 0) | |
| 859 return string; | |
| 860 buf = g_strndup (start, length); | |
| 861 } | |
| 862 break; | |
| 863 case TYPE_BR: | |
| 864 buf = g_strdup ("\n"); | |
| 865 break; | |
| 866 default: | |
| 867 return string; | |
| 868 break; | |
| 869 } | |
| 870 | |
| 871 new_string = g_string_append (string, buf); | |
| 872 g_free (buf); | |
| 873 | |
| 874 return new_string; | |
| 875 } | |
| 876 | |
| 877 #define COORDS_IN_CHUNK(xx, yy) (((xx) < chunk->x + chunk->width) && \ | |
| 878 ((yy) < chunk->y + chunk->height)) | |
| 879 | |
| 880 static void | |
| 881 gtk_imhtml_select_bits (GtkIMHtml *imhtml) | |
| 882 { | |
| 883 GList *bits; | |
| 884 GList *chunks; | |
| 885 GtkIMHtmlBit *bit; | |
| 886 struct line_info *chunk; | |
| 887 | |
| 888 guint startx = imhtml->sel_startx, | |
| 889 starty = imhtml->sel_starty, | |
| 890 endx = imhtml->sel_endx, | |
| 891 endy = imhtml->sel_endy; | |
| 892 gchar *new_pos; | |
| 893 gint selection = 0; | |
| 894 gboolean smileys = imhtml->smileys; | |
| 895 gboolean redraw = FALSE; | |
| 896 gboolean got_start = FALSE; | |
| 897 gboolean got_end = FALSE; | |
| 898 | |
| 899 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 900 | |
| 901 if (!imhtml->selection) | |
| 902 return; | |
| 903 | |
| 904 if (imhtml->selected_text) { | |
| 905 g_string_free (imhtml->selected_text, TRUE); | |
| 906 imhtml->selected_text = g_string_new (""); | |
| 907 } | |
| 908 | |
| 909 bits = imhtml->bits; | |
| 910 while (bits) { | |
| 911 bit = bits->data; | |
| 912 chunks = bit->chunks; | |
| 913 | |
| 914 while (chunks) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
915 chunk = chunks->data; |
| 1428 | 916 |
| 917 switch (selection) { | |
| 918 case 0: | |
| 919 if (COORDS_IN_CHUNK (startx, starty)) { | |
| 920 new_pos = get_position (chunk, startx, smileys); | |
| 921 if ( !chunk->selected || | |
| 922 (chunk->sel_start != new_pos) || | |
| 923 (chunk->sel_end != NULL)) | |
| 924 redraw = TRUE; | |
| 925 chunk->selected = TRUE; | |
| 926 chunk->sel_start = new_pos; | |
| 927 chunk->sel_end = NULL; | |
| 928 selection++; | |
| 929 got_start = TRUE; | |
| 930 } | |
| 931 | |
| 932 if (COORDS_IN_CHUNK (endx, endy)) { | |
| 933 if (got_start) { | |
| 934 new_pos = get_position (chunk, endx, smileys); | |
| 935 if (chunk->sel_end != new_pos) | |
| 936 redraw = TRUE; | |
| 937 if (chunk->sel_start > new_pos) { | |
| 938 chunk->sel_end = chunk->sel_start; | |
| 939 chunk->sel_start = new_pos; | |
| 940 } else | |
| 941 chunk->sel_end = new_pos; | |
| 942 selection = 2; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
943 imhtml->sel_endchunk = chunk; |
| 1428 | 944 got_end = TRUE; |
| 945 } else { | |
| 946 new_pos = get_position (chunk, endx, smileys); | |
| 947 if ( !chunk->selected || | |
| 948 (chunk->sel_start != new_pos) || | |
| 949 (chunk->sel_end != NULL)) | |
| 950 redraw = TRUE; | |
| 951 chunk->selected = TRUE; | |
| 952 chunk->sel_start = new_pos; | |
| 953 chunk->sel_end = NULL; | |
| 954 selection++; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
955 imhtml->sel_endchunk = chunk; |
| 1428 | 956 got_end = TRUE; |
| 957 } | |
| 958 } else if (!COORDS_IN_CHUNK (startx, starty) && !got_start) { | |
| 959 if (chunk->selected) | |
| 960 redraw = TRUE; | |
| 961 chunk->selected = FALSE; | |
| 962 chunk->sel_start = chunk->text; | |
| 963 chunk->sel_end = NULL; | |
| 964 } | |
| 965 | |
| 966 break; | |
| 967 case 1: | |
| 968 if (!got_start && COORDS_IN_CHUNK (startx, starty)) { | |
| 969 new_pos = get_position (chunk, startx, smileys); | |
| 970 if ( !chunk->selected || | |
| 971 (chunk->sel_end != new_pos) || | |
| 972 (chunk->sel_start != chunk->text)) | |
| 973 redraw = TRUE; | |
| 974 chunk->selected = TRUE; | |
| 975 chunk->sel_start = chunk->text; | |
| 976 chunk->sel_end = new_pos; | |
| 977 selection++; | |
| 978 got_start = TRUE; | |
| 979 } else if (!got_end && COORDS_IN_CHUNK (endx, endy)) { | |
| 980 new_pos = get_position (chunk, endx, smileys); | |
| 981 if ( !chunk->selected || | |
| 982 (chunk->sel_end != new_pos) || | |
| 983 (chunk->sel_start != chunk->text)) | |
| 984 redraw = TRUE; | |
| 985 chunk->selected = TRUE; | |
| 986 chunk->sel_start = chunk->text; | |
| 987 chunk->sel_end = new_pos; | |
| 988 selection++; | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
989 imhtml->sel_endchunk = chunk; |
| 1428 | 990 got_end = TRUE; |
| 991 } else { | |
| 992 if ( !chunk->selected || | |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
993 (chunk->sel_end != NULL) || |
|
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
994 (chunk->sel_start != chunk->text)) |
| 1428 | 995 redraw = TRUE; |
| 996 chunk->selected = TRUE; | |
| 997 chunk->sel_start = chunk->text; | |
| 998 chunk->sel_end = NULL; | |
| 999 } | |
| 1000 | |
| 1001 break; | |
| 1002 case 2: | |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
1003 if (chunk->selected) |
| 1428 | 1004 redraw = TRUE; |
| 1005 chunk->selected = FALSE; | |
| 1006 chunk->sel_start = chunk->text; | |
| 1007 chunk->sel_end = NULL; | |
| 1008 break; | |
| 1009 } | |
| 1010 | |
| 1011 if (chunk->selected == TRUE) | |
| 1012 imhtml->selected_text = append_to_sel (imhtml->selected_text, | |
| 1013 chunk, smileys); | |
| 1014 | |
| 1015 if (redraw) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1016 if (DRAW_IMG (bit)) |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1017 draw_img (imhtml, chunk); |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
1018 else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk)) |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
1019 draw_line (imhtml, chunk); |
|
2348
dd5f18429dd9
[gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2338
diff
changeset
|
1020 else if (chunk->width) |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1021 draw_text (imhtml, chunk); |
| 1428 | 1022 redraw = FALSE; |
| 1023 } | |
| 1024 | |
| 1025 chunks = g_list_next (chunks); | |
| 1026 } | |
| 1027 | |
| 1028 bits = g_list_next (bits); | |
| 1029 } | |
| 1030 } | |
| 1031 | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1032 static void |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1033 gtk_imhtml_select_in_chunk (GtkIMHtml *imhtml, |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1034 struct line_info *chunk) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1035 { |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1036 GtkIMHtmlBit *bit = chunk->bit; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1037 gchar *new_pos; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1038 guint endx = imhtml->sel_endx; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1039 guint startx = imhtml->sel_startx; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1040 guint starty = imhtml->sel_starty; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1041 gboolean smileys = imhtml->smileys; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1042 gboolean redraw = FALSE; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1043 |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1044 new_pos = get_position (chunk, endx, smileys); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1045 if ((starty < chunk->y) || |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1046 ((starty < chunk->y + chunk->height) && (startx < endx))) { |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1047 if (chunk->sel_end != new_pos) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1048 redraw = TRUE; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1049 chunk->sel_end = new_pos; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1050 } else { |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1051 if (chunk->sel_start != new_pos) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1052 redraw = TRUE; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1053 chunk->sel_start = new_pos; |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1054 } |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1055 |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1056 if (redraw) { |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1057 if (DRAW_IMG (bit)) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1058 draw_img (imhtml, chunk); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1059 else if ((bit->type == TYPE_SEP) && |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1060 (bit->chunks->data == chunk)) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1061 draw_line (imhtml, chunk); |
|
2348
dd5f18429dd9
[gaim-migrate @ 2361]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2338
diff
changeset
|
1062 else if (chunk->width) |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1063 draw_text (imhtml, chunk); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1064 } |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1065 } |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1066 |
| 1428 | 1067 static gint |
| 1068 scroll_timeout (GtkIMHtml *imhtml) | |
| 1069 { | |
| 1070 GdkEventMotion event; | |
| 1071 gint x, y; | |
| 1072 GdkModifierType mask; | |
| 1073 | |
| 1074 imhtml->scroll_timer = 0; | |
| 1075 | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1076 gdk_window_get_pointer (GTK_LAYOUT (imhtml)->bin_window, &x, &y, &mask); |
| 1428 | 1077 |
| 1078 if (mask & GDK_BUTTON1_MASK) { | |
| 1079 event.is_hint = 0; | |
| 1080 event.x = x; | |
| 1081 event.y = y; | |
| 1082 event.state = mask; | |
| 1083 | |
| 1084 gtk_imhtml_motion_notify_event (GTK_WIDGET (imhtml), &event); | |
| 1085 } | |
| 1086 | |
| 1087 return FALSE; | |
| 1088 } | |
| 1089 | |
| 1090 static gint | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1091 gtk_imhtml_tip_paint (GtkIMHtml *imhtml) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1092 { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1093 GtkStyle *style; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1094 gint y, baseline_skip, gap; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1095 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1096 style = imhtml->tip_window->style; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1097 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1098 gap = (style->font->ascent + style->font->descent) / 4; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1099 if (gap < 2) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1100 gap = 2; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1101 baseline_skip = style->font->ascent + style->font->descent + gap; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1102 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1103 if (!imhtml->tip_bit) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1104 return FALSE; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1105 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1106 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
|
1107 NULL, imhtml->tip_window, "tooltip", 0, 0, -1, -1); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1108 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1109 y = style->font->ascent + 4; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1110 gtk_paint_string (style, imhtml->tip_window->window, GTK_STATE_NORMAL, NULL, |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1111 imhtml->tip_window, "tooltip", 4, y, imhtml->tip_bit->url); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1112 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1113 return FALSE; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1114 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1115 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1116 static gint |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1117 gtk_imhtml_tip (gpointer data) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1118 { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1119 GtkIMHtml *imhtml = data; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1120 GtkWidget *widget = GTK_WIDGET (imhtml); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1121 GtkStyle *style; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1122 gint gap, x, y, w, h, scr_w, scr_h, baseline_skip; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1123 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1124 if (!imhtml->tip_bit || !GTK_WIDGET_DRAWABLE (widget)) { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1125 imhtml->tip_timer = 0; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1126 return FALSE; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1127 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1128 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1129 if (imhtml->tip_window) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1130 gtk_widget_destroy (imhtml->tip_window); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1131 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1132 imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1133 gtk_widget_set_app_paintable (imhtml->tip_window, TRUE); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1134 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
|
1135 gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips"); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1136 gtk_signal_connect_object (GTK_OBJECT (imhtml->tip_window), "expose_event", |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1137 GTK_SIGNAL_FUNC (gtk_imhtml_tip_paint), GTK_OBJECT (imhtml)); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1138 gtk_signal_connect_object (GTK_OBJECT (imhtml->tip_window), "draw", |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1139 GTK_SIGNAL_FUNC (gtk_imhtml_tip_paint), GTK_OBJECT (imhtml)); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1140 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1141 gtk_widget_ensure_style (imhtml->tip_window); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1142 style = imhtml->tip_window->style; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1143 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1144 scr_w = gdk_screen_width (); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1145 scr_h = gdk_screen_height (); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1146 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1147 gap = (style->font->ascent + style->font->descent) / 4; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1148 if (gap < 2) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1149 gap = 2; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1150 baseline_skip = style->font->ascent + style->font->descent + gap; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1151 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1152 w = 8 + gdk_string_width (style->font, imhtml->tip_bit->url); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1153 h = 8 - gap + baseline_skip; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1154 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1155 gdk_window_get_pointer (NULL, &x, &y, NULL); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1156 if (GTK_WIDGET_NO_WINDOW (widget)) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1157 y += widget->allocation.y; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1158 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1159 x -= ((w >> 1) + 4); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1160 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1161 if ((x + w) > scr_w) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1162 x -= (x + w) - scr_w; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1163 else if (x < 0) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1164 x = 0; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1165 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1166 if ((y + h + + 4) > scr_h) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1167 y = y - imhtml->tip_bit->font->ascent + imhtml->tip_bit->font->descent; |
| 2071 | 1168 else |
| 1169 if (imhtml->tip_bit->font) | |
| 1170 y = y + imhtml->tip_bit->font->ascent + imhtml->tip_bit->font->descent; | |
| 1171 else | |
| 1172 y = y + style->font->ascent + style->font->descent; | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1173 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1174 gtk_widget_set_usize (imhtml->tip_window, w, h); |
|
1955
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1175 gtk_widget_set_uposition (imhtml->tip_window, x, y); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1176 gtk_widget_show (imhtml->tip_window); |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1177 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1178 imhtml->tip_timer = 0; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1179 return FALSE; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1180 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1181 |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1182 static gint |
| 1428 | 1183 gtk_imhtml_motion_notify_event (GtkWidget *widget, |
| 1184 GdkEventMotion *event) | |
| 1185 { | |
| 1186 gint x, y; | |
| 1187 GdkModifierType state; | |
| 1188 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1189 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1190 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1191 | |
| 1192 if (event->is_hint) | |
| 1193 gdk_window_get_pointer (event->window, &x, &y, &state); | |
| 1194 else { | |
| 1195 x = event->x + hadj->value; | |
| 1196 y = event->y + vadj->value; | |
| 1197 state = event->state; | |
| 1198 } | |
| 1199 | |
| 1200 if (state & GDK_BUTTON1_MASK) { | |
| 1201 gint diff; | |
| 1202 gint height = vadj->page_size; | |
| 1203 gint yy = y - vadj->value; | |
| 1204 | |
| 1205 if (((yy < 0) || (yy > height)) && | |
| 1206 (imhtml->scroll_timer == 0) && | |
| 1207 (vadj->upper > vadj->page_size)) { | |
| 1208 imhtml->scroll_timer = gtk_timeout_add (100, | |
| 1209 (GtkFunction) scroll_timeout, | |
| 1210 imhtml); | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1211 diff = (yy < 0) ? (yy / 2) : ((yy - height) / 2); |
| 1428 | 1212 gtk_adjustment_set_value (vadj, |
|
2337
e3939d21c2f0
[gaim-migrate @ 2350]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2188
diff
changeset
|
1213 MIN (vadj->value + diff, vadj->upper - height)); |
| 1428 | 1214 } |
| 1215 | |
| 1216 if (imhtml->selection) { | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1217 struct line_info *chunk = imhtml->sel_endchunk; |
| 1428 | 1218 imhtml->sel_endx = MAX (x, 0); |
| 1219 imhtml->sel_endy = MAX (y, 0); | |
|
1515
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1220 if ((chunk == NULL) || |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1221 (x < chunk->x) || |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1222 (x > chunk->x + chunk->width) || |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1223 (y < chunk->y) || |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1224 (y > chunk->y + chunk->height)) |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1225 gtk_imhtml_select_bits (imhtml); |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1226 else |
|
206f995a33f3
[gaim-migrate @ 1525]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1482
diff
changeset
|
1227 gtk_imhtml_select_in_chunk (imhtml, chunk); |
| 1428 | 1228 } |
| 1229 } else { | |
| 1230 GList *urls = imhtml->urls; | |
| 1231 struct url_widget *uw; | |
| 1232 | |
| 1233 while (urls) { | |
| 1234 uw = (struct url_widget *) urls->data; | |
| 1235 if ((x > uw->x) && (x < uw->x + uw->width) && | |
| 1236 (y > uw->y) && (y < uw->y + uw->height)) { | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1237 if (imhtml->tip_bit != uw->bit) { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1238 imhtml->tip_bit = uw->bit; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1239 if (imhtml->tip_timer != 0) |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1240 gtk_timeout_remove (imhtml->tip_timer); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1241 if (imhtml->tip_window) { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1242 gtk_widget_destroy (imhtml->tip_window); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1243 imhtml->tip_window = NULL; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1244 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1245 imhtml->tip_timer = gtk_timeout_add (TOOLTIP_TIMEOUT, |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1246 gtk_imhtml_tip, |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1247 imhtml); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1248 } |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1249 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, |
|
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1250 imhtml->hand_cursor); |
| 1428 | 1251 return TRUE; |
| 1252 } | |
| 1253 urls = g_list_next (urls); | |
| 1254 } | |
| 1255 } | |
| 1256 | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1257 if (imhtml->tip_timer) { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1258 gtk_timeout_remove (imhtml->tip_timer); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1259 imhtml->tip_timer = 0; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1260 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1261 if (imhtml->tip_window) { |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1262 gtk_widget_destroy (imhtml->tip_window); |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1263 imhtml->tip_window = NULL; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1264 } |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1265 imhtml->tip_bit = NULL; |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1266 |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1267 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor); |
| 1428 | 1268 |
| 1269 return TRUE; | |
| 1270 } | |
| 1271 | |
| 1272 static gint | |
|
1613
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1273 gtk_imhtml_leave_notify_event (GtkWidget *widget, |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1274 GdkEventCrossing *event) |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1275 { |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1276 GtkIMHtml *imhtml = GTK_IMHTML (widget); |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1277 |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1278 if (imhtml->tip_timer) { |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1279 gtk_timeout_remove (imhtml->tip_timer); |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1280 imhtml->tip_timer = 0; |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1281 } |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1282 if (imhtml->tip_window) { |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1283 gtk_widget_destroy (imhtml->tip_window); |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1284 imhtml->tip_window = NULL; |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1285 } |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1286 imhtml->tip_bit = NULL; |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1287 |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1288 return TRUE; |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1289 } |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1290 |
|
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1291 static gint |
| 1428 | 1292 gtk_imhtml_button_press_event (GtkWidget *widget, |
| 1293 GdkEventButton *event) | |
| 1294 { | |
| 1295 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1296 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1297 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1298 gint x, y; | |
| 1299 | |
| 1300 if (event->button == 1) { | |
| 1301 x = event->x + hadj->value; | |
| 1302 y = event->y + vadj->value; | |
| 1303 | |
| 1304 imhtml->sel_startx = x; | |
| 1305 imhtml->sel_starty = y; | |
| 1306 imhtml->selection = TRUE; | |
| 1307 gtk_imhtml_select_none (imhtml); | |
| 1308 } | |
| 1309 | |
| 1310 return TRUE; | |
| 1311 } | |
| 1312 | |
| 1313 static gint | |
| 1314 gtk_imhtml_button_release_event (GtkWidget *widget, | |
| 1315 GdkEventButton *event) | |
| 1316 { | |
| 1317 GtkIMHtml *imhtml = GTK_IMHTML (widget); | |
| 1318 GtkAdjustment *vadj = GTK_LAYOUT (widget)->vadjustment; | |
| 1319 GtkAdjustment *hadj = GTK_LAYOUT (widget)->hadjustment; | |
| 1320 gint x, y; | |
| 1321 | |
|
1456
6650776468b3
[gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1454
diff
changeset
|
1322 x = event->x + hadj->value; |
|
6650776468b3
[gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1454
diff
changeset
|
1323 y = event->y + vadj->value; |
|
6650776468b3
[gaim-migrate @ 1466]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1454
diff
changeset
|
1324 |
| 1428 | 1325 if ((event->button == 1) && imhtml->selection) { |
| 1326 if ((x == imhtml->sel_startx) && (y == imhtml->sel_starty)) { | |
| 1327 imhtml->sel_startx = imhtml->sel_starty = 0; | |
| 1328 imhtml->selection = FALSE; | |
| 1329 gtk_imhtml_select_none (imhtml); | |
| 1330 } else { | |
| 1331 imhtml->sel_endx = MAX (x, 0); | |
| 1332 imhtml->sel_endy = MAX (y, 0); | |
| 1333 gtk_imhtml_select_bits (imhtml); | |
| 1334 } | |
| 1335 | |
| 1336 gtk_selection_owner_set (widget, GDK_SELECTION_PRIMARY, event->time); | |
| 1337 } | |
| 1338 | |
|
1547
7b50a08090a2
[gaim-migrate @ 1557]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1528
diff
changeset
|
1339 if ((event->button == 1) && (imhtml->sel_startx == 0)) { |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1340 GList *urls = imhtml->urls; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1341 struct url_widget *uw; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1342 |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1343 while (urls) { |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1344 uw = (struct url_widget *) urls->data; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1345 if ((x > uw->x) && (x < uw->x + uw->width) && |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1346 (y > uw->y) && (y < uw->y + uw->height)) { |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1347 gtk_signal_emit (GTK_OBJECT (imhtml), signals [URL_CLICKED], |
|
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
1348 uw->bit->url); |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1349 return TRUE; |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1350 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1351 urls = g_list_next (urls); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1352 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1353 } |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1354 |
| 1428 | 1355 return TRUE; |
| 1356 } | |
| 1357 | |
| 1358 static void | |
| 1359 gtk_imhtml_selection_get (GtkWidget *widget, | |
| 1360 GtkSelectionData *sel_data, | |
| 1361 guint sel_info, | |
| 1362 guint32 time) | |
| 1363 { | |
| 1364 GtkIMHtml *imhtml; | |
| 1365 gchar *string; | |
| 1366 gint length; | |
| 1367 | |
| 1368 g_return_if_fail (widget != NULL); | |
| 1369 g_return_if_fail (GTK_IS_IMHTML (widget)); | |
| 1370 g_return_if_fail (sel_data->selection == GDK_SELECTION_PRIMARY); | |
| 1371 | |
| 1372 imhtml = GTK_IMHTML (widget); | |
| 1373 | |
| 1374 g_return_if_fail (imhtml->selected_text != NULL); | |
| 1375 g_return_if_fail (imhtml->selected_text->str != NULL); | |
| 1376 | |
|
2188
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1377 if (imhtml->selected_text->len <= 0) |
|
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1378 return; |
|
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1379 |
|
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1380 string = g_strdup (imhtml->selected_text->str); |
|
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1381 length = strlen (string); |
| 1428 | 1382 |
| 1383 if (sel_info == TARGET_STRING) { | |
| 1384 gtk_selection_data_set (sel_data, | |
| 1385 GDK_SELECTION_TYPE_STRING, | |
| 1386 8 * sizeof (gchar), | |
| 1387 (guchar *) string, | |
| 1388 length); | |
| 1389 } else if ((sel_info == TARGET_TEXT) || (sel_info == TARGET_COMPOUND_TEXT)) { | |
| 1390 guchar *text; | |
| 1391 GdkAtom encoding; | |
| 1392 gint format; | |
| 1393 gint new_length; | |
| 1394 | |
| 1395 gdk_string_to_compound_text (string, &encoding, &format, &text, &new_length); | |
| 1396 gtk_selection_data_set (sel_data, encoding, format, text, new_length); | |
| 1397 gdk_free_compound_text (text); | |
| 1398 } | |
| 1399 | |
|
2188
98c434792ab7
[gaim-migrate @ 2198]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2140
diff
changeset
|
1400 g_free (string); |
| 1428 | 1401 } |
| 1402 | |
| 1403 static gint | |
| 1404 gtk_imhtml_selection_clear_event (GtkWidget *widget, | |
| 1405 GdkEventSelection *event) | |
| 1406 { | |
| 1407 GtkIMHtml *imhtml; | |
| 1408 | |
| 1409 g_return_val_if_fail (widget != NULL, FALSE); | |
| 1410 g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE); | |
| 1411 g_return_val_if_fail (event != NULL, FALSE); | |
| 1412 g_return_val_if_fail (event->selection == GDK_SELECTION_PRIMARY, TRUE); | |
| 1413 | |
| 1414 if (!gtk_selection_clear (widget, event)) | |
| 1415 return FALSE; | |
| 1416 | |
| 1417 imhtml = GTK_IMHTML (widget); | |
| 1418 | |
| 1419 gtk_imhtml_select_none (imhtml); | |
| 1420 | |
| 1421 return TRUE; | |
| 1422 } | |
| 1423 | |
| 1424 static void | |
|
1955
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1425 gtk_imhtml_adjustment_changed (GtkAdjustment *adjustment, |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1426 GtkIMHtml *imhtml) |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1427 { |
|
1980
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1428 GtkLayout *layout = GTK_LAYOUT (imhtml); |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1429 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1430 layout->xoffset = (gint) layout->hadjustment->value; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1431 layout->yoffset = (gint) layout->vadjustment->value; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1432 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1433 if (!GTK_WIDGET_MAPPED (imhtml) || !GTK_WIDGET_REALIZED (imhtml)) |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1434 return; |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1435 |
|
5b79252ea95c
[gaim-migrate @ 1990]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1979
diff
changeset
|
1436 if (layout->freeze_count) |
|
1955
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1437 return; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1438 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1439 if (layout->yoffset < TOP_BORDER) |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1440 gdk_window_clear_area (layout->bin_window, 0, 0, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1441 imhtml->xsize, TOP_BORDER - layout->yoffset); |
|
1961
0a3edeba05b6
[gaim-migrate @ 1971]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1955
diff
changeset
|
1442 |
|
1955
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1443 gtk_imhtml_draw_exposed (imhtml); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1444 } |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1445 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1446 static void |
| 1428 | 1447 gtk_imhtml_set_scroll_adjustments (GtkLayout *layout, |
| 1448 GtkAdjustment *hadj, | |
| 1449 GtkAdjustment *vadj) | |
| 1450 { | |
|
1955
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1451 gboolean need_adjust = FALSE; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1452 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1453 g_return_if_fail (layout != NULL); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1454 g_return_if_fail (GTK_IS_IMHTML (layout)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1455 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1456 if (hadj) |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1457 g_return_if_fail (GTK_IS_ADJUSTMENT (hadj)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1458 else |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1459 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
|
1460 if (vadj) |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1461 g_return_if_fail (GTK_IS_ADJUSTMENT (vadj)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1462 else |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1463 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
|
1464 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1465 if (layout->hadjustment && (layout->hadjustment != hadj)) { |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1466 gtk_signal_disconnect_by_data (GTK_OBJECT (layout->hadjustment), layout); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1467 gtk_object_unref (GTK_OBJECT (layout->hadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1468 } |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1469 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1470 if (layout->vadjustment && (layout->vadjustment != vadj)) { |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1471 gtk_signal_disconnect_by_data (GTK_OBJECT (layout->vadjustment), layout); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1472 gtk_object_unref (GTK_OBJECT (layout->vadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1473 } |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1474 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1475 if (layout->hadjustment != hadj) { |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1476 layout->hadjustment = hadj; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1477 gtk_object_ref (GTK_OBJECT (layout->hadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1478 gtk_object_sink (GTK_OBJECT (layout->hadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1479 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1480 gtk_signal_connect (GTK_OBJECT (layout->hadjustment), "value_changed", |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1481 (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1482 need_adjust = TRUE; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1483 } |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1484 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1485 if (layout->vadjustment != vadj) { |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1486 layout->vadjustment = vadj; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1487 gtk_object_ref (GTK_OBJECT (layout->vadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1488 gtk_object_sink (GTK_OBJECT (layout->vadjustment)); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1489 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1490 gtk_signal_connect (GTK_OBJECT (layout->vadjustment), "value_changed", |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1491 (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout); |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1492 need_adjust = TRUE; |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1493 } |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1494 |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1495 if (need_adjust) |
|
9ed99b8c5c9c
[gaim-migrate @ 1965]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1780
diff
changeset
|
1496 gtk_imhtml_adjustment_changed (NULL, GTK_IMHTML (layout)); |
| 1428 | 1497 } |
| 1498 | |
| 1499 static void | |
| 1500 gtk_imhtml_class_init (GtkIMHtmlClass *class) | |
| 1501 { | |
| 1502 GtkObjectClass *object_class; | |
| 1503 GtkWidgetClass *widget_class; | |
| 1504 GtkLayoutClass *layout_class; | |
| 1505 | |
| 1506 object_class = (GtkObjectClass*) class; | |
| 1507 widget_class = (GtkWidgetClass*) class; | |
| 1508 layout_class = (GtkLayoutClass*) class; | |
| 1509 | |
| 1510 parent_class = gtk_type_class (GTK_TYPE_LAYOUT); | |
| 1511 | |
| 1512 signals [URL_CLICKED] = | |
| 1513 gtk_signal_new ("url_clicked", | |
| 1514 GTK_RUN_FIRST, | |
| 1515 object_class->type, | |
| 1516 GTK_SIGNAL_OFFSET (GtkIMHtmlClass, url_clicked), | |
| 1517 gtk_marshal_NONE__POINTER, | |
| 1518 GTK_TYPE_NONE, 1, | |
| 1519 GTK_TYPE_POINTER); | |
| 1520 | |
| 1521 gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); | |
| 1522 | |
| 1523 object_class->destroy = gtk_imhtml_destroy; | |
| 1524 | |
| 1525 widget_class->realize = gtk_imhtml_realize; | |
| 1526 widget_class->draw = gtk_imhtml_draw; | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1527 widget_class->draw_focus = gtk_imhtml_draw_focus; |
| 1428 | 1528 widget_class->style_set = gtk_imhtml_style_set; |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1529 widget_class->expose_event = gtk_imhtml_expose_event; |
| 1428 | 1530 widget_class->size_allocate = gtk_imhtml_size_allocate; |
| 1531 widget_class->motion_notify_event = gtk_imhtml_motion_notify_event; | |
|
1613
35a13ece3a9c
[gaim-migrate @ 1623]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1582
diff
changeset
|
1532 widget_class->leave_notify_event = gtk_imhtml_leave_notify_event; |
| 1428 | 1533 widget_class->button_press_event = gtk_imhtml_button_press_event; |
| 1534 widget_class->button_release_event = gtk_imhtml_button_release_event; | |
| 1535 widget_class->selection_get = gtk_imhtml_selection_get; | |
| 1536 widget_class->selection_clear_event = gtk_imhtml_selection_clear_event; | |
| 1537 | |
| 1538 layout_class->set_scroll_adjustments = gtk_imhtml_set_scroll_adjustments; | |
| 1539 } | |
| 1540 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1541 static gchar** |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1542 get_font_names () |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1543 { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1544 gint num_fonts = 0; |
|
2065
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1545 gchar **xfontnames; |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1546 static gchar **fonts = NULL; |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1547 gint i; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1548 |
|
2065
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1549 if (fonts) |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1550 return fonts; |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1551 |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1552 xfontnames = XListFonts (GDK_DISPLAY (), "-*", MAX_FONTS, &num_fonts); |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1553 |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1554 if (!num_fonts) { |
|
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1555 XFreeFontNames(xfontnames); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1556 return g_new0 (char *, 1); |
|
2065
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1557 } |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1558 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1559 fonts = g_new0 (char *, num_fonts + 1); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1560 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1561 for (i = 0; i < num_fonts; i++) { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1562 gint countdown = 1, num_dashes = 1; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1563 const gchar *t1 = xfontnames [i]; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1564 const gchar *t2; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1565 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1566 while (*t1 && (countdown >= 0)) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1567 if (*t1++ == '-') |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1568 countdown--; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1569 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1570 for (t2 = t1; *t2; t2++) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1571 if (*t2 == '-' && --num_dashes == 0) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1572 break; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1573 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1574 fonts [i] = g_strndup (t1, (long) t2 - (long) t1); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1575 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1576 |
|
2065
391440022697
[gaim-migrate @ 2075]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2048
diff
changeset
|
1577 XFreeFontNames(xfontnames); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1578 return fonts; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1579 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1580 |
| 1428 | 1581 static GdkFont* |
| 1582 gtk_imhtml_font_load (GtkIMHtml *imhtml, | |
| 1583 gchar *name, | |
| 1584 gboolean bold, | |
| 1585 gboolean italics, | |
| 1586 gint fontsize) | |
| 1587 { | |
| 1588 gchar buf [16 * 1024]; | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1589 GdkFont *font = NULL; |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1590 XFontStruct *xfs; |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1591 static gchar **fontnames = NULL; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1592 gchar *choice = NULL; |
| 1428 | 1593 gint size = fontsize ? font_sizes [MIN (fontsize, MAX_SIZE) - 1] : 120; |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1594 gint i, j; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1595 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1596 if (!fontnames) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1597 fontnames = get_font_names (); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1598 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1599 if (name) { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1600 gchar **choices = g_strsplit (name, ",", -1); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1601 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1602 for (i = 0; choices [i]; i++) { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1603 for (j = 0; fontnames [j]; j++) |
|
2048
3366311426df
[gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2022
diff
changeset
|
1604 if (!g_strcasecmp (fontnames [j], choices [i])) |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1605 break; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1606 if (fontnames [j]) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1607 break; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1608 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1609 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1610 if (choices [i]) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1611 choice = g_strdup (choices [i]); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1612 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1613 g_strfreev (choices); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1614 } else if (!bold && !italics && !fontsize && imhtml->default_font) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1615 return gdk_font_ref (imhtml->default_font); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1616 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1617 if (!choice) { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1618 for (i = 0; fontnames [i]; i++) |
|
2048
3366311426df
[gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2022
diff
changeset
|
1619 if (!g_strcasecmp (fontnames [i], DEFAULT_FONT_NAME)) |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1620 break; |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1621 if (fontnames [i]) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1622 choice = g_strdup (DEFAULT_FONT_NAME); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1623 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1624 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1625 if (!choice) { |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1626 if (imhtml->default_font) |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1627 return gdk_font_ref (imhtml->default_font); |
|
2115
3ce77b547cf2
[gaim-migrate @ 2125]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2075
diff
changeset
|
1628 return gdk_fontset_load ("-*-*-*-*-*-*-*-*-*-*-*-*-*-*,*"); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1629 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1630 |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1631 g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-iso8859-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1632 choice, |
| 1428 | 1633 bold ? "bold" : "medium", |
| 1634 italics ? 'i' : 'r', | |
| 1635 size); | |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1636 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1637 |
|
2140
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1638 if (!font && italics) { |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1639 g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-%d-*-*-*-*-iso8859-*", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1640 choice, |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1641 bold ? "bold" : "medium", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1642 size); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1643 font = gdk_font_load (buf); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1644 } |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1645 |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1646 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1647 g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1648 choice, |
| 1428 | 1649 bold ? "bold" : "medium", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1650 italics ? 'i' : 'r'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1651 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1652 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1653 |
|
2140
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1654 if (!font && italics) { |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1655 g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-*-*-*-*-*-iso8859-*", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1656 choice, |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1657 bold ? "bold" : "medium"); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1658 font = gdk_font_load (buf); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1659 } |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1660 |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1661 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1662 g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1663 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1664 italics ? 'i' : 'r'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1665 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1666 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1667 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1668 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1669 g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1670 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1671 italics ? 'o' : '*'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1672 font = gdk_font_load (buf); |
| 1428 | 1673 } |
| 1674 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1675 if (!font && italics) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1676 g_snprintf (buf, sizeof (buf), "-*-%s-*-*-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1677 choice); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1678 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1679 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1680 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1681 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1682 g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-*-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1683 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1684 bold ? "bold" : "medium", |
| 1428 | 1685 italics ? 'i' : 'r', |
| 1686 size); | |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1687 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1688 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1689 |
|
2140
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1690 if (!font && italics) { |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1691 g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-%d-*-*-*-*-*-*", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1692 choice, |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1693 bold ? "bold" : "medium", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1694 size); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1695 font = gdk_font_load (buf); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1696 } |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1697 |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1698 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1699 g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1700 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1701 bold ? "bold" : "medium", |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1702 italics ? 'i' : 'r'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1703 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1704 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1705 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1706 if (!font) { |
|
2140
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1707 g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-*-*-*-*-*-*-*", |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1708 choice, |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1709 bold ? "bold" : "medium"); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1710 font = gdk_font_load (buf); |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1711 } |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1712 |
|
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
1713 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1714 g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1715 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1716 italics ? 'i' : 'r'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1717 font = gdk_font_load (buf); |
| 1428 | 1718 } |
| 1719 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1720 if (!font) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1721 g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1722 choice, |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1723 italics ? 'o' : '*'); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1724 font = gdk_font_load (buf); |
| 1428 | 1725 } |
| 1726 | |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1727 if (!font && italics) { |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1728 g_snprintf (buf, sizeof (buf), "-*-%s-*-*-*-*-*-*-*-*-*-*-*-*", |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1729 choice); |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1730 font = gdk_font_load (buf); |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1731 } |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1732 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1733 g_free (choice); |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1734 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1735 if (!font && imhtml->default_font) |
| 1428 | 1736 return gdk_font_ref (imhtml->default_font); |
| 1737 | |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1738 xfs = font ? GDK_FONT_XFONT (font) : NULL; |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1739 if (xfs && (xfs->min_byte1 != 0 || xfs->max_byte1 != 0)) { |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1740 gchar *tmp_name; |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1741 |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1742 gdk_font_unref (font); |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1743 tmp_name = g_strconcat (buf, ",*", NULL); |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1744 font = gdk_fontset_load (tmp_name); |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1745 g_free (tmp_name); |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1746 } |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1747 |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1748 if (!font) |
|
2116
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1749 return gdk_fontset_load ("-*-*-*-*-*-*-*-*-*-*-*-*-*-*,*"); |
|
6402958c64c9
[gaim-migrate @ 2126]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2115
diff
changeset
|
1750 |
|
1978
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1751 |
|
a7bfa23e80a1
[gaim-migrate @ 1988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1964
diff
changeset
|
1752 return font; |
| 1428 | 1753 } |
| 1754 | |
| 1755 static void | |
| 1756 gtk_imhtml_init (GtkIMHtml *imhtml) | |
| 1757 { | |
| 1758 static const GtkTargetEntry targets [] = { | |
| 1759 { "STRING", 0, TARGET_STRING }, | |
| 1760 { "TEXT", 0, TARGET_TEXT }, | |
| 1761 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT } | |
| 1762 }; | |
| 1763 | |
| 1764 imhtml->default_font = gtk_imhtml_font_load (imhtml, NULL, FALSE, FALSE, 0); | |
| 1765 if (imhtml->default_font == NULL) | |
| 1766 g_warning ("GtkIMHtml: Could not load default font!"); | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
1767 imhtml->default_fg_color = gdk_color_copy (>K_WIDGET (imhtml)->style->fg [GTK_STATE_NORMAL]); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
1768 imhtml->default_bg_color = gdk_color_copy (>K_WIDGET (imhtml)->style->base [GTK_STATE_NORMAL]); |
| 1428 | 1769 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2); |
| 1770 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); | |
| 1771 | |
| 1772 GTK_WIDGET_SET_FLAGS (GTK_WIDGET (imhtml), GTK_CAN_FOCUS); | |
| 1773 gtk_selection_add_targets (GTK_WIDGET (imhtml), GDK_SELECTION_PRIMARY, targets, 3); | |
| 1774 } | |
| 1775 | |
| 1776 GtkType | |
| 1777 gtk_imhtml_get_type (void) | |
| 1778 { | |
| 1779 static GtkType imhtml_type = 0; | |
| 1780 | |
| 1781 if (!imhtml_type) { | |
| 1782 static const GtkTypeInfo imhtml_info = { | |
| 1783 "GtkIMHtml", | |
| 1784 sizeof (GtkIMHtml), | |
| 1785 sizeof (GtkIMHtmlClass), | |
| 1786 (GtkClassInitFunc) gtk_imhtml_class_init, | |
| 1787 (GtkObjectInitFunc) gtk_imhtml_init, | |
| 1788 NULL, | |
| 1789 NULL, | |
| 1790 NULL | |
| 1791 }; | |
| 1792 | |
| 1793 imhtml_type = gtk_type_unique (GTK_TYPE_LAYOUT, &imhtml_info); | |
| 1794 } | |
| 1795 | |
| 1796 return imhtml_type; | |
| 1797 } | |
| 1798 | |
| 1799 static void | |
| 1800 gtk_imhtml_init_smiley_hash (GtkIMHtml *imhtml) | |
| 1801 { | |
| 1802 g_return_if_fail (imhtml != NULL); | |
| 1803 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1804 | |
| 1805 imhtml->smiley_hash = g_hash_table_new (g_str_hash, g_str_equal); | |
| 1806 | |
| 1807 gtk_imhtml_associate_smiley (imhtml, ":)", smile_xpm); | |
| 1808 gtk_imhtml_associate_smiley (imhtml, ":-)", smile_xpm); | |
| 1809 | |
| 1810 gtk_imhtml_associate_smiley (imhtml, ":(", sad_xpm); | |
| 1811 gtk_imhtml_associate_smiley (imhtml, ":-(", sad_xpm); | |
| 1812 | |
| 1813 gtk_imhtml_associate_smiley (imhtml, ";)", wink_xpm); | |
| 1814 gtk_imhtml_associate_smiley (imhtml, ";-)", wink_xpm); | |
| 1815 | |
| 1816 gtk_imhtml_associate_smiley (imhtml, ":-p", tongue_xpm); | |
| 1817 gtk_imhtml_associate_smiley (imhtml, ":-P", tongue_xpm); | |
| 1818 | |
| 1819 gtk_imhtml_associate_smiley (imhtml, "=-O", scream_xpm); | |
| 1820 gtk_imhtml_associate_smiley (imhtml, ":-*", kiss_xpm); | |
| 1821 gtk_imhtml_associate_smiley (imhtml, ">:o", yell_xpm); | |
| 1822 gtk_imhtml_associate_smiley (imhtml, "8-)", smile8_xpm); | |
| 1823 gtk_imhtml_associate_smiley (imhtml, ":-$", moneymouth_xpm); | |
| 1824 gtk_imhtml_associate_smiley (imhtml, ":-!", burp_xpm); | |
| 1825 gtk_imhtml_associate_smiley (imhtml, ":-[", embarrassed_xpm); | |
| 1826 gtk_imhtml_associate_smiley (imhtml, ":'(", cry_xpm); | |
| 1827 | |
| 1828 gtk_imhtml_associate_smiley (imhtml, ":-/", think_xpm); | |
| 1829 gtk_imhtml_associate_smiley (imhtml, ":-\\", think_xpm); | |
| 1830 | |
| 1831 gtk_imhtml_associate_smiley (imhtml, ":-X", crossedlips_xpm); | |
| 1832 gtk_imhtml_associate_smiley (imhtml, ":-D", bigsmile_xpm); | |
| 1833 gtk_imhtml_associate_smiley (imhtml, "O:-)", angel_xpm); | |
| 1834 } | |
| 1835 | |
| 1836 GtkWidget* | |
| 1837 gtk_imhtml_new (GtkAdjustment *hadj, | |
| 1838 GtkAdjustment *vadj) | |
| 1839 { | |
| 1840 GtkIMHtml *imhtml = gtk_type_new (GTK_TYPE_IMHTML); | |
| 1841 | |
| 1842 gtk_imhtml_set_adjustments (imhtml, hadj, vadj); | |
| 1843 | |
| 1844 imhtml->bits = NULL; | |
| 1845 imhtml->urls = NULL; | |
| 1846 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1847 imhtml->x = 0; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1848 imhtml->y = TOP_BORDER; |
| 1428 | 1849 imhtml->llheight = 0; |
| 1850 imhtml->llascent = 0; | |
| 1851 imhtml->line = NULL; | |
| 1852 | |
| 1853 imhtml->selected_text = g_string_new (""); | |
| 1854 imhtml->scroll_timer = 0; | |
| 1855 | |
| 1856 imhtml->img = NULL; | |
| 1857 | |
| 1858 imhtml->smileys = TRUE; | |
| 1859 imhtml->comments = FALSE; | |
| 1860 | |
| 1861 imhtml->smin = G_MAXINT; | |
| 1862 imhtml->smax = 0; | |
| 1863 gtk_imhtml_init_smiley_hash (imhtml); | |
| 1864 | |
| 1865 return GTK_WIDGET (imhtml); | |
| 1866 } | |
| 1867 | |
| 1868 void | |
| 1869 gtk_imhtml_set_adjustments (GtkIMHtml *imhtml, | |
| 1870 GtkAdjustment *hadj, | |
| 1871 GtkAdjustment *vadj) | |
| 1872 { | |
| 1873 gtk_layout_set_hadjustment (GTK_LAYOUT (imhtml), hadj); | |
| 1874 gtk_layout_set_vadjustment (GTK_LAYOUT (imhtml), vadj); | |
| 1875 } | |
| 1876 | |
| 1877 void | |
| 1878 gtk_imhtml_set_defaults (GtkIMHtml *imhtml, | |
| 1879 GdkFont *font, | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1880 GdkColor *fg_color, |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1881 GdkColor *bg_color) |
| 1428 | 1882 { |
| 1883 g_return_if_fail (imhtml != NULL); | |
| 1884 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1885 | |
| 1886 if (font) { | |
| 1887 if (imhtml->default_font) | |
| 1888 gdk_font_unref (imhtml->default_font); | |
| 1889 imhtml->default_font = gdk_font_ref (font); | |
| 1890 } | |
| 1891 | |
| 1892 if (fg_color) { | |
| 1893 if (imhtml->default_fg_color) | |
| 1894 gdk_color_free (imhtml->default_fg_color); | |
| 1895 imhtml->default_fg_color = gdk_color_copy (fg_color); | |
| 1896 } | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1897 |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1898 if (bg_color) { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1899 if (imhtml->default_bg_color) |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1900 gdk_color_free (imhtml->default_bg_color); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
1901 imhtml->default_bg_color = gdk_color_copy (bg_color); |
|
1647
23b734cf1161
[gaim-migrate @ 1657]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1626
diff
changeset
|
1902 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
|
1903 } |
| 1428 | 1904 } |
| 1905 | |
| 1906 void | |
| 1907 gtk_imhtml_set_img_handler (GtkIMHtml *imhtml, | |
| 1908 GtkIMHtmlImage handler) | |
| 1909 { | |
| 1910 g_return_if_fail (imhtml != NULL); | |
| 1911 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1912 | |
| 1913 imhtml->img = handler; | |
| 1914 } | |
| 1915 | |
| 1916 void | |
| 1917 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml, | |
| 1918 gchar *text, | |
| 1919 gchar **xpm) | |
| 1920 { | |
| 1921 g_return_if_fail (imhtml != NULL); | |
| 1922 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 1923 g_return_if_fail (text != NULL); | |
| 1924 | |
| 1925 if (strlen (text) < imhtml->smin) | |
| 1926 imhtml->smin = strlen (text); | |
| 1927 | |
| 1928 if (strlen (text) > imhtml->smax) | |
| 1929 imhtml->smax = strlen (text); | |
| 1930 | |
|
1519
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1931 if (!imhtml->smiley_start) |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1932 imhtml->smiley_start = g_string_new (""); |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1933 |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1934 if (!strchr (imhtml->smiley_start->str, text [0])) |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1935 imhtml->smiley_start = g_string_append_c (imhtml->smiley_start, text [0]); |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
1936 |
| 1428 | 1937 if (xpm == NULL) |
| 1938 g_hash_table_remove (imhtml->smiley_hash, text); | |
| 1939 else | |
| 1940 g_hash_table_insert (imhtml->smiley_hash, text, xpm); | |
| 1941 } | |
| 1942 | |
| 1943 static void | |
| 1944 new_line (GtkIMHtml *imhtml) | |
| 1945 { | |
| 1946 GList *last = g_list_last (imhtml->line); | |
| 1947 struct line_info *li; | |
| 1948 | |
| 1949 if (last) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1950 li = last->data; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1951 if (li->x + li->width != imhtml->xsize) |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1952 li->width = imhtml->xsize - li->x; |
| 1428 | 1953 } |
| 1954 | |
| 1955 last = imhtml->line; | |
| 1956 if (last) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1957 li = last->data; |
| 1428 | 1958 if (li->height < MIN_HEIGHT) { |
| 1959 while (last) { | |
| 1960 gint diff; | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1961 li = last->data; |
| 1428 | 1962 diff = MIN_HEIGHT - li->height; |
| 1963 li->height = MIN_HEIGHT; | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
1964 li->ascent += diff / 2; |
| 1428 | 1965 last = g_list_next (last); |
| 1966 } | |
| 1967 imhtml->llheight = MIN_HEIGHT; | |
| 1968 } | |
| 1969 } | |
| 1970 | |
| 1971 g_list_free (imhtml->line); | |
| 1972 imhtml->line = NULL; | |
| 1973 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
1974 imhtml->x = 0; |
| 1428 | 1975 imhtml->y += imhtml->llheight; |
|
1462
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
1976 imhtml->llheight = 0; |
|
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
1977 imhtml->llascent = 0; |
| 1428 | 1978 } |
| 1979 | |
| 1980 static void | |
| 1981 backwards_update (GtkIMHtml *imhtml, | |
| 1982 GtkIMHtmlBit *bit, | |
| 1983 gint height, | |
| 1984 gint ascent) | |
| 1985 { | |
| 1986 gint diff; | |
| 1987 GList *ls = NULL; | |
| 1988 struct line_info *li; | |
| 1989 struct url_widget *uw; | |
| 1990 | |
| 1991 if (height > imhtml->llheight) { | |
| 1992 diff = height - imhtml->llheight; | |
| 1993 | |
| 1994 ls = imhtml->line; | |
| 1995 while (ls) { | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
1996 li = ls->data; |
| 1428 | 1997 li->height += diff; |
| 1998 if (ascent) | |
| 1999 li->ascent = ascent; | |
| 2000 else | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
2001 li->ascent += diff / 2; |
| 1428 | 2002 ls = g_list_next (ls); |
| 2003 } | |
| 2004 | |
| 2005 ls = imhtml->urls; | |
| 2006 while (ls) { | |
| 2007 uw = ls->data; | |
| 2008 if (uw->y + diff > imhtml->y) | |
| 2009 uw->y += diff; | |
| 2010 ls = g_list_next (ls); | |
| 2011 } | |
| 2012 | |
| 2013 imhtml->llheight = height; | |
| 2014 if (ascent) | |
| 2015 imhtml->llascent = ascent; | |
| 2016 else | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
2017 imhtml->llascent += diff / 2; |
| 1428 | 2018 } |
| 2019 } | |
| 2020 | |
| 2021 static void | |
| 2022 add_text_renderer (GtkIMHtml *imhtml, | |
| 2023 GtkIMHtmlBit *bit, | |
| 2024 gchar *text) | |
| 2025 { | |
| 2026 struct line_info *li; | |
| 2027 struct url_widget *uw; | |
| 2028 gint width; | |
| 2029 | |
| 2030 if (text) | |
| 2031 width = gdk_string_width (bit->font, text); | |
| 2032 else | |
| 2033 width = 0; | |
| 2034 | |
| 2035 li = g_new0 (struct line_info, 1); | |
| 2036 li->x = imhtml->x; | |
| 2037 li->y = imhtml->y; | |
| 2038 li->width = width; | |
| 2039 li->height = imhtml->llheight; | |
| 2040 if (text) | |
| 2041 li->ascent = MAX (imhtml->llascent, bit->font->ascent); | |
| 2042 else | |
| 2043 li->ascent = 0; | |
| 2044 li->text = text; | |
| 2045 li->bit = bit; | |
| 2046 | |
| 2047 if (bit->url) { | |
| 2048 uw = g_new0 (struct url_widget, 1); | |
| 2049 uw->x = imhtml->x; | |
| 2050 uw->y = imhtml->y; | |
| 2051 uw->width = width; | |
| 2052 uw->height = imhtml->llheight; | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
2053 uw->bit = bit; |
| 1428 | 2054 imhtml->urls = g_list_append (imhtml->urls, uw); |
| 2055 } | |
| 2056 | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2057 bit->chunks = g_list_append (bit->chunks, li); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2058 imhtml->line = g_list_append (imhtml->line, li); |
| 1428 | 2059 } |
| 2060 | |
| 2061 static void | |
| 2062 add_img_renderer (GtkIMHtml *imhtml, | |
| 2063 GtkIMHtmlBit *bit) | |
| 2064 { | |
| 2065 struct line_info *li; | |
| 2066 struct url_widget *uw; | |
| 2067 gint width; | |
| 2068 | |
| 2069 gdk_window_get_size (bit->pm, &width, NULL); | |
| 2070 | |
| 2071 li = g_new0 (struct line_info, 1); | |
| 2072 li->x = imhtml->x; | |
| 2073 li->y = imhtml->y; | |
| 2074 li->width = width; | |
| 2075 li->height = imhtml->llheight; | |
| 2076 li->ascent = 0; | |
| 2077 li->bit = bit; | |
| 2078 | |
| 2079 if (bit->url) { | |
| 2080 uw = g_new0 (struct url_widget, 1); | |
| 2081 uw->x = imhtml->x; | |
| 2082 uw->y = imhtml->y; | |
| 2083 uw->width = width; | |
| 2084 uw->height = imhtml->llheight; | |
|
1574
7ad82fa9e6ce
[gaim-migrate @ 1584]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1547
diff
changeset
|
2085 uw->bit = bit; |
| 1428 | 2086 imhtml->urls = g_list_append (imhtml->urls, uw); |
| 2087 } | |
| 2088 | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2089 bit->chunks = g_list_append (bit->chunks, li); |
|
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
2090 imhtml->line = g_list_append (imhtml->line, li); |
| 1428 | 2091 |
| 2092 imhtml->x += width; | |
| 2093 } | |
| 2094 | |
| 2095 static void | |
| 2096 gtk_imhtml_draw_bit (GtkIMHtml *imhtml, | |
| 2097 GtkIMHtmlBit *bit) | |
| 2098 { | |
| 2099 gint width, height; | |
| 2100 | |
| 2101 g_return_if_fail (imhtml != NULL); | |
| 2102 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2103 g_return_if_fail (bit != NULL); | |
| 2104 | |
| 2105 if ( (bit->type == TYPE_TEXT) || | |
| 2106 ((bit->type == TYPE_SMILEY) && !imhtml->smileys) || | |
| 2107 ((bit->type == TYPE_COMMENT) && imhtml->comments)) { | |
| 2108 gchar *copy = g_strdup (bit->text); | |
| 2109 gint pos = 0; | |
| 2110 gboolean seenspace = FALSE; | |
| 2111 gchar *tmp; | |
| 2112 | |
| 2113 height = bit->font->ascent + bit->font->descent; | |
| 2114 width = gdk_string_width (bit->font, bit->text); | |
| 2115 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2116 if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize)) { |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2117 gint remain = imhtml->xsize - imhtml->x; |
| 1428 | 2118 while (gdk_text_width (bit->font, copy, pos) < remain) { |
| 2119 if (copy [pos] == ' ') | |
| 2120 seenspace = TRUE; | |
| 2121 pos++; | |
| 2122 } | |
| 2123 if (seenspace) { | |
| 2124 while (copy [pos - 1] != ' ') pos--; | |
| 2125 | |
| 2126 tmp = g_strndup (copy, pos); | |
| 2127 | |
| 2128 backwards_update (imhtml, bit, height, bit->font->ascent); | |
| 2129 add_text_renderer (imhtml, bit, tmp); | |
| 2130 } else | |
| 2131 pos = 0; | |
| 2132 seenspace = FALSE; | |
| 2133 new_line (imhtml); | |
| 2134 } | |
| 2135 | |
| 2136 backwards_update (imhtml, bit, height, bit->font->ascent); | |
| 2137 | |
| 2138 while (pos < strlen (bit->text)) { | |
| 2139 width = gdk_string_width (bit->font, copy + pos); | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2140 if (imhtml->x + width > imhtml->xsize) { |
| 1428 | 2141 gint newpos = 0; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2142 gint remain = imhtml->xsize - imhtml->x; |
| 1428 | 2143 while (gdk_text_width (bit->font, copy + pos, newpos) < remain) { |
| 2144 if (copy [pos + newpos] == ' ') | |
| 2145 seenspace = TRUE; | |
| 2146 newpos++; | |
| 2147 } | |
| 2148 | |
| 2149 if (seenspace) | |
| 2150 while (copy [pos + newpos - 1] != ' ') newpos--; | |
| 2151 | |
| 2152 if (newpos == 0) | |
| 2153 break; | |
| 2154 | |
| 2155 tmp = g_strndup (copy + pos, newpos); | |
| 2156 pos += newpos; | |
| 2157 | |
|
1462
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
2158 backwards_update (imhtml, bit, height, bit->font->ascent); |
| 1428 | 2159 add_text_renderer (imhtml, bit, tmp); |
| 2160 | |
| 2161 seenspace = FALSE; | |
| 2162 new_line (imhtml); | |
| 2163 } else { | |
| 2164 tmp = g_strdup (copy + pos); | |
| 2165 | |
|
1462
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
2166 backwards_update (imhtml, bit, height, bit->font->ascent); |
| 1428 | 2167 add_text_renderer (imhtml, bit, tmp); |
| 2168 | |
| 2169 pos = strlen (bit->text); | |
| 2170 | |
| 2171 imhtml->x += width; | |
| 2172 } | |
| 2173 } | |
| 2174 | |
| 2175 g_free (copy); | |
| 2176 } else if ((bit->type == TYPE_SMILEY) || (bit->type == TYPE_IMG)) { | |
| 2177 gdk_window_get_size (bit->pm, &width, &height); | |
| 2178 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2179 if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize)) |
| 1428 | 2180 new_line (imhtml); |
|
1462
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
2181 else |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2182 backwards_update (imhtml, bit, height, 0); |
| 1428 | 2183 |
| 2184 add_img_renderer (imhtml, bit); | |
| 2185 } else if (bit->type == TYPE_BR) { | |
| 2186 new_line (imhtml); | |
| 2187 add_text_renderer (imhtml, bit, NULL); | |
| 2188 } else if (bit->type == TYPE_SEP) { | |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2189 struct line_info *li; |
|
1462
1ac49082e099
[gaim-migrate @ 1472]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1461
diff
changeset
|
2190 if (imhtml->llheight) |
| 1428 | 2191 new_line (imhtml); |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2192 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2193 li = g_new0 (struct line_info, 1); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2194 li->x = imhtml->x; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2195 li->y = imhtml->y; |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2196 li->width = imhtml->xsize; |
|
1454
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2197 li->height = HR_HEIGHT * 2; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2198 li->ascent = 0; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2199 li->text = NULL; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2200 li->bit = bit; |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2201 |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2202 bit->chunks = g_list_append (bit->chunks, li); |
|
637592eb8b24
[gaim-migrate @ 1464]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1453
diff
changeset
|
2203 |
| 1428 | 2204 imhtml->llheight = HR_HEIGHT * 2; |
| 2205 new_line (imhtml); | |
| 2206 add_text_renderer (imhtml, bit, NULL); | |
| 2207 } | |
| 2208 } | |
| 2209 | |
| 2210 void | |
| 2211 gtk_imhtml_show_smileys (GtkIMHtml *imhtml, | |
| 2212 gboolean show) | |
| 2213 { | |
| 2214 g_return_if_fail (imhtml != NULL); | |
| 2215 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2216 | |
| 2217 imhtml->smileys = show; | |
| 2218 | |
| 2219 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml))) | |
| 2220 gtk_imhtml_redraw_all (imhtml); | |
| 2221 } | |
| 2222 | |
| 2223 void | |
| 2224 gtk_imhtml_show_comments (GtkIMHtml *imhtml, | |
| 2225 gboolean show) | |
| 2226 { | |
| 2227 g_return_if_fail (imhtml != NULL); | |
| 2228 g_return_if_fail (GTK_IS_IMHTML (imhtml)); | |
| 2229 | |
| 2230 imhtml->comments = show; | |
| 2231 | |
| 2232 if (GTK_WIDGET_VISIBLE (GTK_WIDGET (imhtml))) | |
| 2233 gtk_imhtml_redraw_all (imhtml); | |
| 2234 } | |
| 2235 | |
| 2236 static GdkColor * | |
| 2237 gtk_imhtml_get_color (const gchar *color) | |
| 2238 { | |
| 2239 GdkColor c; | |
| 2240 | |
|
1453
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2241 if (!gdk_color_parse (color, &c)) |
|
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2242 return NULL; |
| 1428 | 2243 |
|
1449
91d84e2073de
[gaim-migrate @ 1459]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1447
diff
changeset
|
2244 return gdk_color_copy (&c); |
| 1428 | 2245 } |
| 2246 | |
| 2247 static gint | |
| 2248 gtk_imhtml_is_smiley (GtkIMHtml *imhtml, | |
| 2249 const gchar *text) | |
| 2250 { | |
| 2251 gchar *tmp; | |
| 2252 gint i; | |
| 2253 | |
| 2254 g_return_val_if_fail (imhtml != NULL, 0); | |
| 2255 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), 0); | |
| 2256 g_return_val_if_fail (text != NULL, 0); | |
| 2257 | |
|
1519
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
2258 if (!imhtml->smiley_start || !strchr (imhtml->smiley_start->str, text [0])) |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
2259 return 0; |
|
d3ff7d80b8fb
[gaim-migrate @ 1529]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1515
diff
changeset
|
2260 |
| 1428 | 2261 tmp = g_malloc (imhtml->smax + 1); |
| 2262 | |
| 2263 for (i = imhtml->smin; i <= imhtml->smax; i++) { | |
| 2264 if (strlen (text) < i) { | |
| 2265 g_free (tmp); | |
| 2266 return 0; | |
| 2267 } | |
| 2268 g_snprintf (tmp, i + 1, "%s", text); | |
| 2269 if (g_hash_table_lookup (imhtml->smiley_hash, tmp)) { | |
| 2270 g_free (tmp); | |
| 2271 return i; | |
| 2272 } | |
| 2273 } | |
| 2274 | |
| 2275 g_free (tmp); | |
| 2276 return 0; | |
| 2277 } | |
| 2278 | |
| 2279 static GtkIMHtmlBit * | |
| 2280 gtk_imhtml_new_bit (GtkIMHtml *imhtml, | |
| 2281 gint type, | |
| 2282 gchar *text, | |
| 2283 gint bold, | |
| 2284 gint italics, | |
| 2285 gint underline, | |
| 2286 gint strike, | |
| 2287 FontDetail *font, | |
| 2288 GdkColor *bg, | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2289 gchar *url, |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2290 gint pre) |
| 1428 | 2291 { |
| 2292 GtkIMHtmlBit *bit = NULL; | |
| 2293 | |
| 2294 g_return_val_if_fail (imhtml != NULL, NULL); | |
| 2295 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); | |
| 2296 | |
| 2297 if ((type == TYPE_TEXT) && ((text == NULL) || (strlen (text) == 0))) | |
| 2298 return NULL; | |
| 2299 | |
| 2300 bit = g_new0 (GtkIMHtmlBit, 1); | |
| 2301 bit->type = type; | |
| 2302 | |
| 2303 if ((text != NULL) && (strlen (text) != 0)) | |
| 2304 bit->text = g_strdup (text); | |
| 2305 | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2306 if ((font != NULL) || bold || italics || pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2307 if (font && (bold || italics || font->size || font->face || pre)) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2308 if (pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2309 bit->font = gtk_imhtml_font_load (imhtml, "courier", bold, italics, font->size); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2310 } else { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2311 bit->font = gtk_imhtml_font_load (imhtml, font->face, bold, italics, font->size); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2312 } |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2313 } else if (bold || italics || pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2314 if (pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2315 bit->font = gtk_imhtml_font_load (imhtml, "Courier", bold, italics, 0); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2316 } else { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2317 bit->font = gtk_imhtml_font_load (imhtml, NULL, bold, italics, 0); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2318 } |
| 1428 | 2319 } |
| 2320 | |
| 2321 if (font && (type != TYPE_BR)) { | |
| 2322 if (font->fore != NULL) | |
| 2323 bit->fore = gdk_color_copy (font->fore); | |
| 2324 | |
| 2325 if (font->back != NULL) | |
| 2326 bit->back = gdk_color_copy (font->back); | |
| 2327 } | |
| 2328 } | |
| 2329 | |
| 2330 if (((bit->type == TYPE_TEXT) || (bit->type == TYPE_SMILEY) || (bit->type == TYPE_COMMENT)) && | |
| 2331 (bit->font == NULL)) | |
| 2332 bit->font = gdk_font_ref (imhtml->default_font); | |
| 2333 | |
| 2334 if (bg != NULL) | |
| 2335 bit->bg = gdk_color_copy (bg); | |
| 2336 | |
| 2337 bit->underline = underline; | |
| 2338 bit->strike = strike; | |
| 2339 | |
| 2340 if (url != NULL) | |
| 2341 bit->url = g_strdup (url); | |
| 2342 | |
| 2343 if (type == TYPE_SMILEY) { | |
| 2344 GdkColor *clr; | |
| 2345 | |
| 2346 if ((font != NULL) && (font->back != NULL)) | |
| 2347 clr = font->back; | |
| 2348 else | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2349 clr = (bg != NULL) ? bg : imhtml->default_bg_color; |
| 1428 | 2350 |
| 2351 bit->pm = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (imhtml)->window, | |
| 2352 &bit->bm, | |
| 2353 clr, | |
| 2354 g_hash_table_lookup (imhtml->smiley_hash, text)); | |
| 2355 } | |
| 2356 | |
| 2357 return bit; | |
| 2358 } | |
| 2359 | |
| 2360 #define NEW_TEXT_BIT gtk_imhtml_new_bit (imhtml, TYPE_TEXT, ws, bold, italics, underline, strike, \ | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2361 fonts ? fonts->data : NULL, bg, url, pre) |
| 1428 | 2362 #define NEW_SMILEY_BIT gtk_imhtml_new_bit (imhtml, TYPE_SMILEY, ws, bold, italics, underline, strike, \ |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2363 fonts ? fonts->data : NULL, bg, url, pre) |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2364 #define NEW_SEP_BIT gtk_imhtml_new_bit (imhtml, TYPE_SEP, NULL, 0, 0, 0, 0, NULL, bg, NULL, 0) |
| 1428 | 2365 #define NEW_BR_BIT gtk_imhtml_new_bit (imhtml, TYPE_BR, NULL, 0, 0, 0, 0, \ |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2366 fonts ? fonts->data : NULL, bg, NULL, 0) |
| 1428 | 2367 #define NEW_COMMENT_BIT gtk_imhtml_new_bit (imhtml, TYPE_COMMENT, ws, bold, italics, underline, strike, \ |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2368 fonts ? fonts->data : NULL, bg, url, pre) |
| 1428 | 2369 |
| 2370 #define NEW_BIT(bit) { GtkIMHtmlBit *tmp = bit; if (tmp != NULL) \ | |
| 2371 newbits = g_list_append (newbits, tmp); } | |
| 2372 | |
| 2373 #define UPDATE_BG_COLORS \ | |
| 2374 { \ | |
| 2375 GdkColormap *cmap; \ | |
| 2376 GList *rev; \ | |
|
1476
721cd9b73704
[gaim-migrate @ 1486]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1473
diff
changeset
|
2377 cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); \ |
| 1428 | 2378 rev = g_list_last (newbits); \ |
| 2379 while (rev) { \ | |
| 2380 GtkIMHtmlBit *bit = rev->data; \ | |
| 2381 if (bit->bg) \ | |
| 2382 gdk_color_free (bit->bg); \ | |
| 2383 bit->bg = gdk_color_copy (bg); \ | |
|
1582
4fcd012c0a6a
[gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1574
diff
changeset
|
2384 if (bit->type == TYPE_BR) \ |
|
4fcd012c0a6a
[gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1574
diff
changeset
|
2385 break; \ |
| 1428 | 2386 rev = g_list_previous (rev); \ |
| 2387 } \ | |
| 2388 if (!rev) { \ | |
| 2389 rev = g_list_last (imhtml->bits); \ | |
| 2390 while (rev) { \ | |
| 2391 GtkIMHtmlBit *bit = rev->data; \ | |
| 2392 if (bit->bg) \ | |
| 2393 gdk_color_free (bit->bg); \ | |
| 2394 bit->bg = gdk_color_copy (bg); \ | |
| 2395 gdk_color_alloc (cmap, bit->bg); \ | |
|
1582
4fcd012c0a6a
[gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1574
diff
changeset
|
2396 if (bit->type == TYPE_BR) \ |
|
4fcd012c0a6a
[gaim-migrate @ 1592]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1574
diff
changeset
|
2397 break; \ |
| 1428 | 2398 rev = g_list_previous (rev); \ |
| 2399 } \ | |
| 2400 } \ | |
| 2401 } | |
| 2402 | |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2403 static gboolean |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2404 is_amp_escape (const gchar *string, |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2405 gchar *replace, |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2406 gint *length) |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2407 { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2408 g_return_val_if_fail (string != NULL, FALSE); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2409 g_return_val_if_fail (replace != NULL, FALSE); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2410 g_return_val_if_fail (length != NULL, FALSE); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2411 |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2412 if (!g_strncasecmp (string, "&", 5)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2413 *replace = '&'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2414 *length = 5; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2415 } else if (!g_strncasecmp (string, "<", 4)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2416 *replace = '<'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2417 *length = 4; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2418 } else if (!g_strncasecmp (string, ">", 4)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2419 *replace = '>'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2420 *length = 4; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2421 } else if (!g_strncasecmp (string, " ", 6)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2422 *replace = ' '; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2423 *length = 6; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2424 } else if (!g_strncasecmp (string, "©", 6)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2425 *replace = '©'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2426 *length = 6; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2427 } else if (!g_strncasecmp (string, """, 6)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2428 *replace = '\"'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2429 *length = 6; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2430 } else if (!g_strncasecmp (string, "®", 5)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2431 *replace = '®'; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2432 *length = 5; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2433 } else if (*(string + 1) == '#') { |
|
2022
199ba82faacb
[gaim-migrate @ 2032]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2002
diff
changeset
|
2434 guint pound = 0; |
|
199ba82faacb
[gaim-migrate @ 2032]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2002
diff
changeset
|
2435 if (sscanf (string, "&#%u;", £) == 1) { |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2436 if (*(string + 3 + (gint)log10 (pound)) != ';') |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2437 return FALSE; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2438 *replace = (gchar)pound; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2439 *length = 2; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2440 while (isdigit ((gint) string [*length])) (*length)++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2441 if (string [*length] == ';') (*length)++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2442 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2443 return FALSE; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2444 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2445 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2446 return FALSE; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2447 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2448 |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2449 return TRUE; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2450 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2451 |
| 1428 | 2452 GString* |
| 2453 gtk_imhtml_append_text (GtkIMHtml *imhtml, | |
| 2454 const gchar *text, | |
| 2455 GtkIMHtmlOptions options) | |
| 2456 { | |
| 2457 const gchar *c; | |
| 2458 gboolean intag = FALSE; | |
|
1703
acce65ffdc80
[gaim-migrate @ 1713]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1691
diff
changeset
|
2459 gint tagquote = 0; |
| 1428 | 2460 gboolean incomment = FALSE; |
| 2461 gchar *ws; | |
| 2462 gchar *tag; | |
| 2463 gint wpos = 0; | |
| 2464 gint tpos = 0; | |
| 2465 int smilelen; | |
| 2466 GList *newbits = NULL; | |
| 2467 | |
| 2468 guint bold = 0, | |
| 2469 italics = 0, | |
| 2470 underline = 0, | |
| 2471 strike = 0, | |
| 2472 sub = 0, | |
| 2473 sup = 0, | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2474 title = 0, |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2475 pre = 0; |
| 1428 | 2476 GSList *fonts = NULL; |
| 2477 GdkColor *bg = NULL; | |
| 2478 gchar *url = NULL; | |
| 2479 | |
| 2480 GtkAdjustment *vadj; | |
| 2481 gboolean scrolldown = TRUE; | |
| 2482 | |
| 2483 GString *retval = NULL; | |
| 2484 | |
| 2485 g_return_val_if_fail (imhtml != NULL, NULL); | |
| 2486 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); | |
| 2487 g_return_val_if_fail (text != NULL, NULL); | |
| 2488 | |
| 2489 if (options & GTK_IMHTML_RETURN_LOG) | |
| 2490 retval = g_string_new (""); | |
| 2491 | |
| 2492 vadj = GTK_LAYOUT (imhtml)->vadjustment; | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
2493 if ((vadj->value < imhtml->y - GTK_WIDGET (imhtml)->allocation.height) && |
| 1428 | 2494 (vadj->upper >= GTK_WIDGET (imhtml)->allocation.height)) |
| 2495 scrolldown = FALSE; | |
| 2496 | |
| 2497 c = text; | |
| 2498 ws = g_malloc (strlen (text) + 1); | |
| 2499 tag = g_malloc (strlen (text) + 1); | |
| 2500 | |
| 2501 ws [0] = '\0'; | |
| 2502 | |
| 2503 while (*c) { | |
| 2504 if (*c == '<') { | |
|
1703
acce65ffdc80
[gaim-migrate @ 1713]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1691
diff
changeset
|
2505 if (intag && (tagquote != 1)) { |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2506 char *d; |
| 1428 | 2507 tag [tpos] = 0; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2508 d = tag; |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2509 while (*d) { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2510 if ((smilelen = gtk_imhtml_is_smiley (imhtml, d)) != 0) { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2511 ws [wpos] = 0; |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2512 wpos = 0; |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2513 NEW_BIT (NEW_TEXT_BIT); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2514 g_snprintf (ws, smilelen + 1, "%s", d); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2515 NEW_BIT (NEW_SMILEY_BIT); |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2516 d += smilelen; |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2517 } else if (*d == '&') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2518 gchar replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2519 gint length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2520 if (is_amp_escape (d, &replace, &length)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2521 ws [wpos++] = replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2522 d += length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2523 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2524 ws [wpos++] = *d++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2525 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2526 } else if (*d == '\n') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2527 if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2528 ws [wpos] = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2529 wpos = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2530 NEW_BIT (NEW_TEXT_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2531 NEW_BIT (NEW_BR_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2532 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
2533 d++; |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2534 } else { |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2535 ws [wpos++] = *d++; |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2536 } |
|
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
2537 } |
| 1428 | 2538 tpos = 0; |
| 2539 } | |
| 2540 | |
| 2541 if (incomment) { | |
| 2542 ws [wpos++] = *c++; | |
| 2543 continue; | |
| 2544 } | |
| 2545 | |
| 2546 if (!g_strncasecmp (c, "<!--", strlen ("<!--"))) { | |
| 2547 if (!(options & GTK_IMHTML_NO_COMMENTS)) { | |
| 2548 ws [wpos] = 0; | |
| 2549 wpos = 0; | |
| 2550 tag [tpos] = 0; | |
| 2551 strcat (tag, ws); | |
| 2552 incomment = TRUE; | |
| 2553 intag = FALSE; | |
| 2554 } | |
| 2555 ws [wpos++] = *c++; | |
| 2556 ws [wpos++] = *c++; | |
| 2557 ws [wpos++] = *c++; | |
| 2558 ws [wpos++] = *c++; | |
| 2559 continue; | |
| 2560 } | |
| 2561 | |
| 2562 tag [tpos++] = *c++; | |
| 2563 intag = TRUE; | |
|
1703
acce65ffdc80
[gaim-migrate @ 1713]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1691
diff
changeset
|
2564 tagquote = 0; |
| 1428 | 2565 } else if (incomment && (*c == '-') && !g_strncasecmp (c, "-->", strlen ("-->"))) { |
| 2566 gchar *tmp; | |
| 2567 ws [wpos] = 0; | |
| 2568 wpos = 0; | |
| 2569 tmp = g_strdup (ws); | |
| 2570 ws [wpos] = 0; | |
| 2571 strcat (ws, tag); | |
| 2572 NEW_BIT (NEW_TEXT_BIT); | |
| 2573 ws [wpos] = 0; | |
| 2574 strcat (ws, tmp + strlen ("<!--")); | |
| 2575 g_free (tmp); | |
| 2576 NEW_BIT (NEW_COMMENT_BIT); | |
| 2577 incomment = FALSE; | |
| 2578 c += strlen ("-->"); | |
|
1703
acce65ffdc80
[gaim-migrate @ 1713]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1691
diff
changeset
|
2579 } else if (*c == '>' && intag && (tagquote != 1)) { |
| 1428 | 2580 gboolean got_tag = FALSE; |
| 2581 tag [tpos++] = *c++; | |
| 2582 tag [tpos] = 0; | |
| 2583 ws [wpos] = 0; | |
| 2584 | |
| 2585 if (!g_strcasecmp (tag, "<B>") || !g_strcasecmp (tag, "<BOLD>")) { | |
| 2586 got_tag = TRUE; | |
| 2587 NEW_BIT (NEW_TEXT_BIT); | |
| 2588 bold++; | |
| 2589 } else if (!g_strcasecmp (tag, "</B>") || !g_strcasecmp (tag, "</BOLD>")) { | |
| 2590 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2591 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2592 if (bold) { |
| 2593 bold--; | |
| 2594 } | |
| 2595 } else if (!g_strcasecmp (tag, "<I>") || !g_strcasecmp (tag, "<ITALIC>")) { | |
| 2596 got_tag = TRUE; | |
| 2597 NEW_BIT (NEW_TEXT_BIT); | |
| 2598 italics++; | |
| 2599 } else if (!g_strcasecmp (tag, "</I>") || !g_strcasecmp (tag, "</ITALIC>")) { | |
| 2600 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2601 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2602 if (italics) { |
| 2603 italics--; | |
| 2604 } | |
| 2605 } else if (!g_strcasecmp (tag, "<U>") || !g_strcasecmp (tag, "<UNDERLINE>")) { | |
| 2606 got_tag = TRUE; | |
| 2607 NEW_BIT (NEW_TEXT_BIT); | |
| 2608 underline++; | |
| 2609 } else if (!g_strcasecmp (tag, "</U>") || !g_strcasecmp (tag, "</UNDERLINE>")) { | |
| 2610 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2611 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2612 if (underline) { |
| 2613 underline--; | |
| 2614 } | |
| 2615 } else if (!g_strcasecmp (tag, "<S>") || !g_strcasecmp (tag, "<STRIKE>")) { | |
| 2616 got_tag = TRUE; | |
| 2617 NEW_BIT (NEW_TEXT_BIT); | |
| 2618 strike++; | |
| 2619 } else if (!g_strcasecmp (tag, "</S>") || !g_strcasecmp (tag, "</STRIKE>")) { | |
| 2620 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2621 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2622 if (strike) { |
| 2623 strike--; | |
| 2624 } | |
| 2625 } else if (!g_strcasecmp (tag, "<SUB>")) { | |
| 2626 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2627 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2628 sub++; |
| 2629 } else if (!g_strcasecmp (tag, "</SUB>")) { | |
| 2630 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2631 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2632 if (sub) { |
| 2633 sub--; | |
| 2634 } | |
| 2635 } else if (!g_strcasecmp (tag, "<SUP>")) { | |
| 2636 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2637 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2638 sup++; |
| 2639 } else if (!g_strcasecmp (tag, "</SUP>")) { | |
| 2640 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2641 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2642 if (sup) { |
| 2643 sup--; | |
| 2644 } | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2645 } else if (!g_strcasecmp (tag, "<PRE>")) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2646 got_tag = TRUE; |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2647 NEW_BIT (NEW_TEXT_BIT); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2648 pre++; |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2649 } else if (!g_strcasecmp (tag, "</PRE>")) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2650 got_tag = TRUE; |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2651 NEW_BIT (NEW_TEXT_BIT); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2652 if (pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2653 pre--; |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
2654 } |
| 1428 | 2655 } else if (!g_strcasecmp (tag, "<TITLE>")) { |
| 2656 if (options & GTK_IMHTML_NO_TITLE) { | |
| 2657 got_tag = TRUE; | |
|
1626
59c7e7831ccd
[gaim-migrate @ 1636]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1613
diff
changeset
|
2658 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2659 title++; |
| 2660 } else { | |
| 2661 intag = FALSE; | |
| 2662 tpos = 0; | |
| 2663 continue; | |
| 2664 } | |
| 2665 } else if (!g_strcasecmp (tag, "</TITLE>")) { | |
| 2666 if (title) { | |
| 2667 got_tag = TRUE; | |
| 2668 wpos = 0; | |
| 2669 ws [wpos] = '\0'; | |
| 2670 title--; | |
| 2671 } else { | |
| 2672 intag = FALSE; | |
| 2673 tpos = 0; | |
| 2674 continue; | |
| 2675 } | |
| 2676 } else if (!g_strcasecmp (tag, "<BR>")) { | |
| 2677 got_tag = TRUE; | |
| 2678 NEW_BIT (NEW_TEXT_BIT); | |
| 2679 NEW_BIT (NEW_BR_BIT); | |
| 2680 } else if (!g_strcasecmp (tag, "<HR>") || | |
| 2681 !g_strncasecmp (tag, "<HR ", strlen ("<HR "))) { | |
| 2682 got_tag = TRUE; | |
| 2683 NEW_BIT (NEW_TEXT_BIT); | |
| 2684 NEW_BIT (NEW_SEP_BIT); | |
| 2685 } else if (!g_strncasecmp (tag, "<FONT ", strlen ("<FONT "))) { | |
| 2686 gchar *t, *e, *a, *value; | |
| 2687 FontDetail *font = NULL; | |
| 2688 GdkColor *clr; | |
| 2689 gint saw; | |
| 2690 gint i; | |
| 2691 | |
| 2692 t = tag + strlen ("<FONT "); | |
| 2693 | |
| 2694 while (*t != '\0') { | |
| 2695 value = NULL; | |
| 2696 saw = 0; | |
| 2697 | |
| 2698 while (g_strncasecmp (t, "COLOR=", strlen ("COLOR=")) | |
| 2699 && g_strncasecmp (t, "BACK=", strlen ("BACK=")) | |
| 2700 && g_strncasecmp (t, "FACE=", strlen ("FACE=")) | |
| 2701 && g_strncasecmp (t, "SIZE=", strlen ("SIZE="))) { | |
| 2702 gboolean quote = FALSE; | |
| 2703 if (*t == '\0') break; | |
| 2704 while (*t && !((*t == ' ') && !quote)) { | |
| 2705 if (*t == '\"') | |
| 2706 quote = ! quote; | |
| 2707 t++; | |
| 2708 } | |
| 2709 while (*t && (*t == ' ')) t++; | |
| 2710 } | |
| 2711 | |
| 2712 if (!g_strncasecmp (t, "COLOR=", strlen ("COLOR="))) { | |
| 2713 t += strlen ("COLOR="); | |
| 2714 saw = 1; | |
| 2715 } else if (!g_strncasecmp (t, "BACK=", strlen ("BACK="))) { | |
| 2716 t += strlen ("BACK="); | |
| 2717 saw = 2; | |
| 2718 } else if (!g_strncasecmp (t, "FACE=", strlen ("FACE="))) { | |
| 2719 t += strlen ("FACE="); | |
| 2720 saw = 3; | |
| 2721 } else if (!g_strncasecmp (t, "SIZE=", strlen ("SIZE="))) { | |
| 2722 t += strlen ("SIZE="); | |
| 2723 saw = 4; | |
| 2724 } | |
| 2725 | |
| 2726 if (!saw) | |
| 2727 continue; | |
| 2728 | |
| 2729 if ((*t == '\"') || (*t == '\'')) { | |
| 2730 e = a = ++t; | |
| 2731 while (*e && (*e != *(t - 1))) e++; | |
| 2732 if (*e != '\0') { | |
| 2733 *e = '\0'; | |
| 2734 t = e + 1; | |
| 2735 value = g_strdup (a); | |
| 2736 } else { | |
| 2737 *t = '\0'; | |
| 2738 } | |
| 2739 } else { | |
| 2740 e = a = t; | |
| 2741 while (*e && !isspace ((gint) *e)) e++; | |
| 2742 if (*e == '\0') e--; | |
| 2743 *e = '\0'; | |
| 2744 t = e + 1; | |
| 2745 value = g_strdup (a); | |
| 2746 } | |
| 2747 | |
| 2748 if (value == NULL) | |
| 2749 continue; | |
| 2750 | |
| 2751 if (font == NULL) | |
| 2752 font = g_new0 (FontDetail, 1); | |
| 2753 | |
| 2754 switch (saw) { | |
| 2755 case 1: | |
| 2756 clr = gtk_imhtml_get_color (value); | |
| 2757 if (clr != NULL) { | |
| 2758 if ( (font->fore == NULL) && | |
| 2759 !(options & GTK_IMHTML_NO_COLOURS)) | |
| 2760 font->fore = clr; | |
| 2761 } | |
| 2762 break; | |
| 2763 case 2: | |
| 2764 clr = gtk_imhtml_get_color (value); | |
| 2765 if (clr != NULL) { | |
| 2766 if ( (font->back == NULL) && | |
| 2767 !(options & GTK_IMHTML_NO_COLOURS)) | |
| 2768 font->back = clr; | |
| 2769 } | |
| 2770 break; | |
| 2771 case 3: | |
| 2772 if ( (font->face == NULL) && | |
| 2773 !(options & GTK_IMHTML_NO_FONTS)) | |
| 2774 font->face = g_strdup (value); | |
| 2775 break; | |
| 2776 case 4: | |
| 2777 if ((font->size != 0) || | |
| 2778 (options & GTK_IMHTML_NO_SIZES)) | |
| 2779 break; | |
| 2780 | |
| 2781 if (isdigit ((gint) value [0])) { | |
| 2782 for (i = 0; i < strlen (value); i++) | |
| 2783 if (!isdigit ((gint) value [i])) | |
| 2784 break; | |
| 2785 if (i != strlen (value)) | |
| 2786 break; | |
| 2787 | |
| 2788 sscanf (value, "%hd", &font->size); | |
| 2789 break; | |
| 2790 } | |
| 2791 | |
| 2792 if ((value [0] == '+') && (value [1] != '\0')) { | |
| 2793 for (i = 1; i < strlen (value); i++) | |
| 2794 if (!isdigit ((gint) value [i])) | |
| 2795 break; | |
| 2796 if (i != strlen (value)) | |
| 2797 break; | |
| 2798 | |
| 2799 sscanf (value + 1, "%hd", &font->size); | |
| 2800 font->size += 3; | |
| 2801 break; | |
| 2802 } | |
| 2803 | |
| 2804 if ((value [0] == '-') && (value [1] != '\0')) { | |
| 2805 for (i = 1; i < strlen (value); i++) | |
| 2806 if (!isdigit ((gint) value [i])) | |
| 2807 break; | |
| 2808 if (i != strlen (value)) | |
| 2809 break; | |
| 2810 | |
| 2811 sscanf (value + 1, "%hd", &font->size); | |
| 2812 font->size = MIN (font->size, 2); | |
| 2813 font->size = 3 - font->size; | |
| 2814 break; | |
| 2815 } | |
| 2816 | |
| 2817 break; | |
| 2818 } | |
| 2819 | |
| 2820 g_free (value); | |
| 2821 } | |
| 2822 | |
|
1738
bcd7f80f0086
[gaim-migrate @ 1748]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1703
diff
changeset
|
2823 if (!font || !(font->size || font->face || font->fore || font->back)) { |
| 1428 | 2824 intag = FALSE; |
| 2825 tpos = 0; | |
| 2826 continue; | |
| 2827 } | |
| 2828 | |
|
1738
bcd7f80f0086
[gaim-migrate @ 1748]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1703
diff
changeset
|
2829 NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2830 |
| 2831 if (fonts) { | |
| 2832 FontDetail *oldfont = fonts->data; | |
| 2833 if (!font->size) | |
| 2834 font->size = oldfont->size; | |
| 2835 if (!font->face) | |
| 2836 font->face = g_strdup (oldfont->face); | |
| 2837 if (!font->fore && oldfont->fore) | |
| 2838 font->fore = gdk_color_copy (oldfont->fore); | |
| 2839 if (!font->back && oldfont->back) | |
| 2840 font->back = gdk_color_copy (oldfont->back); | |
| 2841 } else { | |
| 2842 if (!font->size) | |
| 2843 font->size = 3; | |
| 2844 if (!font->face) | |
|
2140
66a84ff0445a
[gaim-migrate @ 2150]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2116
diff
changeset
|
2845 font->face = g_strdup (DEFAULT_FONT_NAME); |
| 1428 | 2846 } |
| 2847 | |
| 2848 fonts = g_slist_prepend (fonts, font); | |
| 2849 got_tag = TRUE; | |
| 2850 } else if (!g_strcasecmp (tag, "</FONT>")) { | |
| 2851 FontDetail *font; | |
| 2852 | |
| 2853 if (fonts) { | |
| 2854 got_tag = TRUE; | |
| 2855 NEW_BIT (NEW_TEXT_BIT); | |
| 2856 font = fonts->data; | |
| 2857 fonts = g_slist_remove (fonts, font); | |
| 2858 g_free (font->face); | |
| 2859 if (font->fore) | |
| 2860 gdk_color_free (font->fore); | |
| 2861 if (font->back) | |
| 2862 gdk_color_free (font->back); | |
| 2863 g_free (font); | |
| 2864 } else { | |
| 2865 intag = FALSE; | |
| 2866 tpos = 0; | |
| 2867 continue; | |
| 2868 } | |
| 2869 } else if (!g_strncasecmp (tag, "<BODY ", strlen ("<BODY "))) { | |
| 2870 gchar *t, *e, *color = NULL; | |
| 2871 GdkColor *tmp; | |
| 2872 | |
| 2873 got_tag = TRUE; | |
| 2874 | |
| 2875 if (!(options & GTK_IMHTML_NO_COLOURS)) { | |
| 2876 t = tag + strlen ("<BODY"); | |
| 2877 do { | |
| 2878 gboolean quote = FALSE; | |
| 2879 if (*t == '\0') break; | |
| 2880 while (*t && !((*t == ' ') && !quote)) { | |
| 2881 if (*t == '\"') | |
| 2882 quote = ! quote; | |
| 2883 t++; | |
| 2884 } | |
| 2885 while (*t && (*t == ' ')) t++; | |
| 2886 } while (g_strncasecmp (t, "BGCOLOR=", strlen ("BGCOLOR="))); | |
| 2887 | |
| 2888 if (!g_strncasecmp (t, "BGCOLOR=", strlen ("BGCOLOR="))) { | |
| 2889 t += strlen ("BGCOLOR="); | |
| 2890 if ((*t == '\"') || (*t == '\'')) { | |
| 2891 e = ++t; | |
| 2892 while (*e && (*e != *(t - 1))) e++; | |
| 2893 if (*e != '\0') { | |
| 2894 *e = '\0'; | |
| 2895 color = g_strdup (t); | |
| 2896 } | |
| 2897 } else { | |
| 2898 e = t; | |
| 2899 while (*e && !isspace ((gint) *e)) e++; | |
| 2900 if (*e == '\0') e--; | |
| 2901 *e = '\0'; | |
| 2902 color = g_strdup (t); | |
| 2903 } | |
| 2904 | |
| 2905 if (color != NULL) { | |
| 2906 tmp = gtk_imhtml_get_color (color); | |
| 2907 g_free (color); | |
| 2908 if (tmp != NULL) { | |
| 2909 NEW_BIT (NEW_TEXT_BIT); | |
| 2910 bg = tmp; | |
| 2911 UPDATE_BG_COLORS; | |
| 2912 } | |
| 2913 } | |
| 2914 } | |
| 2915 } | |
| 2916 } else if (!g_strncasecmp (tag, "<A ", strlen ("<A "))) { | |
| 2917 gchar *t, *e; | |
| 2918 | |
| 2919 got_tag = TRUE; | |
| 2920 NEW_BIT (NEW_TEXT_BIT); | |
| 2921 | |
| 2922 if (url != NULL) | |
| 2923 g_free (url); | |
| 2924 url = NULL; | |
| 2925 | |
| 2926 t = tag + strlen ("<A"); | |
| 2927 do { | |
| 2928 gboolean quote = FALSE; | |
| 2929 if (*t == '\0') break; | |
| 2930 while (*t && !((*t == ' ') && !quote)) { | |
| 2931 if (*t == '\"') | |
| 2932 quote = ! quote; | |
| 2933 t++; | |
| 2934 } | |
| 2935 while (*t && (*t == ' ')) t++; | |
| 2936 } while (g_strncasecmp (t, "HREF=", strlen ("HREF="))); | |
| 2937 | |
| 2938 if (!g_strncasecmp (t, "HREF=", strlen ("HREF="))) { | |
| 2939 t += strlen ("HREF="); | |
| 2940 if ((*t == '\"') || (*t == '\'')) { | |
| 2941 e = ++t; | |
| 2942 while (*e && (*e != *(t - 1))) e++; | |
| 2943 if (*e != '\0') { | |
| 2944 *e = '\0'; | |
| 2945 url = g_strdup (t); | |
| 2946 } | |
| 2947 } else { | |
| 2948 e = t; | |
| 2949 while (*e && !isspace ((gint) *e)) e++; | |
| 2950 if (*e == '\0') e--; | |
| 2951 *e = '\0'; | |
| 2952 url = g_strdup (t); | |
| 2953 } | |
| 2954 } | |
| 2955 } else if (!g_strcasecmp (tag, "</A>")) { | |
| 2956 if (url != NULL) { | |
|
1524
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2957 got_tag = TRUE; |
| 1428 | 2958 NEW_BIT (NEW_TEXT_BIT); |
| 2959 g_free (url); | |
|
1524
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2960 url = NULL; |
|
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2961 } else { |
|
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2962 intag = FALSE; |
|
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2963 tpos = 0; |
|
a5c87ada5143
[gaim-migrate @ 1534]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1519
diff
changeset
|
2964 continue; |
| 1428 | 2965 } |
| 2966 } else if (!g_strncasecmp (tag, "<IMG ", strlen ("<IMG "))) { | |
| 2967 gchar *t, *e, *src = NULL; | |
| 2968 gchar *copy = g_strdup (tag); | |
| 2969 gchar **xpm; | |
| 2970 GdkColor *clr = NULL; | |
| 2971 GtkIMHtmlBit *bit; | |
| 2972 | |
| 2973 intag = FALSE; | |
| 2974 tpos = 0; | |
| 2975 | |
|
1453
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2976 if (imhtml->img == NULL) { |
|
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2977 ws [wpos] = 0; |
|
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2978 strcat (ws, copy); |
|
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2979 wpos = strlen (ws); |
|
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2980 g_free (copy); |
| 1428 | 2981 continue; |
|
1453
ecf700f23852
[gaim-migrate @ 1463]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1449
diff
changeset
|
2982 } |
| 1428 | 2983 |
| 2984 t = tag + strlen ("<IMG"); | |
| 2985 do { | |
| 2986 gboolean quote = FALSE; | |
| 2987 if (*t == '\0') break; | |
| 2988 while (*t && !((*t == ' ') && !quote)) { | |
| 2989 if (*t == '\"') | |
| 2990 quote = ! quote; | |
| 2991 t++; | |
| 2992 } | |
| 2993 while (*t && (*t == ' ')) t++; | |
| 2994 } while (g_strncasecmp (t, "SRC=", strlen ("SRC="))); | |
| 2995 | |
| 2996 if (!g_strncasecmp (t, "SRC=", strlen ("SRC="))) { | |
| 2997 t += strlen ("SRC="); | |
| 2998 if ((*t == '\"') || (*t == '\'')) { | |
| 2999 e = ++t; | |
| 3000 while (*e && (*e != *(t - 1))) e++; | |
| 3001 if (*e != '\0') { | |
| 3002 *e = '\0'; | |
| 3003 src = g_strdup (t); | |
| 3004 } | |
| 3005 } else { | |
| 3006 e = t; | |
| 3007 while (*e && !isspace ((gint) *e)) e++; | |
| 3008 if (*e == '\0') e--; | |
| 3009 *e = '\0'; | |
| 3010 src = g_strdup (t); | |
| 3011 } | |
| 3012 } | |
| 3013 | |
| 3014 if (src == NULL) { | |
| 3015 ws [wpos] = 0; | |
| 3016 strcat (ws, copy); | |
| 3017 wpos = strlen (ws); | |
| 3018 g_free (copy); | |
| 3019 continue; | |
| 3020 } | |
| 3021 | |
| 3022 xpm = (* imhtml->img) (src); | |
| 3023 if (xpm == NULL) { | |
| 3024 g_free (src); | |
| 3025 ws [wpos] = 0; | |
| 3026 strcat (ws, copy); | |
| 3027 wpos = strlen (ws); | |
| 3028 g_free (copy); | |
| 3029 continue; | |
| 3030 } | |
| 3031 | |
| 3032 g_free (copy); | |
| 3033 | |
| 3034 if (!fonts || ((clr = ((FontDetail *)fonts->data)->back) == NULL)) | |
|
1460
36c56d591674
[gaim-migrate @ 1470]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1456
diff
changeset
|
3035 clr = (bg != NULL) ? bg : imhtml->default_bg_color; |
| 1428 | 3036 |
| 3037 if (!GTK_WIDGET_REALIZED (imhtml)) | |
| 3038 gtk_widget_realize (GTK_WIDGET (imhtml)); | |
| 3039 | |
| 3040 bit = g_new0 (GtkIMHtmlBit, 1); | |
| 3041 bit->type = TYPE_IMG; | |
| 3042 bit->pm = gdk_pixmap_create_from_xpm_d (GTK_WIDGET (imhtml)->window, | |
| 3043 &bit->bm, | |
| 3044 clr, | |
| 3045 xpm); | |
| 3046 if (url) | |
| 3047 bit->url = g_strdup (url); | |
| 3048 | |
| 3049 NEW_BIT (bit); | |
| 3050 | |
| 3051 g_free (src); | |
| 3052 | |
| 3053 continue; | |
| 3054 } else if (!g_strcasecmp (tag, "<P>") || | |
| 3055 !g_strcasecmp (tag, "</P>") || | |
| 3056 !g_strncasecmp (tag, "<P ", strlen ("<P ")) || | |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
3057 !g_strcasecmp (tag, "<H3>") || |
|
1473
38e8391aa563
[gaim-migrate @ 1483]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1472
diff
changeset
|
3058 !g_strncasecmp (tag, "<H3 ", strlen ("<H3 ")) || |
|
1447
5df631739769
[gaim-migrate @ 1457]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1428
diff
changeset
|
3059 !g_strcasecmp (tag, "</H3>") || |
| 1428 | 3060 !g_strcasecmp (tag, "<HTML>") || |
| 3061 !g_strcasecmp (tag, "</HTML>") || | |
| 3062 !g_strcasecmp (tag, "<BODY>") || | |
| 3063 !g_strcasecmp (tag, "</BODY>") || | |
| 3064 !g_strcasecmp (tag, "<FONT>") || | |
| 3065 !g_strcasecmp (tag, "<HEAD>") || | |
| 3066 !g_strcasecmp (tag, "</HEAD>")) { | |
| 3067 intag = FALSE; | |
| 3068 tpos = 0; | |
| 3069 continue; | |
| 3070 } | |
| 3071 | |
| 3072 if (!got_tag) { | |
|
1463
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3073 char *d; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3074 tag [tpos] = 0; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3075 d = tag; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3076 while (*d) { |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3077 if ((smilelen = gtk_imhtml_is_smiley (imhtml, d)) != 0) { |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3078 ws [wpos] = 0; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3079 wpos = 0; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3080 NEW_BIT (NEW_TEXT_BIT); |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3081 g_snprintf (ws, smilelen + 1, "%s", d); |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3082 NEW_BIT (NEW_SMILEY_BIT); |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3083 d += smilelen; |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3084 } else if (*d == '&') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3085 gchar replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3086 gint length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3087 if (is_amp_escape (d, &replace, &length)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3088 ws [wpos++] = replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3089 d += length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3090 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3091 ws [wpos++] = *d++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3092 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3093 } else if (*d == '\n') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3094 if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3095 ws [wpos] = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3096 wpos = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3097 NEW_BIT (NEW_TEXT_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3098 NEW_BIT (NEW_BR_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3099 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3100 d++; |
|
1463
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3101 } else { |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3102 ws [wpos++] = *d++; |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3103 } |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3104 } |
|
2f317467d2f9
[gaim-migrate @ 1473]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1462
diff
changeset
|
3105 tpos = 0; |
| 1428 | 3106 } else { |
| 3107 wpos = 0; | |
| 3108 } | |
| 3109 intag = FALSE; | |
| 3110 tpos = 0; | |
| 3111 } else if (*c == '&' && !intag) { | |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3112 gchar replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3113 gint length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3114 if (is_amp_escape (c, &replace, &length)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3115 ws [wpos++] = replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3116 c += length; |
| 1428 | 3117 } else { |
| 3118 ws [wpos++] = *c++; | |
| 3119 } | |
| 3120 } else if (intag) { | |
| 3121 if (*c == '\"') | |
|
1703
acce65ffdc80
[gaim-migrate @ 1713]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1691
diff
changeset
|
3122 tagquote++; |
| 1428 | 3123 tag [tpos++] = *c++; |
| 3124 } else if (incomment) { | |
| 3125 ws [wpos++] = *c++; | |
| 3126 } else if (((smilelen = gtk_imhtml_is_smiley (imhtml, c)) != 0)) { | |
| 3127 ws [wpos] = 0; | |
| 3128 wpos = 0; | |
| 3129 NEW_BIT (NEW_TEXT_BIT); | |
| 3130 g_snprintf (ws, smilelen + 1, "%s", c); | |
| 3131 NEW_BIT (NEW_SMILEY_BIT); | |
| 3132 c += smilelen; | |
| 3133 } else if (*c == '\n') { | |
| 3134 if (!(options & GTK_IMHTML_NO_NEWLINE)) { | |
| 3135 ws [wpos] = 0; | |
| 3136 wpos = 0; | |
| 3137 NEW_BIT (NEW_TEXT_BIT); | |
| 3138 NEW_BIT (NEW_BR_BIT); | |
| 3139 } | |
| 3140 c++; | |
| 3141 } else { | |
| 3142 ws [wpos++] = *c++; | |
| 3143 } | |
| 3144 } | |
| 3145 | |
| 3146 if (intag) { | |
| 3147 tag [tpos] = 0; | |
| 3148 c = tag; | |
| 3149 while (*c) { | |
| 3150 if ((smilelen = gtk_imhtml_is_smiley (imhtml, c)) != 0) { | |
| 3151 ws [wpos] = 0; | |
| 3152 wpos = 0; | |
| 3153 NEW_BIT (NEW_TEXT_BIT); | |
| 3154 g_snprintf (ws, smilelen + 1, "%s", c); | |
| 3155 NEW_BIT (NEW_SMILEY_BIT); | |
| 3156 c += smilelen; | |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3157 } else if (*c == '&') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3158 gchar replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3159 gint length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3160 if (is_amp_escape (c, &replace, &length)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3161 ws [wpos++] = replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3162 c += length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3163 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3164 ws [wpos++] = *c++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3165 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3166 } else if (*c == '\n') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3167 if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3168 ws [wpos] = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3169 wpos = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3170 NEW_BIT (NEW_TEXT_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3171 NEW_BIT (NEW_BR_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3172 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3173 c++; |
| 1428 | 3174 } else { |
| 3175 ws [wpos++] = *c++; | |
| 3176 } | |
| 3177 } | |
| 3178 } else if (incomment) { | |
| 3179 ws [wpos] = 0; | |
| 3180 wpos = 0; | |
| 3181 strcat (tag, ws); | |
| 3182 ws [wpos] = 0; | |
| 3183 c = tag; | |
| 3184 while (*c) { | |
| 3185 if ((smilelen = gtk_imhtml_is_smiley (imhtml, c)) != 0) { | |
| 3186 ws [wpos] = 0; | |
| 3187 wpos = 0; | |
| 3188 NEW_BIT (NEW_TEXT_BIT); | |
| 3189 g_snprintf (ws, smilelen + 1, "%s", c); | |
| 3190 NEW_BIT (NEW_SMILEY_BIT); | |
| 3191 c += smilelen; | |
|
1472
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3192 } else if (*c == '&') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3193 gchar replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3194 gint length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3195 if (is_amp_escape (c, &replace, &length)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3196 ws [wpos++] = replace; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3197 c += length; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3198 } else { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3199 ws [wpos++] = *c++; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3200 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3201 } else if (*c == '\n') { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3202 if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3203 ws [wpos] = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3204 wpos = 0; |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3205 NEW_BIT (NEW_TEXT_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3206 NEW_BIT (NEW_BR_BIT); |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3207 } |
|
be620a051d6d
[gaim-migrate @ 1482]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1463
diff
changeset
|
3208 c++; |
| 1428 | 3209 } else { |
| 3210 ws [wpos++] = *c++; | |
| 3211 } | |
| 3212 } | |
| 3213 } | |
| 3214 | |
| 3215 ws [wpos] = 0; | |
| 3216 NEW_BIT (NEW_TEXT_BIT); | |
| 3217 | |
| 3218 while (newbits) { | |
| 3219 GtkIMHtmlBit *bit = newbits->data; | |
| 3220 imhtml->bits = g_list_append (imhtml->bits, bit); | |
| 3221 newbits = g_list_remove (newbits, bit); | |
| 3222 gtk_imhtml_draw_bit (imhtml, bit); | |
| 3223 } | |
| 3224 | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3225 GTK_LAYOUT (imhtml)->height = imhtml->y; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3226 GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3227 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
|
3228 |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3229 gtk_widget_set_usize (GTK_WIDGET (imhtml), -1, imhtml->y); |
| 1428 | 3230 |
| 3231 if (!(options & GTK_IMHTML_NO_SCROLL) && | |
| 3232 scrolldown && | |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3233 (imhtml->y >= MAX (1, |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3234 (GTK_WIDGET (imhtml)->allocation.height - |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3235 (GTK_WIDGET (imhtml)->style->klass->ythickness + BORDER_SIZE) * 2)))) |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3236 gtk_adjustment_set_value (vadj, imhtml->y - |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3237 MAX (1, (GTK_WIDGET (imhtml)->allocation.height - |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3238 (GTK_WIDGET (imhtml)->style->klass->ythickness + |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3239 BORDER_SIZE) * 2))); |
| 1428 | 3240 |
| 3241 if (url) { | |
| 3242 g_free (url); | |
| 3243 if (retval) | |
| 3244 retval = g_string_append (retval, "</A>"); | |
| 3245 } | |
| 3246 if (bg) | |
| 3247 gdk_color_free (bg); | |
| 3248 while (fonts) { | |
| 3249 FontDetail *font = fonts->data; | |
| 3250 fonts = g_slist_remove (fonts, font); | |
| 3251 g_free (font->face); | |
| 3252 if (font->fore) | |
| 3253 gdk_color_free (font->fore); | |
| 3254 if (font->back) | |
| 3255 gdk_color_free (font->back); | |
| 3256 g_free (font); | |
| 3257 if (retval) | |
| 3258 retval = g_string_append (retval, "</FONT>"); | |
| 3259 } | |
| 3260 if (retval) { | |
| 3261 while (bold) { | |
| 3262 retval = g_string_append (retval, "</B>"); | |
| 3263 bold--; | |
| 3264 } | |
| 3265 while (italics) { | |
| 3266 retval = g_string_append (retval, "</I>"); | |
| 3267 italics--; | |
| 3268 } | |
| 3269 while (underline) { | |
| 3270 retval = g_string_append (retval, "</U>"); | |
| 3271 underline--; | |
| 3272 } | |
| 3273 while (strike) { | |
| 3274 retval = g_string_append (retval, "</S>"); | |
| 3275 strike--; | |
| 3276 } | |
| 3277 while (sub) { | |
| 3278 retval = g_string_append (retval, "</SUB>"); | |
| 3279 sub--; | |
| 3280 } | |
| 3281 while (sup) { | |
| 3282 retval = g_string_append (retval, "</SUP>"); | |
| 3283 sup--; | |
| 3284 } | |
| 3285 while (title) { | |
| 3286 retval = g_string_append (retval, "</TITLE>"); | |
| 3287 title--; | |
| 3288 } | |
|
1691
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
3289 while (pre) { |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
3290 retval = g_string_append (retval, "</PRE>"); |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
3291 pre--; |
|
d802b115800f
[gaim-migrate @ 1701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1647
diff
changeset
|
3292 } |
| 1428 | 3293 } |
| 3294 g_free (ws); | |
| 3295 g_free (tag); | |
| 3296 | |
| 3297 return retval; | |
| 3298 } | |
|
1780
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3299 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3300 void |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3301 gtk_imhtml_clear (GtkIMHtml *imhtml) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3302 { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3303 g_return_if_fail (imhtml != NULL); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3304 g_return_if_fail (GTK_IS_IMHTML (imhtml)); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3305 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3306 while (imhtml->bits) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3307 GtkIMHtmlBit *bit = imhtml->bits->data; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3308 imhtml->bits = g_list_remove (imhtml->bits, bit); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3309 if (bit->text) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3310 g_free (bit->text); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3311 if (bit->font) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3312 gdk_font_unref (bit->font); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3313 if (bit->fore) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3314 gdk_color_free (bit->fore); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3315 if (bit->back) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3316 gdk_color_free (bit->back); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3317 if (bit->bg) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3318 gdk_color_free (bit->bg); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3319 if (bit->url) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3320 g_free (bit->url); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3321 if (bit->pm) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3322 gdk_pixmap_unref (bit->pm); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3323 if (bit->bm) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3324 gdk_bitmap_unref (bit->bm); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3325 while (bit->chunks) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3326 struct line_info *li = bit->chunks->data; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3327 if (li->text) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3328 g_free (li->text); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3329 bit->chunks = g_list_remove (bit->chunks, li); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3330 g_free (li); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3331 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3332 g_free (bit); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3333 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3334 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3335 while (imhtml->urls) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3336 g_free (imhtml->urls->data); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3337 imhtml->urls = g_list_remove (imhtml->urls, imhtml->urls->data); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3338 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3339 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3340 if (imhtml->selected_text) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3341 g_string_free (imhtml->selected_text, TRUE); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3342 imhtml->selected_text = g_string_new (""); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3343 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3344 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3345 if (imhtml->tip_timer) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3346 gtk_timeout_remove (imhtml->tip_timer); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3347 imhtml->tip_timer = 0; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3348 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3349 if (imhtml->tip_window) { |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3350 gtk_widget_destroy (imhtml->tip_window); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3351 imhtml->tip_window = NULL; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3352 } |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3353 imhtml->tip_bit = NULL; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3354 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3355 gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3356 |
|
1998
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3357 imhtml->x = 0; |
|
00dc6b2df5b6
[gaim-migrate @ 2008]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1997
diff
changeset
|
3358 imhtml->y = TOP_BORDER; |
|
1780
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3359 imhtml->llheight = 0; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3360 imhtml->llascent = 0; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3361 imhtml->line = NULL; |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3362 |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3363 if (GTK_WIDGET_REALIZED (GTK_WIDGET (imhtml))) |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3364 gdk_window_clear (GTK_LAYOUT (imhtml)->bin_window); |
|
d7cbedd1d651
[gaim-migrate @ 1790]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1738
diff
changeset
|
3365 } |
