Sat, 22 Sep 2001 10:36:29 +0000
[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).
| 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
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
23 | #include <X11/Xlib.h> |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
50 | #define MAX_FONTS 32767 |
| 1428 | 51 | |
| 52 | gint font_sizes [] = { 80, 100, 120, 140, 200, 300, 400 }; | |
| 53 | ||
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
54 | #define BORDER_SIZE 2 |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
55 | #define TOP_BORDER 10 |
| 1428 | 56 | #define MIN_HEIGHT 20 |
| 57 | #define HR_HEIGHT 2 | |
|
1574
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
58 | #define TOOLTIP_TIMEOUT 500 |
| 1428 | 59 | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
60 | #define DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a))) |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
61 | #define COLOR_MOD 0x8000 |
|
1647
ab281d390ee6
[gaim-migrate @ 1657]
Decklin Foster <decklin@red-bean.com>
parents:
1626
diff
changeset
|
62 | #define COLOR_DIFF 0x800 |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
71 | #define DRAW_IMG(x) (((x)->type == TYPE_IMG) || (imhtml->smileys && ((x)->type == TYPE_SMILEY))) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
169 | struct line_info *li = bit->chunks->data; |
| 1428 | 170 | if (li->text) |
| 171 | g_free (li->text); | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
186 | if (imhtml->tip_timer) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
187 | gtk_timeout_remove (imhtml->tip_timer); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
188 | imhtml->tip_timer = 0; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
189 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
190 | if (imhtml->tip_window) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
191 | gtk_widget_destroy (imhtml->tip_window); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
192 | imhtml->tip_window = NULL; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
193 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
194 | imhtml->tip_bit = NULL; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
195 | |
| 1428 | 196 | gdk_font_unref (imhtml->default_font); |
| 197 | gdk_color_free (imhtml->default_fg_color); | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
204 | if (imhtml->smiley_start) |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
215 | GdkWindowAttr attributes; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
222 | GTK_WIDGET_SET_FLAGS (imhtml, GTK_REALIZED); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
223 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
224 | attributes.window_type = GDK_WINDOW_CHILD; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
225 | attributes.x = widget->allocation.x; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
226 | attributes.y = widget->allocation.y; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
227 | attributes.width = widget->allocation.width; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
228 | attributes.height = widget->allocation.height; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
229 | attributes.wclass = GDK_INPUT_OUTPUT; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
230 | attributes.visual = gtk_widget_get_visual (widget); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
231 | attributes.colormap = gtk_widget_get_colormap (widget); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
232 | attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
233 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
234 | attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
235 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
236 | widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
237 | &attributes, attributes_mask); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
238 | gdk_window_set_user_data (widget->window, widget); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
239 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
240 | attributes.x = widget->style->klass->xthickness + BORDER_SIZE; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
241 | attributes.y = widget->style->klass->xthickness + BORDER_SIZE; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
242 | attributes.width = MAX (1, (gint) widget->allocation.width - (gint) attributes.x * 2); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
243 | attributes.height = MAX (1, (gint) widget->allocation.height - (gint) attributes.y * 2); |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
244 | attributes.event_mask = gtk_widget_get_events (widget) |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
245 | | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
246 | | GDK_POINTER_MOTION_MASK | GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
247 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
248 | GTK_LAYOUT (imhtml)->bin_window = gdk_window_new (widget->window, |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
249 | &attributes, attributes_mask); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
256 | gdk_window_set_background (widget->window, &widget->style->base [GTK_STATE_NORMAL]); |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
257 | gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
258 | &widget->style->base [GTK_STATE_NORMAL]); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
259 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
260 | gdk_window_show (GTK_LAYOUT (imhtml)->bin_window); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
261 | } |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
262 | |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
263 | static gboolean |
| 1476 | 264 | similar_colors (GdkColor *bg, |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
265 | GdkColor *fg) |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
266 | { |
| 1476 | 267 | if ((DIFF (bg->red, fg->red) < COLOR_DIFF) && |
| 268 | (DIFF (bg->green, fg->green) < COLOR_DIFF) && | |
| 269 | (DIFF (bg->blue, fg->blue) < COLOR_DIFF)) { | |
| 270 | fg->red = (0xff00 - COLOR_MOD > bg->red) ? | |
| 271 | bg->red + COLOR_MOD : bg->red - COLOR_MOD; | |
| 272 | fg->green = (0xff00 - COLOR_MOD > bg->green) ? | |
| 273 | bg->green + COLOR_MOD : bg->green - COLOR_MOD; | |
| 274 | fg->blue = (0xff00 - COLOR_MOD > bg->blue) ? | |
| 275 | bg->blue + COLOR_MOD : bg->blue - COLOR_MOD; | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
276 | return TRUE; |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
277 | } |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
278 | return FALSE; |
| 1428 | 279 | } |
| 280 | ||
| 281 | static void | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
282 | draw_text (GtkIMHtml *imhtml, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
283 | struct line_info *line) |
| 1428 | 284 | { |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
285 | GtkIMHtmlBit *bit; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
286 | GdkGC *gc; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
287 | GdkColormap *cmap; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
288 | GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
289 | gfloat xoff, yoff; |
| 1476 | 290 | GdkColor *bg, *fg; |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
291 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
292 | if (GTK_LAYOUT (imhtml)->freeze_count) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
293 | return; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
294 | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
295 | bit = line->bit; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
296 | gc = gdk_gc_new (window); |
| 1476 | 297 | cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
298 | xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
299 | yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
300 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
301 | if (bit->bg != NULL) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
302 | gdk_color_alloc (cmap, bit->bg); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
303 | gdk_gc_set_foreground (gc, bit->bg); |
| 1476 | 304 | bg = bit->bg; |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
305 | } else { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
306 | gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
307 | gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
| 1476 | 308 | bg = imhtml->default_bg_color; |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
309 | } |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
310 | |
|
2338
10a2ee3b06e3
[gaim-migrate @ 2351]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2337
diff
changeset
|
311 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, |
|
10a2ee3b06e3
[gaim-migrate @ 2351]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2337
diff
changeset
|
312 | line->width ? line->width : imhtml->xsize, line->height); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
313 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
314 | if (!line->text) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
315 | gdk_gc_unref (gc); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
316 | return; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
317 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
318 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
319 | if (bit->back != NULL) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
320 | gdk_color_alloc (cmap, bit->back); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
321 | gdk_gc_set_foreground (gc, bit->back); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
322 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
323 | gdk_string_width (bit->font, line->text), line->height); |
| 1476 | 324 | bg = bit->back; |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
325 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
326 | |
| 1476 | 327 | bg = gdk_color_copy (bg); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
328 | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
329 | if (line->selected) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
330 | gint width, x; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
331 | gchar *start, *end; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
332 | GdkColor col; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
333 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
334 | if ((line->sel_start > line->sel_end) && (line->sel_end != NULL)) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
335 | start = line->sel_end; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
336 | end = line->sel_start; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
337 | } else { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
338 | start = line->sel_start; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
339 | end = line->sel_end; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
340 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
341 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
342 | if (start == NULL) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
343 | x = 0; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
344 | else |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
345 | x = gdk_text_width (bit->font, line->text, start - line->text); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
346 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
347 | if (end == NULL) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
348 | width = gdk_string_width (bit->font, line->text) - x; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
349 | else |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
350 | width = gdk_text_width (bit->font, line->text, end - line->text) - x; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
351 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
352 | col.red = col.green = col.blue = 0xc000; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
353 | gdk_color_alloc (cmap, &col); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
354 | gdk_gc_set_foreground (gc, &col); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
355 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
356 | gdk_draw_rectangle (window, gc, TRUE, x + line->x - xoff, line->y - yoff, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
357 | width, line->height); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
358 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
359 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
360 | if (bit->url) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
361 | GdkColor *tc = gtk_imhtml_get_color ("#0000a0"); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
362 | gdk_color_alloc (cmap, tc); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
363 | gdk_gc_set_foreground (gc, tc); |
| 1476 | 364 | fg = gdk_color_copy (tc); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
365 | gdk_color_free (tc); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
366 | } else if (bit->fore) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
367 | gdk_color_alloc (cmap, bit->fore); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
368 | gdk_gc_set_foreground (gc, bit->fore); |
| 1476 | 369 | fg = gdk_color_copy (bit->fore); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
370 | } else { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
371 | gdk_color_alloc (cmap, imhtml->default_fg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
372 | gdk_gc_set_foreground (gc, imhtml->default_fg_color); |
| 1476 | 373 | fg = gdk_color_copy (imhtml->default_fg_color); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
374 | } |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
375 | |
| 1476 | 376 | if (similar_colors (bg, fg)) { |
| 377 | gdk_color_alloc (cmap, fg); | |
| 378 | gdk_gc_set_foreground (gc, fg); | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
379 | } |
| 1476 | 380 | gdk_color_free (bg); |
| 381 | gdk_color_free (fg); | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
382 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
383 | gdk_draw_string (window, bit->font, gc, line->x - xoff, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
384 | line->y - yoff + line->ascent, line->text); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
385 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
386 | if (bit->underline || bit->url) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
387 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff + line->ascent + 1, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
388 | gdk_string_width (bit->font, line->text), 1); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
389 | if (bit->strike) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
390 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, |
| 1476 | 391 | line->y - yoff + line->ascent - (bit->font->ascent / 2), |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
392 | gdk_string_width (bit->font, line->text), 1); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
393 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
394 | gdk_gc_unref (gc); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
395 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
396 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
397 | static void |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
398 | draw_img (GtkIMHtml *imhtml, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
399 | struct line_info *line) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
400 | { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
401 | GtkIMHtmlBit *bit; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
402 | GdkGC *gc; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
403 | GdkColormap *cmap; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
404 | gint width, height, hoff; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
405 | GdkWindow *window = GTK_LAYOUT (imhtml)->bin_window; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
406 | gfloat xoff, yoff; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
407 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
408 | if (GTK_LAYOUT (imhtml)->freeze_count) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
409 | return; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
410 | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
411 | bit = line->bit; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
412 | gdk_window_get_size (bit->pm, &width, &height); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
413 | hoff = (line->height - height) / 2; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
414 | xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
415 | yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
416 | gc = gdk_gc_new (window); |
| 1476 | 417 | cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
418 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
419 | if (bit->bg != NULL) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
420 | gdk_color_alloc (cmap, bit->bg); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
421 | gdk_gc_set_foreground (gc, bit->bg); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
422 | } else { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
423 | gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
424 | gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
425 | } |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
426 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
427 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, line->width, line->height); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
428 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
429 | if (bit->back != NULL) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
430 | gdk_color_alloc (cmap, bit->back); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
431 | gdk_gc_set_foreground (gc, bit->back); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
432 | gdk_draw_rectangle (window, gc, TRUE, line->x - xoff, line->y - yoff, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
433 | width, line->height); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
434 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
435 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
436 | gdk_draw_pixmap (window, gc, bit->pm, 0, 0, line->x - xoff, line->y - yoff + hoff, -1, -1); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
437 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
438 | gdk_gc_unref (gc); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
439 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
440 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
441 | static void |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
442 | draw_line (GtkIMHtml *imhtml, |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
443 | struct line_info *line) |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
444 | { |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
445 | GtkIMHtmlBit *bit; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
446 | GdkDrawable *drawable; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
447 | GdkColormap *cmap; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
448 | GdkGC *gc; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
449 | guint line_height; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
450 | gfloat xoff, yoff; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
451 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
452 | if (GTK_LAYOUT (imhtml)->freeze_count) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
453 | return; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
454 | |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
455 | xoff = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
456 | yoff = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
457 | bit = line->bit; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
458 | drawable = GTK_LAYOUT (imhtml)->bin_window; |
| 1476 | 459 | cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
460 | gc = gdk_gc_new (drawable); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
461 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
462 | if (bit->bg != NULL) { |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
463 | gdk_color_alloc (cmap, bit->bg); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
464 | gdk_gc_set_foreground (gc, bit->bg); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
465 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
466 | gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff, |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
467 | line->width, line->height); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
468 | } |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
469 | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
470 | gdk_color_alloc (cmap, imhtml->default_fg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
471 | gdk_gc_set_foreground (gc, imhtml->default_fg_color); |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
472 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
473 | line_height = line->height / 2; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
474 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
475 | gdk_draw_rectangle (drawable, gc, TRUE, line->x - xoff, line->y - yoff + line_height / 2, |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
476 | line->width, line_height); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
477 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
478 | gdk_gc_unref (gc); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
479 | } |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
480 | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
481 | static void |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
482 | gtk_imhtml_draw_focus (GtkWidget *widget) |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
483 | { |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
484 | GtkIMHtml *imhtml; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
485 | gint x = 0, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
486 | y = 0, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
487 | w = 0, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
488 | h = 0; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
489 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
490 | imhtml = GTK_IMHTML (widget); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
491 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
492 | if (!GTK_WIDGET_DRAWABLE (widget)) |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
493 | return; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
494 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
495 | if (GTK_WIDGET_HAS_FOCUS (widget)) { |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
496 | gtk_paint_focus (widget->style, widget->window, NULL, widget, "text", 0, 0, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
497 | widget->allocation.width - 1, widget->allocation.height - 1); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
498 | x = 1; y = 1; w = 2; h = 2; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
499 | } |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
500 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
501 | gtk_paint_shadow (widget->style, widget->window, GTK_STATE_NORMAL, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
502 | GTK_SHADOW_IN, NULL, widget, "text", x, y, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
503 | widget->allocation.width - w, widget->allocation.height - h); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
504 | } |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
505 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
506 | static void |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
507 | gtk_imhtml_draw_exposed (GtkIMHtml *imhtml) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
508 | { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
509 | GList *bits; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
510 | GtkIMHtmlBit *bit; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
511 | GList *chunks; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
512 | struct line_info *line; |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
513 | gfloat x, y; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2022
diff
changeset
|
514 | gint width, height; |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
515 | |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
516 | x = GTK_LAYOUT (imhtml)->hadjustment->value; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
517 | y = GTK_LAYOUT (imhtml)->vadjustment->value; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
518 | gdk_window_get_size (GTK_LAYOUT (imhtml)->bin_window, &width, &height); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
519 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
520 | bits = imhtml->bits; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
521 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
522 | while (bits) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
523 | bit = bits->data; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
524 | chunks = bit->chunks; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
525 | if (DRAW_IMG (bit)) { |
|
1461
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
526 | if (chunks) { |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
527 | line = chunks->data; |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
528 | if ((line->x <= x + width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
529 | (line->y <= y + height) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
530 | (x <= line->x + line->width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
531 | (y <= line->y + line->height)) |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
532 | draw_img (imhtml, line); |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
533 | } |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
534 | } else if (bit->type == TYPE_SEP) { |
|
1461
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
535 | if (chunks) { |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
536 | line = chunks->data; |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
537 | if ((line->x <= x + width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
538 | (line->y <= y + height) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
539 | (x <= line->x + line->width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
540 | (y <= line->y + line->height)) |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
541 | draw_line (imhtml, line); |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
542 | |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
543 | line = chunks->next->data; |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
544 | if ((line->x <= x + width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
545 | (line->y <= y + height) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
546 | (x <= line->x + line->width) && |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
547 | (y <= line->y + line->height)) |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
548 | draw_text (imhtml, line); |
|
c117868c525e
[gaim-migrate @ 1471]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1460
diff
changeset
|
549 | } |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
550 | } else { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
551 | while (chunks) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
552 | line = chunks->data; |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
553 | if ((line->x <= x + width) && |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
554 | (line->y <= y + height) && |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
555 | (x <= line->x + line->width) && |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
556 | (y <= line->y + line->height)) |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
557 | draw_text (imhtml, line); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
558 | chunks = g_list_next (chunks); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
559 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
560 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
561 | bits = g_list_next (bits); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
562 | } |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
563 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
571 | GtkIMHtml *imhtml; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
572 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
573 | imhtml = GTK_IMHTML (widget); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
585 | |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
586 | if (GTK_WIDGET_CLASS (parent_class)->style_set) |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
587 | (* GTK_WIDGET_CLASS (parent_class)->style_set) (widget, style); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
588 | |
| 1428 | 589 | if (!GTK_WIDGET_REALIZED (widget)) |
| 590 | return; | |
| 591 | ||
| 592 | imhtml = GTK_IMHTML (widget); | |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
593 | gtk_imhtml_draw_exposed (imhtml); |
| 1428 | 594 | } |
| 595 | ||
| 596 | static gint | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
597 | gtk_imhtml_expose_event (GtkWidget *widget, |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
598 | GdkEventExpose *event) |
| 1428 | 599 | { |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
600 | GtkIMHtml *imhtml; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
601 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
602 | g_return_val_if_fail (widget != NULL, FALSE); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
603 | g_return_val_if_fail (GTK_IS_IMHTML (widget), FALSE); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
604 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
605 | imhtml = GTK_IMHTML (widget); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
606 | gtk_imhtml_draw_exposed (imhtml); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
607 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
618 | gint oldy; |
| 1428 | 619 | |
| 620 | vadj = GTK_LAYOUT (imhtml)->vadjustment; | |
| 621 | oldvalue = vadj->value / vadj->upper; | |
|
1527
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
622 | oldy = imhtml->y; |
| 1428 | 623 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
634 | imhtml->x = 0; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
635 | imhtml->y = TOP_BORDER; |
| 1428 | 636 | imhtml->llheight = 0; |
| 637 | imhtml->llascent = 0; | |
| 638 | ||
|
2002
bb9b3b76edd7
[gaim-migrate @ 2012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1998
diff
changeset
|
639 | if (GTK_LAYOUT (imhtml)->yoffset < TOP_BORDER) |
|
bb9b3b76edd7
[gaim-migrate @ 2012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1998
diff
changeset
|
640 | gdk_window_clear_area (GTK_LAYOUT (imhtml)->bin_window, 0, 0, |
|
bb9b3b76edd7
[gaim-migrate @ 2012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1998
diff
changeset
|
641 | imhtml->xsize, TOP_BORDER - GTK_LAYOUT (imhtml)->yoffset); |
|
bb9b3b76edd7
[gaim-migrate @ 2012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1998
diff
changeset
|
642 | |
| 1428 | 643 | b = imhtml->bits; |
| 644 | while (b) { | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
645 | bit = b->data; |
| 1428 | 646 | b = g_list_next (b); |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
647 | while (bit->chunks) { |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
648 | struct line_info *li = bit->chunks->data; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
649 | if (li->text) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
650 | g_free (li->text); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
651 | bit->chunks = g_list_remove (bit->chunks, li); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
652 | g_free (li); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
653 | } |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
654 | gtk_imhtml_draw_bit (imhtml, bit); |
| 1428 | 655 | } |
| 656 | ||
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
657 | GTK_LAYOUT (imhtml)->height = imhtml->y; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
658 | GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
659 | gtk_signal_emit_by_name (GTK_OBJECT (GTK_LAYOUT (imhtml)->vadjustment), "changed"); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
660 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
663 | |
|
1527
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
664 | if (GTK_LAYOUT (imhtml)->bin_window && (imhtml->y < oldy)) { |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
665 | GdkGC *gc; |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
666 | GdkColormap *cmap; |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
667 | |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
668 | gc = gdk_gc_new (GTK_LAYOUT (imhtml)->bin_window); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
669 | cmap = gtk_widget_get_colormap (GTK_WIDGET (imhtml)); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
670 | |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
671 | gdk_color_alloc (cmap, imhtml->default_bg_color); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
672 | gdk_gc_set_foreground (gc, imhtml->default_bg_color); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
673 | |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
674 | gdk_draw_rectangle (GTK_LAYOUT (imhtml)->bin_window, gc, TRUE, |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
675 | 0, imhtml->y - GTK_LAYOUT (imhtml)->vadjustment->value, |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
676 | GTK_WIDGET (imhtml)->allocation.width, |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
677 | oldy - imhtml->y); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
678 | |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
679 | gdk_gc_unref (gc); |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
680 | } |
|
bb0dea36d01a
[gaim-migrate @ 1537]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1524
diff
changeset
|
681 | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
682 | gtk_layout_thaw (GTK_LAYOUT (imhtml)); |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
691 | GtkLayout *layout; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
699 | layout = GTK_LAYOUT (widget); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
700 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
701 | widget->allocation = *allocation; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
702 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
703 | new_xsize = MAX (1, (gint) allocation->width - |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
704 | (gint) (widget->style->klass->xthickness + BORDER_SIZE) * 2); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
705 | new_ysize = MAX (1, (gint) allocation->height - |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
706 | (gint) (widget->style->klass->ythickness + BORDER_SIZE) * 2); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
707 | |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
708 | if (GTK_WIDGET_REALIZED (widget)) { |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
709 | gint x = widget->style->klass->xthickness + BORDER_SIZE; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
710 | gint y = widget->style->klass->ythickness + BORDER_SIZE; |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
711 | gdk_window_move_resize (widget->window, |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
712 | allocation->x, allocation->y, |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
713 | allocation->width, allocation->height); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
714 | gdk_window_move_resize (layout->bin_window, |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
715 | x, y, new_xsize, new_ysize); |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
716 | } |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
717 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
718 | layout->hadjustment->page_size = new_xsize; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
719 | layout->hadjustment->page_increment = new_xsize / 2; |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
720 | layout->hadjustment->lower = 0; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
721 | layout->hadjustment->upper = imhtml->x; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
722 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
723 | layout->vadjustment->page_size = new_ysize; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
724 | layout->vadjustment->page_increment = new_ysize / 2; |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
725 | layout->vadjustment->lower = 0; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
726 | layout->vadjustment->upper = imhtml->y; |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
727 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
728 | gtk_signal_emit_by_name (GTK_OBJECT (layout->hadjustment), "changed"); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
729 | gtk_signal_emit_by_name (GTK_OBJECT (layout->vadjustment), "changed"); |
| 1428 | 730 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
731 | if (new_xsize == imhtml->xsize) { |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
732 | if ((GTK_LAYOUT (imhtml)->vadjustment->value > imhtml->y - new_ysize)) { |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
733 | if (imhtml->y > new_ysize) |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
734 | gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment, |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
735 | imhtml->y - new_ysize); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
736 | else |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
737 | gtk_adjustment_set_value (GTK_LAYOUT (imhtml)->vadjustment, 0); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
738 | } |
| 1428 | 739 | return; |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
740 | } |
| 1428 | 741 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
742 | imhtml->xsize = new_xsize; |
| 1428 | 743 | |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
744 | if (GTK_WIDGET_REALIZED (widget)) |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
764 | chunk = chunks->data; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
765 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
766 | if (chunk->selected) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
767 | chunk->selected = FALSE; |
|
1449
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1447
diff
changeset
|
768 | chunk->sel_start = chunk->text; |
|
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1447
diff
changeset
|
769 | chunk->sel_end = NULL; |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
770 | if (DRAW_IMG (bit)) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
771 | draw_img (imhtml, chunk); |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
772 | else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk)) |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
773 | draw_line (imhtml, chunk); |
|
2348
cad14aeccac5
[gaim-migrate @ 2361]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2338
diff
changeset
|
774 | else if (chunk->width) |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
775 | draw_text (imhtml, chunk); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
776 | } |
| 1428 | 777 | |
| 778 | chunks = g_list_next (chunks); | |
| 779 | } | |
| 780 | ||
| 781 | bits = g_list_next (bits); | |
| 782 | } | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 | 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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
989 | imhtml->sel_endchunk = chunk; |
| 1428 | 990 | got_end = TRUE; |
| 991 | } else { | |
| 992 | if ( !chunk->selected || | |
|
1449
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1447
diff
changeset
|
993 | (chunk->sel_end != NULL) || |
|
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1016 | if (DRAW_IMG (bit)) |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1017 | draw_img (imhtml, chunk); |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
1018 | else if ((bit->type == TYPE_SEP) && (bit->chunks->data == chunk)) |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
1019 | draw_line (imhtml, chunk); |
|
2348
cad14aeccac5
[gaim-migrate @ 2361]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2338
diff
changeset
|
1020 | else if (chunk->width) |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1032 | static void |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1033 | gtk_imhtml_select_in_chunk (GtkIMHtml *imhtml, |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1034 | struct line_info *chunk) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1035 | { |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1036 | GtkIMHtmlBit *bit = chunk->bit; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1037 | gchar *new_pos; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1038 | guint endx = imhtml->sel_endx; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1039 | guint startx = imhtml->sel_startx; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1040 | guint starty = imhtml->sel_starty; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1041 | gboolean smileys = imhtml->smileys; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1042 | gboolean redraw = FALSE; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1043 | |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1044 | new_pos = get_position (chunk, endx, smileys); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1045 | if ((starty < chunk->y) || |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1046 | ((starty < chunk->y + chunk->height) && (startx < endx))) { |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1047 | if (chunk->sel_end != new_pos) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1048 | redraw = TRUE; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1049 | chunk->sel_end = new_pos; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1050 | } else { |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1051 | if (chunk->sel_start != new_pos) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1052 | redraw = TRUE; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1053 | chunk->sel_start = new_pos; |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1054 | } |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1055 | |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1056 | if (redraw) { |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1057 | if (DRAW_IMG (bit)) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1058 | draw_img (imhtml, chunk); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1059 | else if ((bit->type == TYPE_SEP) && |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1060 | (bit->chunks->data == chunk)) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1061 | draw_line (imhtml, chunk); |
|
2348
cad14aeccac5
[gaim-migrate @ 2361]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2338
diff
changeset
|
1062 | else if (chunk->width) |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1063 | draw_text (imhtml, chunk); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1064 | } |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1065 | } |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 | 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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1091 | gtk_imhtml_tip_paint (GtkIMHtml *imhtml) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1092 | { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1093 | GtkStyle *style; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1094 | gint y, baseline_skip, gap; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1095 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1096 | style = imhtml->tip_window->style; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1097 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1098 | gap = (style->font->ascent + style->font->descent) / 4; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1099 | if (gap < 2) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1100 | gap = 2; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1101 | baseline_skip = style->font->ascent + style->font->descent + gap; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1102 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1103 | if (!imhtml->tip_bit) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1104 | return FALSE; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1105 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1106 | gtk_paint_flat_box (style, imhtml->tip_window->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, |
|
1574
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1107 | NULL, imhtml->tip_window, "tooltip", 0, 0, -1, -1); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1108 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1109 | y = style->font->ascent + 4; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1110 | gtk_paint_string (style, imhtml->tip_window->window, GTK_STATE_NORMAL, NULL, |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1111 | imhtml->tip_window, "tooltip", 4, y, imhtml->tip_bit->url); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1112 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1113 | return FALSE; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1114 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1115 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1116 | static gint |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1117 | gtk_imhtml_tip (gpointer data) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1118 | { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1119 | GtkIMHtml *imhtml = data; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1120 | GtkWidget *widget = GTK_WIDGET (imhtml); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1121 | GtkStyle *style; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1122 | gint gap, x, y, w, h, scr_w, scr_h, baseline_skip; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1123 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1124 | if (!imhtml->tip_bit || !GTK_WIDGET_DRAWABLE (widget)) { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1125 | imhtml->tip_timer = 0; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1126 | return FALSE; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1127 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1128 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1129 | if (imhtml->tip_window) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1130 | gtk_widget_destroy (imhtml->tip_window); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1131 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1132 | imhtml->tip_window = gtk_window_new (GTK_WINDOW_POPUP); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1133 | gtk_widget_set_app_paintable (imhtml->tip_window, TRUE); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1134 | gtk_window_set_policy (GTK_WINDOW (imhtml->tip_window), FALSE, FALSE, TRUE); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1135 | gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips"); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1136 | gtk_signal_connect_object (GTK_OBJECT (imhtml->tip_window), "expose_event", |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1137 | GTK_SIGNAL_FUNC (gtk_imhtml_tip_paint), GTK_OBJECT (imhtml)); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1138 | gtk_signal_connect_object (GTK_OBJECT (imhtml->tip_window), "draw", |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1139 | GTK_SIGNAL_FUNC (gtk_imhtml_tip_paint), GTK_OBJECT (imhtml)); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1140 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1141 | gtk_widget_ensure_style (imhtml->tip_window); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1142 | style = imhtml->tip_window->style; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1143 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1144 | scr_w = gdk_screen_width (); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1145 | scr_h = gdk_screen_height (); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1146 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1147 | gap = (style->font->ascent + style->font->descent) / 4; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1148 | if (gap < 2) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1149 | gap = 2; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1150 | baseline_skip = style->font->ascent + style->font->descent + gap; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1151 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1152 | w = 8 + gdk_string_width (style->font, imhtml->tip_bit->url); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1153 | h = 8 - gap + baseline_skip; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1154 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1155 | gdk_window_get_pointer (NULL, &x, &y, NULL); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1156 | if (GTK_WIDGET_NO_WINDOW (widget)) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1157 | y += widget->allocation.y; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1158 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1159 | x -= ((w >> 1) + 4); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1160 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1161 | if ((x + w) > scr_w) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1162 | x -= (x + w) - scr_w; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1163 | else if (x < 0) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1164 | x = 0; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1165 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1166 | if ((y + h + + 4) > scr_h) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1173 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1174 | gtk_widget_set_usize (imhtml->tip_window, w, h); |
|
1955
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1175 | gtk_widget_set_uposition (imhtml->tip_window, x, y); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1176 | gtk_widget_show (imhtml->tip_window); |
|
1574
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1177 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1178 | imhtml->tip_timer = 0; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1179 | return FALSE; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1180 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1181 | |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 | 1211 | diff = (yy < 0) ? (yy / 2) : ((yy - height) / 2); |
| 1428 | 1212 | gtk_adjustment_set_value (vadj, |
|
2337
bfc59092cd77
[gaim-migrate @ 2350]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2188
diff
changeset
|
1213 | MIN (vadj->value + diff, vadj->upper - height)); |
| 1428 | 1214 | } |
| 1215 | ||
| 1216 | if (imhtml->selection) { | |
|
1515
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1220 | if ((chunk == NULL) || |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1221 | (x < chunk->x) || |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1222 | (x > chunk->x + chunk->width) || |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1223 | (y < chunk->y) || |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1224 | (y > chunk->y + chunk->height)) |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1225 | gtk_imhtml_select_bits (imhtml); |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1482
diff
changeset
|
1226 | else |
|
89a3d8a63734
[gaim-migrate @ 1525]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1237 | if (imhtml->tip_bit != uw->bit) { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1238 | imhtml->tip_bit = uw->bit; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1239 | if (imhtml->tip_timer != 0) |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1240 | gtk_timeout_remove (imhtml->tip_timer); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1241 | if (imhtml->tip_window) { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1242 | gtk_widget_destroy (imhtml->tip_window); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1243 | imhtml->tip_window = NULL; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1244 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1245 | imhtml->tip_timer = gtk_timeout_add (TOOLTIP_TIMEOUT, |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1246 | gtk_imhtml_tip, |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1247 | imhtml); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1248 | } |
| 1476 | 1249 | gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, |
| 1250 | imhtml->hand_cursor); | |
| 1428 | 1251 | return TRUE; |
| 1252 | } | |
| 1253 | urls = g_list_next (urls); | |
| 1254 | } | |
| 1255 | } | |
| 1256 | ||
|
1574
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1257 | if (imhtml->tip_timer) { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1258 | gtk_timeout_remove (imhtml->tip_timer); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1259 | imhtml->tip_timer = 0; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1260 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1261 | if (imhtml->tip_window) { |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1262 | gtk_widget_destroy (imhtml->tip_window); |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1263 | imhtml->tip_window = NULL; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1264 | } |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1265 | imhtml->tip_bit = NULL; |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1266 | |
| 1476 | 1267 | gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor); |
| 1428 | 1268 | |
| 1269 | return TRUE; | |
| 1270 | } | |
| 1271 | ||
| 1272 | static gint | |
|
1613
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1273 | gtk_imhtml_leave_notify_event (GtkWidget *widget, |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1274 | GdkEventCrossing *event) |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1275 | { |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1276 | GtkIMHtml *imhtml = GTK_IMHTML (widget); |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1277 | |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1278 | if (imhtml->tip_timer) { |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1279 | gtk_timeout_remove (imhtml->tip_timer); |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1280 | imhtml->tip_timer = 0; |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1281 | } |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1282 | if (imhtml->tip_window) { |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1283 | gtk_widget_destroy (imhtml->tip_window); |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1284 | imhtml->tip_window = NULL; |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1285 | } |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1286 | imhtml->tip_bit = NULL; |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1287 | |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1288 | return TRUE; |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1289 | } |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1582
diff
changeset
|
1290 | |
|
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c03c929f8139
[gaim-migrate @ 1466]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1454
diff
changeset
|
1322 | x = event->x + hadj->value; |
|
c03c929f8139
[gaim-migrate @ 1466]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1454
diff
changeset
|
1323 | y = event->y + vadj->value; |
|
c03c929f8139
[gaim-migrate @ 1466]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
33704412676a
[gaim-migrate @ 1557]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1528
diff
changeset
|
1339 | if ((event->button == 1) && (imhtml->sel_startx == 0)) { |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1340 | GList *urls = imhtml->urls; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1341 | struct url_widget *uw; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1342 | |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1343 | while (urls) { |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1344 | uw = (struct url_widget *) urls->data; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1345 | if ((x > uw->x) && (x < uw->x + uw->width) && |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1346 | (y > uw->y) && (y < uw->y + uw->height)) { |
|
1574
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1347 | gtk_signal_emit (GTK_OBJECT (imhtml), signals [URL_CLICKED], |
|
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
1348 | uw->bit->url); |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1349 | return TRUE; |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1350 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1351 | urls = g_list_next (urls); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1352 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1353 | } |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2140
diff
changeset
|
1377 | if (imhtml->selected_text->len <= 0) |
|
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2140
diff
changeset
|
1378 | return; |
|
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2140
diff
changeset
|
1379 | |
|
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2140
diff
changeset
|
1380 | string = g_strdup (imhtml->selected_text->str); |
|
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
7d1f9f2d3f1d
[gaim-migrate @ 2198]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1425 | gtk_imhtml_adjustment_changed (GtkAdjustment *adjustment, |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1426 | GtkIMHtml *imhtml) |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1427 | { |
|
1980
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1428 | GtkLayout *layout = GTK_LAYOUT (imhtml); |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1429 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1430 | layout->xoffset = (gint) layout->hadjustment->value; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1431 | layout->yoffset = (gint) layout->vadjustment->value; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1432 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1433 | if (!GTK_WIDGET_MAPPED (imhtml) || !GTK_WIDGET_REALIZED (imhtml)) |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1434 | return; |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1435 | |
|
c29a87bab090
[gaim-migrate @ 1990]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1979
diff
changeset
|
1436 | if (layout->freeze_count) |
|
1955
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1437 | return; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1438 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1439 | if (layout->yoffset < TOP_BORDER) |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1440 | gdk_window_clear_area (layout->bin_window, 0, 0, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1441 | imhtml->xsize, TOP_BORDER - layout->yoffset); |
|
1961
281fd165f3c8
[gaim-migrate @ 1971]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1955
diff
changeset
|
1442 | |
|
1955
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1443 | gtk_imhtml_draw_exposed (imhtml); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1444 | } |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1445 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1446 | static void |
| 1428 | 1447 | gtk_imhtml_set_scroll_adjustments (GtkLayout *layout, |
| 1448 | GtkAdjustment *hadj, | |
| 1449 | GtkAdjustment *vadj) | |
| 1450 | { | |
|
1955
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1451 | gboolean need_adjust = FALSE; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1452 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1453 | g_return_if_fail (layout != NULL); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1454 | g_return_if_fail (GTK_IS_IMHTML (layout)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1455 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1456 | if (hadj) |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1457 | g_return_if_fail (GTK_IS_ADJUSTMENT (hadj)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1458 | else |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1459 | hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1460 | if (vadj) |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1461 | g_return_if_fail (GTK_IS_ADJUSTMENT (vadj)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1462 | else |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1463 | vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1464 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1465 | if (layout->hadjustment && (layout->hadjustment != hadj)) { |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1466 | gtk_signal_disconnect_by_data (GTK_OBJECT (layout->hadjustment), layout); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1467 | gtk_object_unref (GTK_OBJECT (layout->hadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1468 | } |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1469 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1470 | if (layout->vadjustment && (layout->vadjustment != vadj)) { |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1471 | gtk_signal_disconnect_by_data (GTK_OBJECT (layout->vadjustment), layout); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1472 | gtk_object_unref (GTK_OBJECT (layout->vadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1473 | } |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1474 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1475 | if (layout->hadjustment != hadj) { |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1476 | layout->hadjustment = hadj; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1477 | gtk_object_ref (GTK_OBJECT (layout->hadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1478 | gtk_object_sink (GTK_OBJECT (layout->hadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1479 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1480 | gtk_signal_connect (GTK_OBJECT (layout->hadjustment), "value_changed", |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1481 | (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1482 | need_adjust = TRUE; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1483 | } |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1484 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1485 | if (layout->vadjustment != vadj) { |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1486 | layout->vadjustment = vadj; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1487 | gtk_object_ref (GTK_OBJECT (layout->vadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1488 | gtk_object_sink (GTK_OBJECT (layout->vadjustment)); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1489 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1490 | gtk_signal_connect (GTK_OBJECT (layout->vadjustment), "value_changed", |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1491 | (GtkSignalFunc) gtk_imhtml_adjustment_changed, layout); |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1492 | need_adjust = TRUE; |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1493 | } |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1494 | |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1780
diff
changeset
|
1495 | if (need_adjust) |
|
80b2ecd77f10
[gaim-migrate @ 1965]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1527 | widget_class->draw_focus = gtk_imhtml_draw_focus; |
| 1428 | 1528 | widget_class->style_set = gtk_imhtml_style_set; |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
8216312b8c7e
[gaim-migrate @ 1623]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1541 | static gchar** |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1542 | get_font_names () |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1543 | { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1544 | gint num_fonts = 0; |
|
2065
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1545 | gchar **xfontnames; |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1546 | static gchar **fonts = NULL; |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1547 | gint i; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1548 | |
|
2065
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1549 | if (fonts) |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1550 | return fonts; |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1551 | |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1552 | xfontnames = XListFonts (GDK_DISPLAY (), "-*", MAX_FONTS, &num_fonts); |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1553 | |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1554 | if (!num_fonts) { |
|
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1555 | XFreeFontNames(xfontnames); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1556 | return g_new0 (char *, 1); |
|
2065
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1557 | } |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1558 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1559 | fonts = g_new0 (char *, num_fonts + 1); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1560 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1561 | for (i = 0; i < num_fonts; i++) { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1562 | gint countdown = 1, num_dashes = 1; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1563 | const gchar *t1 = xfontnames [i]; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1564 | const gchar *t2; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1565 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1566 | while (*t1 && (countdown >= 0)) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1567 | if (*t1++ == '-') |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1568 | countdown--; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1569 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1570 | for (t2 = t1; *t2; t2++) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1571 | if (*t2 == '-' && --num_dashes == 0) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1572 | break; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1573 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1574 | fonts [i] = g_strndup (t1, (long) t2 - (long) t1); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1575 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1576 | |
|
2065
6267e4b1466f
[gaim-migrate @ 2075]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1577 | XFreeFontNames(xfontnames); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1578 | return fonts; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1579 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1589 | GdkFont *font = NULL; |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1590 | XFontStruct *xfs; |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1591 | static gchar **fontnames = NULL; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1592 | gchar *choice = NULL; |
| 1428 | 1593 | gint size = fontsize ? font_sizes [MIN (fontsize, MAX_SIZE) - 1] : 120; |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1594 | gint i, j; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1595 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1596 | if (!fontnames) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1597 | fontnames = get_font_names (); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1598 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1599 | if (name) { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1600 | gchar **choices = g_strsplit (name, ",", -1); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1601 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1602 | for (i = 0; choices [i]; i++) { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1603 | for (j = 0; fontnames [j]; j++) |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2022
diff
changeset
|
1604 | if (!g_strcasecmp (fontnames [j], choices [i])) |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1605 | break; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1606 | if (fontnames [j]) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1607 | break; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1608 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1609 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1610 | if (choices [i]) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1611 | choice = g_strdup (choices [i]); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1612 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1613 | g_strfreev (choices); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1614 | } else if (!bold && !italics && !fontsize && imhtml->default_font) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1615 | return gdk_font_ref (imhtml->default_font); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1616 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1617 | if (!choice) { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1618 | for (i = 0; fontnames [i]; i++) |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2022
diff
changeset
|
1619 | if (!g_strcasecmp (fontnames [i], DEFAULT_FONT_NAME)) |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1620 | break; |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1621 | if (fontnames [i]) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1622 | choice = g_strdup (DEFAULT_FONT_NAME); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1623 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1624 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1625 | if (!choice) { |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1626 | if (imhtml->default_font) |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1627 | return gdk_font_ref (imhtml->default_font); |
|
2115
848a8af1a4af
[gaim-migrate @ 2125]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2075
diff
changeset
|
1628 | return gdk_fontset_load ("-*-*-*-*-*-*-*-*-*-*-*-*-*-*,*"); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1629 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1630 | |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1631 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-iso8859-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1632 | choice, |
| 1428 | 1633 | bold ? "bold" : "medium", |
| 1634 | italics ? 'i' : 'r', | |
| 1635 | size); | |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1636 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1637 | |
|
2140
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1638 | if (!font && italics) { |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1639 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-%d-*-*-*-*-iso8859-*", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1640 | choice, |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1641 | bold ? "bold" : "medium", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1642 | size); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1643 | font = gdk_font_load (buf); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1644 | } |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1645 | |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1646 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1647 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1648 | choice, |
| 1428 | 1649 | bold ? "bold" : "medium", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1650 | italics ? 'i' : 'r'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1651 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1652 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1653 | |
|
2140
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1654 | if (!font && italics) { |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1655 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-*-*-*-*-*-iso8859-*", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1656 | choice, |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1657 | bold ? "bold" : "medium"); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1658 | font = gdk_font_load (buf); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1659 | } |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1660 | |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1661 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1662 | g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1663 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1664 | italics ? 'i' : 'r'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1665 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1666 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1667 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1668 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1669 | g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1670 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1671 | italics ? 'o' : '*'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1672 | font = gdk_font_load (buf); |
| 1428 | 1673 | } |
| 1674 | ||
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1675 | if (!font && italics) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1676 | g_snprintf (buf, sizeof (buf), "-*-%s-*-*-*-*-*-*-*-*-*-*-iso8859-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1677 | choice); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1678 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1679 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1680 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1681 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1682 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-*-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1683 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1684 | bold ? "bold" : "medium", |
| 1428 | 1685 | italics ? 'i' : 'r', |
| 1686 | size); | |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1687 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1688 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1689 | |
|
2140
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1690 | if (!font && italics) { |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1691 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-%d-*-*-*-*-*-*", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1692 | choice, |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1693 | bold ? "bold" : "medium", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1694 | size); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1695 | font = gdk_font_load (buf); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1696 | } |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1697 | |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1698 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1699 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1700 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1701 | bold ? "bold" : "medium", |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1702 | italics ? 'i' : 'r'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1703 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1704 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1705 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1706 | if (!font) { |
|
2140
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1707 | g_snprintf (buf, sizeof (buf), "-*-%s-%s-o-*-*-*-*-*-*-*-*-*-*", |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1708 | choice, |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1709 | bold ? "bold" : "medium"); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1710 | font = gdk_font_load (buf); |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1711 | } |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1712 | |
|
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2116
diff
changeset
|
1713 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1714 | g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1715 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1716 | italics ? 'i' : 'r'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1717 | font = gdk_font_load (buf); |
| 1428 | 1718 | } |
| 1719 | ||
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1720 | if (!font) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1721 | g_snprintf (buf, sizeof (buf), "-*-%s-*-%c-*-*-*-*-*-*-*-*-*-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1722 | choice, |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1723 | italics ? 'o' : '*'); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1724 | font = gdk_font_load (buf); |
| 1428 | 1725 | } |
| 1726 | ||
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1727 | if (!font && italics) { |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1728 | g_snprintf (buf, sizeof (buf), "-*-%s-*-*-*-*-*-*-*-*-*-*-*-*", |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1729 | choice); |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1730 | font = gdk_font_load (buf); |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1731 | } |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1732 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1733 | g_free (choice); |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1734 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1735 | if (!font && imhtml->default_font) |
| 1428 | 1736 | return gdk_font_ref (imhtml->default_font); |
| 1737 | ||
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1738 | xfs = font ? GDK_FONT_XFONT (font) : NULL; |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1739 | if (xfs && (xfs->min_byte1 != 0 || xfs->max_byte1 != 0)) { |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1740 | gchar *tmp_name; |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1741 | |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1742 | gdk_font_unref (font); |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1743 | tmp_name = g_strconcat (buf, ",*", NULL); |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1744 | font = gdk_fontset_load (tmp_name); |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1745 | g_free (tmp_name); |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1746 | } |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1747 | |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1748 | if (!font) |
|
2116
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1749 | return gdk_fontset_load ("-*-*-*-*-*-*-*-*-*-*-*-*-*-*,*"); |
|
603e40b00a07
[gaim-migrate @ 2126]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2115
diff
changeset
|
1750 | |
|
1978
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1964
diff
changeset
|
1751 | |
|
77cd6993d3a4
[gaim-migrate @ 1988]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
1767 | imhtml->default_fg_color = gdk_color_copy (>K_WIDGET (imhtml)->style->fg [GTK_STATE_NORMAL]); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1847 | imhtml->x = 0; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1880 | GdkColor *fg_color, |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1897 | |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1898 | if (bg_color) { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1899 | if (imhtml->default_bg_color) |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1900 | gdk_color_free (imhtml->default_bg_color); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
1901 | imhtml->default_bg_color = gdk_color_copy (bg_color); |
|
1647
ab281d390ee6
[gaim-migrate @ 1657]
Decklin Foster <decklin@red-bean.com>
parents:
1626
diff
changeset
|
1902 | gdk_window_set_background (GTK_LAYOUT (imhtml)->bin_window, imhtml->default_bg_color); |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
1931 | if (!imhtml->smiley_start) |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
1932 | imhtml->smiley_start = g_string_new (""); |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
1933 | |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
1934 | if (!strchr (imhtml->smiley_start->str, text [0])) |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
1935 | imhtml->smiley_start = g_string_append_c (imhtml->smiley_start, text [0]); |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1950 | li = last->data; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1951 | if (li->x + li->width != imhtml->xsize) |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1952 | li->width = imhtml->xsize - li->x; |
| 1428 | 1953 | } |
| 1954 | ||
| 1955 | last = imhtml->line; | |
| 1956 | if (last) { | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1957 | li = last->data; |
| 1428 | 1958 | if (li->height < MIN_HEIGHT) { |
| 1959 | while (last) { | |
| 1960 | gint diff; | |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1961 | li = last->data; |
| 1428 | 1962 | diff = MIN_HEIGHT - li->height; |
| 1963 | li->height = MIN_HEIGHT; | |
| 1476 | 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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
1974 | imhtml->x = 0; |
| 1428 | 1975 | imhtml->y += imhtml->llheight; |
|
1462
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1461
diff
changeset
|
1976 | imhtml->llheight = 0; |
|
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
1996 | li = ls->data; |
| 1428 | 1997 | li->height += diff; |
| 1998 | if (ascent) | |
| 1999 | li->ascent = ascent; | |
| 2000 | else | |
| 1476 | 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 | 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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
2053 | uw->bit = bit; |
| 1428 | 2054 | imhtml->urls = g_list_append (imhtml->urls, uw); |
| 2055 | } | |
| 2056 | ||
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
2057 | bit->chunks = g_list_append (bit->chunks, li); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
155ae4e33c31
[gaim-migrate @ 1584]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1547
diff
changeset
|
2085 | uw->bit = bit; |
| 1428 | 2086 | imhtml->urls = g_list_append (imhtml->urls, uw); |
| 2087 | } | |
| 2088 | ||
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
2089 | bit->chunks = g_list_append (bit->chunks, li); |
|
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
2116 | if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize)) { |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
2140 | if (imhtml->x + width > imhtml->xsize) { |
| 1428 | 2141 | gint newpos = 0; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
2179 | if ((imhtml->x != 0) && ((imhtml->x + width) > imhtml->xsize)) |
| 1428 | 2180 | new_line (imhtml); |
|
1462
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1461
diff
changeset
|
2181 | else |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2189 | struct line_info *li; |
|
1462
69f0d88fbed3
[gaim-migrate @ 1472]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1461
diff
changeset
|
2190 | if (imhtml->llheight) |
| 1428 | 2191 | new_line (imhtml); |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2192 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2193 | li = g_new0 (struct line_info, 1); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2194 | li->x = imhtml->x; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2195 | li->y = imhtml->y; |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
2196 | li->width = imhtml->xsize; |
|
1454
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2197 | li->height = HR_HEIGHT * 2; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2198 | li->ascent = 0; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2199 | li->text = NULL; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2200 | li->bit = bit; |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2201 | |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1453
diff
changeset
|
2202 | bit->chunks = g_list_append (bit->chunks, li); |
|
153c42e644ff
[gaim-migrate @ 1464]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2241 | if (!gdk_color_parse (color, &c)) |
|
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2242 | return NULL; |
| 1428 | 2243 | |
|
1449
180e0a27c43f
[gaim-migrate @ 1459]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
2258 | if (!imhtml->smiley_start || !strchr (imhtml->smiley_start->str, text [0])) |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1515
diff
changeset
|
2259 | return 0; |
|
bbb72e250233
[gaim-migrate @ 1529]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2289 | gchar *url, |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2306 | if ((font != NULL) || bold || italics || pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2307 | if (font && (bold || italics || font->size || font->face || pre)) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2308 | if (pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2309 | bit->font = gtk_imhtml_font_load (imhtml, "courier", bold, italics, font->size); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2310 | } else { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2311 | bit->font = gtk_imhtml_font_load (imhtml, font->face, bold, italics, font->size); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2312 | } |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2313 | } else if (bold || italics || pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2314 | if (pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2315 | bit->font = gtk_imhtml_font_load (imhtml, "Courier", bold, italics, 0); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2316 | } else { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2317 | bit->font = gtk_imhtml_font_load (imhtml, NULL, bold, italics, 0); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2363 | fonts ? fonts->data : NULL, bg, url, pre) |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 | 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
6d07e6d5de09
[gaim-migrate @ 1592]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1574
diff
changeset
|
2384 | if (bit->type == TYPE_BR) \ |
|
6d07e6d5de09
[gaim-migrate @ 1592]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
6d07e6d5de09
[gaim-migrate @ 1592]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1574
diff
changeset
|
2396 | if (bit->type == TYPE_BR) \ |
|
6d07e6d5de09
[gaim-migrate @ 1592]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1574
diff
changeset
|
2397 | break; \ |
| 1428 | 2398 | rev = g_list_previous (rev); \ |
| 2399 | } \ | |
| 2400 | } \ | |
| 2401 | } | |
| 2402 | ||
|
1472
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2403 | static gboolean |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2404 | is_amp_escape (const gchar *string, |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2405 | gchar *replace, |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2406 | gint *length) |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2407 | { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2408 | g_return_val_if_fail (string != NULL, FALSE); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2409 | g_return_val_if_fail (replace != NULL, FALSE); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2410 | g_return_val_if_fail (length != NULL, FALSE); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2411 | |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2412 | if (!g_strncasecmp (string, "&", 5)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2413 | *replace = '&'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2414 | *length = 5; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2415 | } else if (!g_strncasecmp (string, "<", 4)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2416 | *replace = '<'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2417 | *length = 4; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2418 | } else if (!g_strncasecmp (string, ">", 4)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2419 | *replace = '>'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2420 | *length = 4; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2421 | } else if (!g_strncasecmp (string, " ", 6)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2422 | *replace = ' '; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2423 | *length = 6; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2424 | } else if (!g_strncasecmp (string, "©", 6)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2425 | *replace = '©'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2426 | *length = 6; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2427 | } else if (!g_strncasecmp (string, """, 6)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2428 | *replace = '\"'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2429 | *length = 6; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2430 | } else if (!g_strncasecmp (string, "®", 5)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2431 | *replace = '®'; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2432 | *length = 5; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2433 | } else if (*(string + 1) == '#') { |
|
2022
c47ca971fd2f
[gaim-migrate @ 2032]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2002
diff
changeset
|
2434 | guint pound = 0; |
|
c47ca971fd2f
[gaim-migrate @ 2032]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2002
diff
changeset
|
2435 | if (sscanf (string, "&#%u;", £) == 1) { |
|
1472
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2436 | if (*(string + 3 + (gint)log10 (pound)) != ';') |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2437 | return FALSE; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2438 | *replace = (gchar)pound; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2439 | *length = 2; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2440 | while (isdigit ((gint) string [*length])) (*length)++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2441 | if (string [*length] == ';') (*length)++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2442 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2443 | return FALSE; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2444 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2445 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2446 | return FALSE; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2447 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2448 | |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2449 | return TRUE; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2450 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
16cf54e403dc
[gaim-migrate @ 1713]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2474 | title = 0, |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
16cf54e403dc
[gaim-migrate @ 1713]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1691
diff
changeset
|
2505 | if (intag && (tagquote != 1)) { |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2506 | char *d; |
| 1428 | 2507 | tag [tpos] = 0; |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2508 | d = tag; |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2509 | while (*d) { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2510 | if ((smilelen = gtk_imhtml_is_smiley (imhtml, d)) != 0) { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2511 | ws [wpos] = 0; |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2512 | wpos = 0; |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2513 | NEW_BIT (NEW_TEXT_BIT); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2514 | g_snprintf (ws, smilelen + 1, "%s", d); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2515 | NEW_BIT (NEW_SMILEY_BIT); |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2516 | d += smilelen; |
|
1472
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2517 | } else if (*d == '&') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2518 | gchar replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2519 | gint length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2520 | if (is_amp_escape (d, &replace, &length)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2521 | ws [wpos++] = replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2522 | d += length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2523 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2524 | ws [wpos++] = *d++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2525 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2526 | } else if (*d == '\n') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2527 | if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2528 | ws [wpos] = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2529 | wpos = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2530 | NEW_BIT (NEW_TEXT_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2531 | NEW_BIT (NEW_BR_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2532 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
2533 | d++; |
|
1460
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2534 | } else { |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2535 | ws [wpos++] = *d++; |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1456
diff
changeset
|
2536 | } |
|
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
16cf54e403dc
[gaim-migrate @ 1713]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
16cf54e403dc
[gaim-migrate @ 1713]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1613
diff
changeset
|
2641 | NEW_BIT (NEW_TEXT_BIT); |
| 1428 | 2642 | if (sup) { |
| 2643 | sup--; | |
| 2644 | } | |
|
1691
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2645 | } else if (!g_strcasecmp (tag, "<PRE>")) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2646 | got_tag = TRUE; |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2647 | NEW_BIT (NEW_TEXT_BIT); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2648 | pre++; |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2649 | } else if (!g_strcasecmp (tag, "</PRE>")) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2650 | got_tag = TRUE; |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2651 | NEW_BIT (NEW_TEXT_BIT); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2652 | if (pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
2653 | pre--; |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
19ae93cf38ce
[gaim-migrate @ 1636]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
55e9decd97d6
[gaim-migrate @ 1748]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
55e9decd97d6
[gaim-migrate @ 1748]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
36d736a53d30
[gaim-migrate @ 2150]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1519
diff
changeset
|
2957 | got_tag = TRUE; |
| 1428 | 2958 | NEW_BIT (NEW_TEXT_BIT); |
| 2959 | g_free (url); | |
|
1524
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1519
diff
changeset
|
2960 | url = NULL; |
|
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1519
diff
changeset
|
2961 | } else { |
|
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1519
diff
changeset
|
2962 | intag = FALSE; |
|
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1519
diff
changeset
|
2963 | tpos = 0; |
|
05bb7cc45c1c
[gaim-migrate @ 1534]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2976 | if (imhtml->img == NULL) { |
|
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2977 | ws [wpos] = 0; |
|
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2978 | strcat (ws, copy); |
|
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2979 | wpos = strlen (ws); |
|
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1449
diff
changeset
|
2980 | g_free (copy); |
| 1428 | 2981 | continue; |
|
1453
fb1ccaf9323b
[gaim-migrate @ 1463]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c63c0e2b00c1
[gaim-migrate @ 1470]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1428
diff
changeset
|
3057 | !g_strcasecmp (tag, "<H3>") || |
|
1473
213ef409ce41
[gaim-migrate @ 1483]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1472
diff
changeset
|
3058 | !g_strncasecmp (tag, "<H3 ", strlen ("<H3 ")) || |
|
1447
1e6df96992e1
[gaim-migrate @ 1457]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3073 | char *d; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3074 | tag [tpos] = 0; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3075 | d = tag; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3076 | while (*d) { |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3077 | if ((smilelen = gtk_imhtml_is_smiley (imhtml, d)) != 0) { |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3078 | ws [wpos] = 0; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3079 | wpos = 0; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3080 | NEW_BIT (NEW_TEXT_BIT); |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3081 | g_snprintf (ws, smilelen + 1, "%s", d); |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3082 | NEW_BIT (NEW_SMILEY_BIT); |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3083 | d += smilelen; |
|
1472
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3084 | } else if (*d == '&') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3085 | gchar replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3086 | gint length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3087 | if (is_amp_escape (d, &replace, &length)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3088 | ws [wpos++] = replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3089 | d += length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3090 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3091 | ws [wpos++] = *d++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3092 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3093 | } else if (*d == '\n') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3094 | if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3095 | ws [wpos] = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3096 | wpos = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3097 | NEW_BIT (NEW_TEXT_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3098 | NEW_BIT (NEW_BR_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3099 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3100 | d++; |
|
1463
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3101 | } else { |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3102 | ws [wpos++] = *d++; |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3103 | } |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1462
diff
changeset
|
3104 | } |
|
dd25c559b99d
[gaim-migrate @ 1473]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3112 | gchar replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3113 | gint length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3114 | if (is_amp_escape (c, &replace, &length)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3115 | ws [wpos++] = replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3116 | c += length; |
| 1428 | 3117 | } else { |
| 3118 | ws [wpos++] = *c++; | |
| 3119 | } | |
| 3120 | } else if (intag) { | |
| 3121 | if (*c == '\"') | |
|
1703
16cf54e403dc
[gaim-migrate @ 1713]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3157 | } else if (*c == '&') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3158 | gchar replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3159 | gint length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3160 | if (is_amp_escape (c, &replace, &length)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3161 | ws [wpos++] = replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3162 | c += length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3163 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3164 | ws [wpos++] = *c++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3165 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3166 | } else if (*c == '\n') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3167 | if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3168 | ws [wpos] = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3169 | wpos = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3170 | NEW_BIT (NEW_TEXT_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3171 | NEW_BIT (NEW_BR_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3172 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3192 | } else if (*c == '&') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3193 | gchar replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3194 | gint length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3195 | if (is_amp_escape (c, &replace, &length)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3196 | ws [wpos++] = replace; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3197 | c += length; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3198 | } else { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3199 | ws [wpos++] = *c++; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3200 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3201 | } else if (*c == '\n') { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3202 | if (!(options & GTK_IMHTML_NO_NEWLINE)) { |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3203 | ws [wpos] = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3204 | wpos = 0; |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3205 | NEW_BIT (NEW_TEXT_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3206 | NEW_BIT (NEW_BR_BIT); |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1463
diff
changeset
|
3207 | } |
|
ce83d12b7df9
[gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3225 | GTK_LAYOUT (imhtml)->height = imhtml->y; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3226 | GTK_LAYOUT (imhtml)->vadjustment->upper = imhtml->y; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3227 | gtk_signal_emit_by_name (GTK_OBJECT (GTK_LAYOUT (imhtml)->vadjustment), "changed"); |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3228 | |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3233 | (imhtml->y >= MAX (1, |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3234 | (GTK_WIDGET (imhtml)->allocation.height - |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3235 | (GTK_WIDGET (imhtml)->style->klass->ythickness + BORDER_SIZE) * 2)))) |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3236 | gtk_adjustment_set_value (vadj, imhtml->y - |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3237 | MAX (1, (GTK_WIDGET (imhtml)->allocation.height - |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3238 | (GTK_WIDGET (imhtml)->style->klass->ythickness + |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
3289 | while (pre) { |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
3290 | retval = g_string_append (retval, "</PRE>"); |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
3291 | pre--; |
|
c8bd41036372
[gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1647
diff
changeset
|
3292 | } |
| 1428 | 3293 | } |
| 3294 | g_free (ws); | |
| 3295 | g_free (tag); | |
| 3296 | ||
| 3297 | return retval; | |
| 3298 | } | |
|
1780
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3299 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3300 | void |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3301 | gtk_imhtml_clear (GtkIMHtml *imhtml) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3302 | { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3303 | g_return_if_fail (imhtml != NULL); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3304 | g_return_if_fail (GTK_IS_IMHTML (imhtml)); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3305 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3306 | while (imhtml->bits) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3307 | GtkIMHtmlBit *bit = imhtml->bits->data; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3308 | imhtml->bits = g_list_remove (imhtml->bits, bit); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3309 | if (bit->text) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3310 | g_free (bit->text); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3311 | if (bit->font) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3312 | gdk_font_unref (bit->font); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3313 | if (bit->fore) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3314 | gdk_color_free (bit->fore); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3315 | if (bit->back) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3316 | gdk_color_free (bit->back); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3317 | if (bit->bg) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3318 | gdk_color_free (bit->bg); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3319 | if (bit->url) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3320 | g_free (bit->url); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3321 | if (bit->pm) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3322 | gdk_pixmap_unref (bit->pm); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3323 | if (bit->bm) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3324 | gdk_bitmap_unref (bit->bm); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3325 | while (bit->chunks) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3326 | struct line_info *li = bit->chunks->data; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3327 | if (li->text) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3328 | g_free (li->text); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3329 | bit->chunks = g_list_remove (bit->chunks, li); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3330 | g_free (li); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3331 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3332 | g_free (bit); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3333 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3334 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3335 | while (imhtml->urls) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3336 | g_free (imhtml->urls->data); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3337 | imhtml->urls = g_list_remove (imhtml->urls, imhtml->urls->data); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3338 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3339 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3340 | if (imhtml->selected_text) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3341 | g_string_free (imhtml->selected_text, TRUE); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3342 | imhtml->selected_text = g_string_new (""); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3343 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3344 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3345 | if (imhtml->tip_timer) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3346 | gtk_timeout_remove (imhtml->tip_timer); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3347 | imhtml->tip_timer = 0; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3348 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3349 | if (imhtml->tip_window) { |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3350 | gtk_widget_destroy (imhtml->tip_window); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3351 | imhtml->tip_window = NULL; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3352 | } |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3353 | imhtml->tip_bit = NULL; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3354 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3355 | gdk_window_set_cursor (GTK_LAYOUT (imhtml)->bin_window, imhtml->arrow_cursor); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3356 | |
|
1998
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3357 | imhtml->x = 0; |
|
9a2ea9cce60e
[gaim-migrate @ 2008]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1997
diff
changeset
|
3358 | imhtml->y = TOP_BORDER; |
|
1780
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3359 | imhtml->llheight = 0; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3360 | imhtml->llascent = 0; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3361 | imhtml->line = NULL; |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3362 | |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3363 | if (GTK_WIDGET_REALIZED (GTK_WIDGET (imhtml))) |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3364 | gdk_window_clear (GTK_LAYOUT (imhtml)->bin_window); |
|
431333222954
[gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1738
diff
changeset
|
3365 | } |