annotate src/gtkhtml.c @ 914:215fe9039ae1

[gaim-migrate @ 924] now i just need to do the same for pixmaps and we're set. pixmaps are going to be harder to do though because we add the pixmaps, not gtkhtml, which means we're going to have to figure out what the font is supposed to be ourselves. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 15 Sep 2000 16:51:31 +0000
parents 65c8bd1feec5
children 5871e1eec10c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 /*
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 * gaim
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 *
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 *
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 * (at your option) any later version.
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 *
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 * GNU General Public License for more details.
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 *
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 *
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21 */
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
22
349
b402a23f35df [gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 337
diff changeset
23 #ifdef HAVE_CONFIG_H
b402a23f35df [gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 337
diff changeset
24 #include "../config.h"
b402a23f35df [gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 337
diff changeset
25 #endif
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26 #include <stdio.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 #include <stdlib.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28 #include <string.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 #include <gtk/gtk.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
30 #include <gdk/gdkprivate.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
31 #include <gdk/gdkx.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 #include <gdk/gdkkeysyms.h>
604
0b1a132e0f75 [gaim-migrate @ 614]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 574
diff changeset
33 #include <ctype.h>
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
34
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
35 #ifndef _WIN32
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36 #include <X11/Xlib.h>
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 #include <X11/Xatom.h>
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
38 #endif
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
39
69
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
40 #include "gaim.h"
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
41 #include "gtkhtml.h"
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42
549
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
43 #include "pixmaps/aol_icon.xpm"
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
44 #include "pixmaps/admin_icon.xpm"
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
45 #include "pixmaps/free_icon.xpm"
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
46 #include "pixmaps/dt_icon.xpm"
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47 #define MAX_SIZE 7
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48 #define MIN_HTML_WIDTH_LINES 20
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 #define MIN_HTML_HEIGHT_LINES 10
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50 #define BORDER_WIDTH 2
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
51 #define SCROLL_TIME 100
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
52 #define SCROLL_PIXELS 5
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
53 #define KEY_SCROLL_PIXELS 10
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
54
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
55 int font_sizes[] = { 80, 100, 120, 140, 200, 300, 400 };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
56
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
57 /*
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
58 GdkFont *fixed_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
59 GdkFont *fixed_bold_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
60 GdkFont *fixed_italic_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
61 GdkFont *fixed_bold_italic_font[] =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
62 { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
63 GdkFont *prop_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
64 GdkFont *prop_bold_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
65 GdkFont *prop_italic_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
66 GdkFont *prop_bold_italic_font[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
67 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
68
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
69 GData * font_cache;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
70 static gboolean cache_init = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
71
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
72 struct font_state
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
73 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
74 int size;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
75 int owncolor;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
76 int ownbg;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
77 gchar font[1024];
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
78 GdkColor *color;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
79 GdkColor *bgcol;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
80 struct font_state *next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
81 };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
82
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
83 struct font_state *push_state(struct font_state *current)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
84 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
85 struct font_state *tmp;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
86 tmp = (struct font_state *) g_new0(struct font_state, 1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
87 tmp->next = current;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
88 tmp->color = current->color;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
89 tmp->bgcol = current->bgcol;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
90 tmp->size = current->size;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
91 tmp->owncolor = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
92 tmp->ownbg = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
93 strcpy( tmp->font, current->font );
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
94 return tmp;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
95 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
96
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
97 enum
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
98 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
99 ARG_0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
100 ARG_HADJUSTMENT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
101 ARG_VADJUSTMENT,
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
102 };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
103
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
104
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
105 enum
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
106 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
107 TARGET_STRING,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
108 TARGET_TEXT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
109 TARGET_COMPOUND_TEXT
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
110 };
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
111
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
112
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
113 static void gtk_html_class_init(GtkHtmlClass * klass);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
114 static void gtk_html_set_arg(GtkObject * object, GtkArg * arg, guint arg_id);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
115 static void gtk_html_get_arg(GtkObject * object, GtkArg * arg, guint arg_id);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
116 static void gtk_html_init(GtkHtml * html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
117 static void gtk_html_destroy(GtkObject * object);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
118 static void gtk_html_finalize(GtkObject * object);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
119 static void gtk_html_realize(GtkWidget * widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
120 static void gtk_html_unrealize(GtkWidget * widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
121 static void gtk_html_style_set(GtkWidget * widget, GtkStyle * previous_style);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
122 static void gtk_html_draw_focus(GtkWidget * widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
123 static void gtk_html_size_request(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
124 GtkRequisition * requisition);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
125 static void gtk_html_size_allocate(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
126 GtkAllocation * allocation);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
127 static void gtk_html_adjustment(GtkAdjustment * adjustment, GtkHtml * html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
128 static void gtk_html_disconnect(GtkAdjustment * adjustment, GtkHtml * html);
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
129 static void gtk_html_add_seperator(GtkHtml *, GdkFont *, GdkColor *, GdkColor *);
337
f5b199e20d12 [gaim-migrate @ 347]
Rob Flynn <gaim@robflynn.com>
parents: 306
diff changeset
130 // static void gtk_html_add_pixmap(GtkHtml * html, GdkPixmap * pm, gint fit);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
131 static void gtk_html_add_text(GtkHtml * html,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
132 GdkFont * font,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
133 GdkColor * fore,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
134 GdkColor * back,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
135 gchar * chars,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
136 gint length,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
137 gint uline, gint strike, gchar * url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
138 static void gtk_html_draw_bit(GtkHtml * html,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
139 GtkHtmlBit * htmlbit, gint redraw);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
140 static void gtk_html_selection_get(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
141 GtkSelectionData * selection_data,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
142 guint sel_info, guint32 time);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
143 static gint gtk_html_selection_clear(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
144 GdkEventSelection * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
145 static gint gtk_html_visibility_notify(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
146 GdkEventVisibility * event);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
147
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
148
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
149 /* Event handlers */
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
150 static void gtk_html_draw(GtkWidget * widget, GdkRectangle * area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
151 static gint gtk_html_expose(GtkWidget * widget, GdkEventExpose * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
152 static gint gtk_html_button_press(GtkWidget * widget, GdkEventButton * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
153 static gint gtk_html_button_release(GtkWidget * widget, GdkEventButton * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
154 static gint gtk_html_motion_notify(GtkWidget * widget, GdkEventMotion * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
155 static gint gtk_html_key_press(GtkWidget * widget, GdkEventKey * event);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
156 static gint gtk_html_leave_notify(GtkWidget * widget, GdkEventCrossing * event);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
157
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
158 static gint gtk_html_tooltip_timeout(gpointer data);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
159
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
160
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
161 static void clear_area(GtkHtml * html, GdkRectangle * area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
162 static void expose_html(GtkHtml * html, GdkRectangle * area, gboolean cursor);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
163 static void scroll_down(GtkHtml * html, gint diff0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
164 static void scroll_up(GtkHtml * html, gint diff0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
165
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
166 static void adjust_adj(GtkHtml * html, GtkAdjustment * adj);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
167 static void resize_html(GtkHtml * html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
168 static gint html_bit_is_onscreen(GtkHtml * html, GtkHtmlBit * hb);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
169 static void draw_cursor(GtkHtml * html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
170 static void undraw_cursor(GtkHtml * html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
171
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
172 static int get_line_height(GtkHtml *, GtkHtmlBit *);
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
173
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
174 static GtkWidgetClass *parent_class = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
175
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
176 GtkType gtk_html_get_type(void)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
177 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
178 static GtkType html_type = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
179
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
180 if (!html_type)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
181 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
182 static const GtkTypeInfo html_info = {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
183 "GtkHtml",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
184 sizeof(GtkHtml),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
185 sizeof(GtkHtmlClass),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
186 (GtkClassInitFunc) gtk_html_class_init,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
187 (GtkObjectInitFunc) gtk_html_init,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
188 NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
189 NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
190 NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
191 };
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
192 html_type = gtk_type_unique(GTK_TYPE_WIDGET, &html_info);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
193 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
194 return html_type;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
195 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
196
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
197
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
198 static void gtk_html_class_init(GtkHtmlClass * class)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
199 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
200 GtkObjectClass *object_class;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
201 GtkWidgetClass *widget_class;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
202
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
203 object_class = (GtkObjectClass *) class;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
204 widget_class = (GtkWidgetClass *) class;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
205 parent_class = gtk_type_class(GTK_TYPE_WIDGET);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
206
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
207
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
208 gtk_object_add_arg_type("GtkHtml::hadjustment",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
209 GTK_TYPE_ADJUSTMENT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
210 GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
211 ARG_HADJUSTMENT);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
212
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
213 gtk_object_add_arg_type("GtkHtml::vadjustment",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
214 GTK_TYPE_ADJUSTMENT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
215 GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
216 ARG_VADJUSTMENT);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
217
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
218 object_class->set_arg = gtk_html_set_arg;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
219 object_class->get_arg = gtk_html_get_arg;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
220 object_class->destroy = gtk_html_destroy;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
221 object_class->finalize = gtk_html_finalize;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
222
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
223 widget_class->realize = gtk_html_realize;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
224 widget_class->unrealize = gtk_html_unrealize;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
225 widget_class->style_set = gtk_html_style_set;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
226 widget_class->draw_focus = gtk_html_draw_focus;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
227 widget_class->size_request = gtk_html_size_request;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
228 widget_class->size_allocate = gtk_html_size_allocate;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
229 widget_class->draw = gtk_html_draw;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
230 widget_class->expose_event = gtk_html_expose;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
231 widget_class->button_press_event = gtk_html_button_press;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
232 widget_class->button_release_event = gtk_html_button_release;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
233 widget_class->motion_notify_event = gtk_html_motion_notify;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
234 widget_class->leave_notify_event = gtk_html_leave_notify;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
235 widget_class->selection_get = gtk_html_selection_get;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
236 widget_class->selection_clear_event = gtk_html_selection_clear;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
237 widget_class->key_press_event = gtk_html_key_press;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
238 widget_class->visibility_notify_event = gtk_html_visibility_notify;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
239
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
240
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
241 widget_class->set_scroll_adjustments_signal =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
242 gtk_signal_new("set_scroll_adjustments",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
243 GTK_RUN_LAST,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
244 object_class->type,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
245 GTK_SIGNAL_OFFSET(GtkHtmlClass, set_scroll_adjustments),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
246 gtk_marshal_NONE__POINTER_POINTER,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
247 GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
248 GTK_TYPE_ADJUSTMENT);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
249
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
250
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
251 class->set_scroll_adjustments = gtk_html_set_adjustments;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
252
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
253 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
254
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
255 static void gtk_html_set_arg(GtkObject * object, GtkArg * arg, guint arg_id)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
256 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
257 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
258
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
259 html = GTK_HTML(object);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
260
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
261 switch (arg_id)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
262 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
263 case ARG_HADJUSTMENT:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
264 gtk_html_set_adjustments(html, GTK_VALUE_POINTER(*arg), html->vadj);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
265 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
266 case ARG_VADJUSTMENT:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
267 gtk_html_set_adjustments(html, html->hadj, GTK_VALUE_POINTER(*arg));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
268 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
269 default:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
270 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
271 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
272 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
273
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
274 static void gtk_html_get_arg(GtkObject * object, GtkArg * arg, guint arg_id)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
275 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
276 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
277
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
278 html = GTK_HTML(object);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
279
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
280 switch (arg_id)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
281 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
282 case ARG_HADJUSTMENT:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
283 GTK_VALUE_POINTER(*arg) = html->hadj;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
284 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
285 case ARG_VADJUSTMENT:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
286 GTK_VALUE_POINTER(*arg) = html->vadj;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
287 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
288 default:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
289 arg->type = GTK_TYPE_INVALID;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
290 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
291 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
292 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
293
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
294 static void gtk_html_init(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
295 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
296 static const GtkTargetEntry targets[] = {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
297 {"STRING", 0, TARGET_STRING},
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
298 {"TEXT", 0, TARGET_TEXT},
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
299 {"COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT}
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
300 };
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
301
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
302 static const gint n_targets = sizeof(targets) / sizeof(targets[0]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
303
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
304 GTK_WIDGET_SET_FLAGS(html, GTK_CAN_FOCUS);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
305
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
306 html->html_area = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
307 html->hadj = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
308 html->vadj = NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
309 html->current_x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
310 html->current_y = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
311 html->start_sel = html->end_sel = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
312 html->start_sel_x = html->start_sel_y = -1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
313 html->num_end = html->num_start = -1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
314
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
315 html->html_bits = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
316 html->urls = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
317 html->selected_text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
318 html->tooltip_hb = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
319 html->tooltip_timer = -1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
320 html->tooltip_window = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
321 html->cursor_hb = NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
322 html->cursor_pos = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
323
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
324 html->pm = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
325
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
326 html->editable = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
327 html->transparent = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
328
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
329 html->frozen = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
330
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
331 gtk_selection_add_targets(GTK_WIDGET(html), GDK_SELECTION_PRIMARY,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
332 targets, n_targets);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
333
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
334
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
335
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
336 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
337
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
338
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
339 GtkWidget *gtk_html_new(GtkAdjustment * hadj, GtkAdjustment * vadj)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
340 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
341 GtkWidget *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
342 if(!cache_init)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
343 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
344 g_datalist_init(&font_cache);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
345 cache_init = TRUE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
346 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
347
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
348 if (hadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
349 g_return_val_if_fail(GTK_IS_ADJUSTMENT(hadj), NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
350 if (vadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
351 g_return_val_if_fail(GTK_IS_ADJUSTMENT(vadj), NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
352
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
353 html = gtk_widget_new(GTK_TYPE_HTML,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
354 "hadjustment", hadj, "vadjustment", vadj, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
355
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
356 return html;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
357 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
358
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
359
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
360 void gtk_html_set_editable(GtkHtml * html, gboolean is_editable)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
361 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
362 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
363 g_return_if_fail(GTK_IS_HTML(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
364
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
365
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
366 html->editable = (is_editable != FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
367
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
368 if (is_editable)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
369 draw_cursor(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
370 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
371 undraw_cursor(html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
372
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
373 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
374
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
375 void gtk_html_set_transparent(GtkHtml * html, gboolean is_transparent)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
376 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
377 GdkRectangle rect;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
378 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
379 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
380 GtkWidget *widget;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
381
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
382 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
383 g_return_if_fail(GTK_IS_HTML(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
384
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
385
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
386 widget = GTK_WIDGET(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
387 html->transparent = (is_transparent != FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
388
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
389 if (!GTK_WIDGET_REALIZED(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
390 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
391
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
392 html->bg_gc = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
393 gdk_window_get_size(widget->window, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
394 rect.x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
395 rect.y = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
396 rect.width = width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
397 rect.height = height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
398 gdk_window_clear_area(widget->window, rect.x, rect.y, rect.width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
399 rect.height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
400
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
401 expose_html(html, &rect, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
402 gtk_html_draw_focus((GtkWidget *) html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
403 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
404
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
405
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
406 void gtk_html_set_adjustments(GtkHtml * html,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
407 GtkAdjustment * hadj, GtkAdjustment * vadj)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
408 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
409 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
410 g_return_if_fail(GTK_IS_HTML(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
411 if (hadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
412 g_return_if_fail(GTK_IS_ADJUSTMENT(hadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
413 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
414 hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
415 if (vadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
416 g_return_if_fail(GTK_IS_ADJUSTMENT(vadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
417 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
418 vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
419
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
420 if (html->hadj && (html->hadj != hadj))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
421 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
422 gtk_signal_disconnect_by_data(GTK_OBJECT(html->hadj), html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
423 gtk_object_unref(GTK_OBJECT(html->hadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
424 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
425
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
426 if (html->vadj && (html->vadj != vadj))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
427 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
428 gtk_signal_disconnect_by_data(GTK_OBJECT(html->vadj), html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
429 gtk_object_unref(GTK_OBJECT(html->vadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
430 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
431
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
432 if (html->hadj != hadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
433 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
434 html->hadj = hadj;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
435 gtk_object_ref(GTK_OBJECT(html->hadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
436 gtk_object_sink(GTK_OBJECT(html->hadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
437
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
438 gtk_signal_connect(GTK_OBJECT(html->hadj), "changed",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
439 (GtkSignalFunc) gtk_html_adjustment, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
440 gtk_signal_connect(GTK_OBJECT(html->hadj), "value_changed",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
441 (GtkSignalFunc) gtk_html_adjustment, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
442 gtk_signal_connect(GTK_OBJECT(html->hadj), "disconnect",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
443 (GtkSignalFunc) gtk_html_disconnect, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
444 gtk_html_adjustment(hadj, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
445 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
446
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
447 if (html->vadj != vadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
448 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
449 html->vadj = vadj;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
450 gtk_object_ref(GTK_OBJECT(html->vadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
451 gtk_object_sink(GTK_OBJECT(html->vadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
452
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
453 gtk_signal_connect(GTK_OBJECT(html->vadj), "changed",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
454 (GtkSignalFunc) gtk_html_adjustment, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
455 gtk_signal_connect(GTK_OBJECT(html->vadj), "value_changed",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
456 (GtkSignalFunc) gtk_html_adjustment, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
457 gtk_signal_connect(GTK_OBJECT(html->vadj), "disconnect",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
458 (GtkSignalFunc) gtk_html_disconnect, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
459 gtk_html_adjustment(vadj, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
460 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
461 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
462
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
463
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
464
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
465 GdkColor *get_color(int colorv, GdkColormap * map)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
466 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
467 GdkColor *color;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
468 #if 0
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
469 fprintf(stdout, "color is %x\n", colorv);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
470 #endif
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
471 color = (GdkColor *) g_new0(GdkColor, 1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
472 color->red = ((colorv & 0xff0000) >> 16) * 256;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
473 color->green = ((colorv & 0xff00) >> 8) * 256;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
474 color->blue = ((colorv & 0xff)) * 256;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
475 #if 0
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
476 fprintf(stdout, "Colors are %d, %d, %d\n", color->red, color->green,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
477 color->blue);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
478 #endif
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
479 gdk_color_alloc(map, color);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
480 return color;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
481 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
482
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
483
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
484 int load_font_with_cache(const char *name, const char *weight, char slant,
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
485 int size, GdkFont **font_return)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
486 {
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
487 gchar font_spec[1024];
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
488
306
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
489 if (size > 0)
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
490 g_snprintf(font_spec, sizeof font_spec,
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
491 "-*-%s-%s-%c-*-*-*-%d-*-*-*-*-*-*",
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
492 name, weight, slant, size);
852
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
493 else
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
494 g_snprintf(font_spec, sizeof font_spec,
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
495 "-*-%s-%s-%c-*-*-*-*-*-*-*-*-*-*",
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
496 name, weight, slant);
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
497
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
498 if((*font_return = g_datalist_id_get_data(&font_cache,
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
499 g_quark_from_string(font_spec)))) {
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
500 return TRUE;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
501 } else if ((*font_return = gdk_font_load(font_spec))) {
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
502 g_datalist_id_set_data(&font_cache,
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
503 g_quark_from_string(font_spec), *font_return);
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
504 return TRUE;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
505 } else {
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
506 return FALSE;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
507 }
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
508 }
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
509
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
510
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
511 GdkFont *getfont(const char *font, int bold, int italic, int fixed, int size)
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
512 {
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
513 GdkFont *my_font = NULL;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
514 gchar *weight, slant;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
515
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
516 if (!font || !strlen(font)) font = fixed ? "courier" : "helvetica";
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
517 weight = bold ? "bold" : "medium";
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
518 slant = italic ? 'i' : 'r';
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
519
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
520 if (size > MAX_SIZE) size = MAX_SIZE;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
521 if (size < 1) size = 1;
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
522 size = font_sizes[size-1];
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
523
852
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
524 /* try both 'i'talic and 'o'blique for italic fonts */
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
525
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
526 if (load_font_with_cache(font, weight, slant, size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
527 return my_font;
852
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
528 if (load_font_with_cache(font, weight, 'o', size, &my_font))
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
529 return my_font;
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
530 if (italic && load_font_with_cache(font, weight, slant, 0, &my_font))
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
531 return my_font;
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
532 if (italic && load_font_with_cache(font, weight, 'o', 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
533 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
534
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
535 /* since we couldn't get the right font, fall back to the default fonts. */
286
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
536
37a1d222b7f8 [gaim-migrate @ 296]
Rob Flynn <gaim@robflynn.com>
parents: 137
diff changeset
537 font = fixed ? "courier" : "helvetica";
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
538 if (load_font_with_cache(font, weight, slant, size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
539 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
540 if (load_font_with_cache(font, weight, slant, 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
541 return my_font;
305
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
542
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
543 font = fixed ? "helvetica" : "courier";
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
544 if (load_font_with_cache(font, weight, slant, size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
545 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
546 if (load_font_with_cache(font, weight, slant, 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
547 return my_font;
305
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
548
721
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
549 /* whoops, couldn't do any of those. maybe they have a default outgoing
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
550 * font? maybe we can use that. */
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
551 if (fontface[0]) {
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
552 /* woohoo! */
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
553 if (load_font_with_cache(fontface, "medium", 'r', size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
554 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
555 if (load_font_with_cache(fontface, "medium", 'r', 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
556 return my_font;
721
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
557 }
8e7ad10b5f26 [gaim-migrate @ 731]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 720
diff changeset
558
305
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
559 /* ok, now we're in a pickle. if we can't do any of the above, let's
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
560 * try doing the most boring font we can find. */
791
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
561 if (load_font_with_cache("helvetica", "medium", 'r', size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
562 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
563 if (load_font_with_cache("helvetica", "medium", 'r', 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
564 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
565
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
566 if (load_font_with_cache("courier", "medium", 'r', size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
567 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
568 if (load_font_with_cache("courier", "medium", 'r', 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
569 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
570
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
571 if (load_font_with_cache("times", "medium", 'r', size, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
572 return my_font;
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
573 if (load_font_with_cache("times", "medium", 'r', 0, &my_font))
678bdc430df7 [gaim-migrate @ 801]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 740
diff changeset
574 return my_font;
305
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
575
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
576 /* my god, how did we end up here. is there a 'generic font' function
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
577 * in gdk? that would be incredibly useful here. there's gotta be a
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
578 * better way to do this. */
77404a4692b1 [gaim-migrate @ 315]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 286
diff changeset
579
306
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
580 /* well, if they can't do any of the fonts above, they'll take whatever
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
581 * they can get, and be happy about it, damn it. :) */
852
836d5a02a35c [gaim-migrate @ 862]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 851
diff changeset
582 load_font_with_cache("*", "*", '*', 0, &my_font);
306
a8f964718837 [gaim-migrate @ 316]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 305
diff changeset
583 return my_font;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
584 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
585
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
586
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
587 /* 'Borrowed' from ETerm */
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
588 GdkWindow *get_desktop_window(GtkWidget * widget)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
589 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
590 #ifndef _WIN32
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
591 GdkAtom prop,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
592 type,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
593 prop2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
594 int format;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
595 gint length;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
596 guchar *data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
597 GtkWidget *w;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
598
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
599 prop = gdk_atom_intern("_XROOTPMAP_ID", 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
600 prop2 = gdk_atom_intern("_XROOTCOLOR_PIXEL", 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
601
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
602 if (prop == None && prop2 == None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
603 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
604 return NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
605 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
606
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
607
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
608
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
609 for (w = widget; w; w = w->parent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
610 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
611
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
612 if (prop != None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
613 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
614 gdk_property_get(w->window, prop, AnyPropertyType, 0L, 1L, 0,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
615 &type, &format, &length, &data);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
616 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
617 else if (prop2 != None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
618 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
619 gdk_property_get(w->window, prop2, AnyPropertyType, 0L, 1L, 0,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
620 &type, &format, &length, &data);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
621 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
622 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
623 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
624 continue;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
625 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
626 if (type != None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
627 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
628 return (w->window);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
629 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
630 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
631 #endif
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
632 return NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
633
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
634 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
635
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
636
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
637
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
638 GdkPixmap *get_desktop_pixmap(GtkWidget * widget)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
639 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
640 #ifndef _WIN32
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
641 GdkPixmap *p;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
642 GdkAtom prop,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
643 type,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
644 prop2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
645 int format;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
646 gint length;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
647 guint32 id;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
648 guchar *data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
649
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
650 prop = gdk_atom_intern("_XROOTPMAP_ID", 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
651 prop2 = gdk_atom_intern("_XROOTCOLOR_PIXEL", 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
652
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
653
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
654 if (prop == None && prop2 == None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
655 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
656 return NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
657 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
658
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
659 if (prop != None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
660 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
661 gdk_property_get(get_desktop_window(widget), prop, AnyPropertyType, 0L,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
662 1L, 0, &type, &format, &length, &data);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
663 if (type == XA_PIXMAP)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
664 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
665 id = data[0];
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
666 id += data[1] << 8;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
667 id += data[2] << 16;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
668 id += data[3] << 24;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
669 p = gdk_pixmap_foreign_new(id);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
670 return p;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
671 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
672 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
673 if (prop2 != None)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
674 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
675
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
676 /* XGetWindowProperty(Xdisplay, desktop_window, prop2, 0L, 1L, False, AnyPropertyType,
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
677 &type, &format, &length, &after, &data);*/
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
678
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
679 /* if (type == XA_CARDINAL) {*/
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
680 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
681 * D_PIXMAP((" Solid color not yet supported.\n"));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
682 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
683
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
684 /* return NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
685 }*/
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
686 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
687 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
688 * D_PIXMAP(("No suitable attribute found.\n"));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
689 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
690 #endif
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
691 return NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
692 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
693
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
694
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
695 static void clear_focus_area(GtkHtml * html,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
696 gint area_x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
697 gint area_y, gint area_width, gint area_height)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
698 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
699 GtkWidget *widget = GTK_WIDGET(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
700 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
701 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
702
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
703 gint ythick = BORDER_WIDTH + widget->style->klass->ythickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
704 gint xthick = BORDER_WIDTH + widget->style->klass->xthickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
705
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
706 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
707 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
708
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
709 if (html->frozen > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
710 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
711
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
712 if (html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
713 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
714 if (html->pm == NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
715 html->pm = get_desktop_pixmap(widget);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
716
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
717 if (html->pm == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
718 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
719
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
720 if (html->bg_gc == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
721 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
722 GdkGCValues values;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
723
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
724 values.tile = html->pm;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
725 values.fill = GDK_TILED;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
726
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
727 html->bg_gc = gdk_gc_new_with_values(html->html_area, &values,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
728 GDK_GC_FILL | GDK_GC_TILE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
729
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
730 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
731
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
732 gdk_window_get_deskrelative_origin(widget->window, &x, &y);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
733
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
734 gdk_draw_pixmap(widget->window, html->bg_gc, html->pm,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
735 x + area_x, y + area_y, area_x, area_y, area_width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
736 area_height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
737
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
738
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
739 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
740 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
741 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
742 gdk_window_get_size(widget->style->bg_pixmap[GTK_STATE_NORMAL], &width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
743 &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
744
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
745 gdk_gc_set_ts_origin(html->bg_gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
746 (-html->xoffset + xthick) % width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
747 (-html->yoffset + ythick) % height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
748
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
749 gdk_draw_rectangle(widget->window, html->bg_gc, TRUE,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
750 area_x, area_y, area_width, area_height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
751 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
752 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
753
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
754 static void gtk_html_draw_focus(GtkWidget * widget)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
755 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
756 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
757 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
758 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
759 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
760 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
761
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
762 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
763 g_return_if_fail(GTK_IS_HTML(widget));
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
764
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
765 html = GTK_HTML(widget);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
766
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
767 if (GTK_WIDGET_DRAWABLE(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
768 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
769 gint ythick = widget->style->klass->ythickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
770 gint xthick = widget->style->klass->xthickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
771 gint xextra = BORDER_WIDTH;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
772 gint yextra = BORDER_WIDTH;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
773
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
774 x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
775 y = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
776 width = widget->allocation.width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
777 height = widget->allocation.height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
778
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
779 if (GTK_WIDGET_HAS_FOCUS(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
780 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
781 x += 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
782 y += 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
783 width -= 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
784 height -= 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
785 xextra -= 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
786 yextra -= 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
787
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
788 gtk_paint_focus(widget->style, widget->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
789 NULL, widget, "text",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
790 0, 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
791 widget->allocation.width - 1,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
792 widget->allocation.height - 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
793 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
794
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
795 gtk_paint_shadow(widget->style, widget->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
796 GTK_STATE_NORMAL, GTK_SHADOW_IN,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
797 NULL, widget, "text", x, y, width, height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
798
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
799 x += xthick;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
800 y += ythick;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
801 width -= 2 * xthick;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
802 height -= 2 * ythick;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
803
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
804
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
805 if (widget->style->bg_pixmap[GTK_STATE_NORMAL] || html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
806 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
807 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
808 * top rect
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
809 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
810 clear_focus_area(html, x, y, width, yextra);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
811 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
812 * left rect
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
813 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
814 clear_focus_area(html, x, y + yextra,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
815 xextra, y + height - 2 * yextra);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
816 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
817 * right rect
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
818 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
819 clear_focus_area(html, x + width - xextra, y + yextra,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
820 xextra, height - 2 * ythick);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
821 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
822 * bottom rect
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
823 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
824 clear_focus_area(html, x, x + height - yextra, width, yextra);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
825 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
826 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
827 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
828
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
829 static void gtk_html_size_request(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
830 GtkRequisition * requisition)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
831 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
832 gint xthickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
833 gint ythickness;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
834 gint char_height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
835 gint char_width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
836
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
837 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
838 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
839 g_return_if_fail(requisition != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
840
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
841 xthickness = widget->style->klass->xthickness + BORDER_WIDTH;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
842 ythickness = widget->style->klass->ythickness + BORDER_WIDTH;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
843
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
844 char_height = MIN_HTML_HEIGHT_LINES * (widget->style->font->ascent +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
845 widget->style->font->descent);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
846
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
847 char_width = MIN_HTML_WIDTH_LINES * (gdk_text_width(widget->style->font,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
848 "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
849 26) / 26);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
850
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
851 requisition->width = char_width + xthickness * 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
852 requisition->height = char_height + ythickness * 2;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
853 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
854
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
855 static void gtk_html_size_allocate(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
856 GtkAllocation * allocation)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
857 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
858 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
859
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
860 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
861 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
862 g_return_if_fail(allocation != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
863
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
864 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
865
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
866 widget->allocation = *allocation;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
867 if (GTK_WIDGET_REALIZED(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
868 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
869 gdk_window_move_resize(widget->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
870 allocation->x, allocation->y,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
871 allocation->width, allocation->height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
872
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
873 gdk_window_move_resize(html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
874 widget->style->klass->xthickness + BORDER_WIDTH,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
875 widget->style->klass->ythickness + BORDER_WIDTH,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
876 MAX(1, (gint) widget->allocation.width -
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
877 (gint) (widget->style->klass->xthickness +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
878 (gint) BORDER_WIDTH) * 2),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
879 MAX(1, (gint) widget->allocation.height -
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
880 (gint) (widget->style->klass->ythickness +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
881 (gint) BORDER_WIDTH) * 2));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
882
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
883 resize_html(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
884 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
885 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
886
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
887 static void gtk_html_draw(GtkWidget * widget, GdkRectangle * area)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
888 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
889 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
890 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
891 g_return_if_fail(area != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
892
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
893 if (GTK_WIDGET_DRAWABLE(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
894 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
895 expose_html(GTK_HTML(widget), area, TRUE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
896 gtk_widget_draw_focus(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
897 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
898 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
899
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
900
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
901 static gint gtk_html_expose(GtkWidget * widget, GdkEventExpose * event)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
902 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
903 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
904
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
905 g_return_val_if_fail(widget != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
906 g_return_val_if_fail(GTK_IS_HTML(widget), FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
907 g_return_val_if_fail(event != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
908
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
909 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
910
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
911 if (event->window == html->html_area)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
912 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
913 expose_html(html, &event->area, TRUE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
914 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
915 else if (event->count == 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
916 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
917 gtk_widget_draw_focus(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
918 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
919
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
920 return FALSE;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
921
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
922 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
923
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
924
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
925 static gint gtk_html_selection_clear(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
926 GdkEventSelection * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
927 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
928 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
929
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
930 g_return_val_if_fail(widget != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
931 g_return_val_if_fail(GTK_IS_HTML(widget), FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
932 g_return_val_if_fail(event != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
933
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
934 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
935 * Let the selection handling code know that the selection
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
936 * * has been changed, since we've overriden the default handler
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
937 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
938 if (!gtk_selection_clear(widget, event))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
939 return FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
940
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
941 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
942
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
943 if (event->selection == GDK_SELECTION_PRIMARY)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
944 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
945 if (html->selected_text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
946 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
947 GList *hbits = html->html_bits;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
948 GtkHtmlBit *hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
949
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
950 g_free(html->selected_text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
951 html->selected_text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
952 html->start_sel = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
953 html->end_sel = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
954 html->num_start = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
955 html->num_end = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
956 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
957 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
958 hb = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
959 if (hb->was_selected)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
960 gtk_html_draw_bit(html, hb, 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
961 hbits = hbits->prev;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
962 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
963 hbits = g_list_last(html->html_bits);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
964 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
965 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
966
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
967 return TRUE;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
968 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
969
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
970
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
971
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
972 static void gtk_html_selection_get(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
973 GtkSelectionData * selection_data,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
974 guint sel_info, guint32 time)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
975 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
976 gchar *str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
977 gint len;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
978 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
979
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
980 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
981 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
982
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
983 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
984
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
985
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
986 if (selection_data->selection != GDK_SELECTION_PRIMARY)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
987 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
988
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
989 str = html->selected_text;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
990
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
991 if (!str)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
992 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
993
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
994 len = strlen(str);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
995
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
996 if (sel_info == TARGET_STRING)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
997 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
998 gtk_selection_data_set(selection_data,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
999 GDK_SELECTION_TYPE_STRING,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1000 8 * sizeof(gchar), (guchar *) str, len);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1001 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1002 else if ((sel_info == TARGET_TEXT) || (sel_info == TARGET_COMPOUND_TEXT))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1003 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1004 guchar *text;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1005 GdkAtom encoding;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1006 gint format;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1007 gint new_length;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1008
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1009 gdk_string_to_compound_text(str, &encoding, &format, &text,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1010 &new_length);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1011 gtk_selection_data_set(selection_data, encoding, format, text,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1012 new_length);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1013 gdk_free_compound_text(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1014 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1015
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1016
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1017
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1018 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1019
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1020 static void do_select(GtkHtml * html, int x, int y)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1021 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1022 GList *hbits = g_list_last(html->html_bits);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1023 int epos,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1024 spos;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1025 GtkHtmlBit *hb;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1026
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1027 if (!hbits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1028 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1029
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1030 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1031
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1032 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1033 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1034 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1035 if (hb->type == HTML_BIT_TEXT)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1036 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1037 hbits = hbits->prev;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1038 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1039
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1040 if (!hb)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1041 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1042
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1043
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1044 if (y > hb->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1045 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1046 html->num_end = strlen(hb->text) - 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1047 html->end_sel = hb;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1048 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1049 else if (y < 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1050 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1051 html->num_end = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1052 html->end_sel = (GtkHtmlBit *) html->html_bits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1053 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1054 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1055 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1056 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1057 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1058 if ((y < hb->y && y > (hb->y - hb->height)) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1059 (x > hb->x + hb->width))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1060 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1061 if (hb->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1062 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1063 html->num_end = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1064 html->end_sel = hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1065 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1066 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1067
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1068 html->num_end = strlen(hb->text) - 1;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1069 html->end_sel = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1070 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1071 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1072 else if ((x > hb->x && x < (hb->x + hb->width)) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1073 (y < hb->y && y > (hb->y - hb->height)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1074 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1075 int i,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1076 len;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1077 int w = x - hb->x;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1078
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1079 if (hb->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1080 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1081 html->num_end = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1082 html->end_sel = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1083 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1084 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1085
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1086 len = strlen(hb->text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1087
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1088 for (i = 1; i <= len; i++)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1089 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1090 if (gdk_text_measure(hb->font, hb->text, i) > w)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1091 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1092 html->num_end = i - 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1093 html->end_sel = hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1094 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1095 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1096 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1097 break;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1098 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1099 hbits = hbits->prev;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1100 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1101
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1102 if (html->end_sel == NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1103 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1104 if (html->start_sel == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1105 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1106 html->start_sel = html->end_sel;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1107 html->num_start = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1108 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1109
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1110 epos = g_list_index(html->html_bits, html->end_sel);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1111 spos = g_list_index(html->html_bits, html->start_sel);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1112 g_free(html->selected_text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1113 html->selected_text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1114
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1115 if (epos == spos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1116 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1117 char *str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1118 if (html->start_sel->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1119 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1120 html->selected_text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1121 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1122 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1123 if (html->num_end == html->num_start)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1124 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1125 str = g_malloc(2);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1126 if (strlen(html->start_sel->text))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1127 str[0] = html->start_sel->text[html->num_end];
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1128 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1129 str[0] = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1130 str[1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1131 gtk_html_draw_bit(html, html->start_sel, 0);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1132 html->selected_text = str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1133 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1134 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1135 {
79
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
1136 size_t st,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1137 en;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1138 char *str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1139 if (html->num_end > html->num_start)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1140 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1141 en = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1142 st = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1143 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1144 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1145 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1146 en = html->num_start;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1147 st = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1148 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1149
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1150 str = g_malloc(en - st + 2);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1151 strncpy(str, html->start_sel->text + st, (en - st + 1));
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1152 str[en - st + 1] = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1153 gtk_html_draw_bit(html, html->start_sel, 0);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1154 html->selected_text = str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1155
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1156 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1157 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1158 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1159 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1160 GtkHtmlBit *shb,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1161 *ehb;
79
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
1162 size_t en,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1163 st;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1164 int len,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1165 nlen;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1166 char *str;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1167 if (epos > spos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1168 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1169 shb = html->start_sel;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1170 ehb = html->end_sel;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1171 en = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1172 st = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1173 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1174 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1175 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1176 shb = html->end_sel;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1177 ehb = html->start_sel;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1178 en = html->num_start;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1179 st = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1180 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1181
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1182 hbits = g_list_find(html->html_bits, shb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1183
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1184 if (!hbits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1185 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1186
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1187 if (shb->type == HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1188 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1189 len = strlen(shb->text) - st + 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1190 str = g_malloc(len);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1191 strcpy(str, shb->text + st);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1192 str[len - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1193 gtk_html_draw_bit(html, shb, 0);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1194 if (shb->newline)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1195 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1196 len += 1;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1197 str = g_realloc(str, len);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1198 str[len - 2] = '\n';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1199 str[len - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1200 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1201 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1202 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1203 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1204 len = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1205 str = g_malloc(1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1206 str[0] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1207 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1208 if (hbits->next == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1209 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1210 html->selected_text = str;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1211 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1212 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1213
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1214
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1215 hbits = hbits->next;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1216 while (1)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1217 { /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1218 * Yah I know is dangerous :P
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1219 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1220 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1221 if (hb->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1222 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1223 if (hb == ehb)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1224 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1225 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1226 continue;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1227 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1228 if (hb != ehb)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1229 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1230 nlen = len + strlen(hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1231 str = g_realloc(str, nlen);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1232 strcpy(str + (len - 1), hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1233 len = nlen;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1234 str[len - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1235 gtk_html_draw_bit(html, hb, 0);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1236 if (hb->newline)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1237 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1238 len += 1;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1239 str = g_realloc(str, len);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1240 str[len - 2] = '\n';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1241 str[len - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1242 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1243 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1244 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1245 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1246 nlen = len + en + 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1247 str = g_realloc(str, nlen);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1248 strncpy(str + (len - 1), hb->text, en + 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1249 len = nlen;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1250 str[len - 1] = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1251
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1252 gtk_html_draw_bit(html, hb, 0);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1253 if (hb->newline && en == strlen(hb->text))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1254 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1255 len += 1;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1256 str = g_realloc(str, len);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1257 str[len - 2] = '\n';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1258 str[len - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1259 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1260 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1261 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1262 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1263 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1264 html->selected_text = str;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1265 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1266
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1267 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1268
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1269 static gint scroll_timeout(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1270 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1271 GdkEventMotion event;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1272 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1273 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1274 GdkModifierType mask;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1275
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1276 html->timer = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1277 gdk_window_get_pointer(html->html_area, &x, &y, &mask);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1278
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1279 if (mask & GDK_BUTTON1_MASK)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1280 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1281 event.is_hint = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1282 event.x = x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1283 event.y = y;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1284 event.state = mask;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1285
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1286 gtk_html_motion_notify(GTK_WIDGET(html), &event);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1287 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1288
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1289 return FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1290
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1291 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1292
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1293
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1294 static gint gtk_html_tooltip_paint_window(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1295 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1296 GtkStyle *style;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1297 gint y,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1298 baseline_skip,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1299 gap;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1300
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1301 style = html->tooltip_window->style;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1302
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1303 gap = (style->font->ascent + style->font->descent) / 4;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1304 if (gap < 2)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1305 gap = 2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1306 baseline_skip = style->font->ascent + style->font->descent + gap;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1307
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1308 if (!html->tooltip_hb)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1309 return FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1310
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1311 gtk_paint_flat_box(style, html->tooltip_window->window,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1312 GTK_STATE_NORMAL, GTK_SHADOW_OUT,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1313 NULL, GTK_WIDGET(html->tooltip_window), "tooltip",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1314 0, 0, -1, -1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1315
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1316 y = style->font->ascent + 4;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1317
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1318 gtk_paint_string(style, html->tooltip_window->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1319 GTK_STATE_NORMAL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1320 NULL, GTK_WIDGET(html->tooltip_window), "tooltip",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1321 4, y, "HTML Link:");
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1322 y += baseline_skip;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1323 gtk_paint_string(style, html->tooltip_window->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1324 GTK_STATE_NORMAL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1325 NULL, GTK_WIDGET(html->tooltip_window), "tooltip",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1326 4, y, html->tooltip_hb->url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1327
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1328 return FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1329
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1330
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1331 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1332
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1333 static gint gtk_html_tooltip_timeout(gpointer data)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1334 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1335 GtkHtml *html = (GtkHtml *) data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1336
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1337
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1338 GDK_THREADS_ENTER();
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1339
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1340 if (html->tooltip_hb && GTK_WIDGET_DRAWABLE(GTK_WIDGET(html)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1341 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1342 GtkWidget *widget;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1343 GtkStyle *style;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1344 gint gap,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1345 x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1346 y,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1347 w,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1348 h,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1349 scr_w,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1350 scr_h,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1351 baseline_skip;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1352
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1353 if (html->tooltip_window)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1354 gtk_widget_destroy(html->tooltip_window);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1355
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1356 html->tooltip_window = gtk_window_new(GTK_WINDOW_POPUP);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1357 gtk_widget_set_app_paintable(html->tooltip_window, TRUE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1358 gtk_window_set_policy(GTK_WINDOW(html->tooltip_window), FALSE, FALSE,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1359 TRUE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1360 gtk_widget_set_name(html->tooltip_window, "gtk-tooltips");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1361 gtk_signal_connect_object(GTK_OBJECT(html->tooltip_window),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1362 "expose_event",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1363 GTK_SIGNAL_FUNC
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1364 (gtk_html_tooltip_paint_window),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1365 GTK_OBJECT(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1366 gtk_signal_connect_object(GTK_OBJECT(html->tooltip_window), "draw",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1367 GTK_SIGNAL_FUNC
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1368 (gtk_html_tooltip_paint_window),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1369 GTK_OBJECT(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1370
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1371 gtk_widget_ensure_style(html->tooltip_window);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1372 style = html->tooltip_window->style;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1373
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1374 widget = GTK_WIDGET(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1375
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1376 scr_w = gdk_screen_width();
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1377 scr_h = gdk_screen_height();
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1378
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1379 gap = (style->font->ascent + style->font->descent) / 4;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1380 if (gap < 2)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1381 gap = 2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1382 baseline_skip = style->font->ascent + style->font->descent + gap;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1383
353
a4df8f1cc61a [gaim-migrate @ 363]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 349
diff changeset
1384 w = 8 + MAX(gdk_string_width(style->font, _("HTML Link:")),
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1385 gdk_string_width(style->font, html->tooltip_hb->url));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1386 ;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1387 h = 8 - gap;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1388 h += (baseline_skip * 2);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1389
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1390 gdk_window_get_pointer(NULL, &x, &y, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1391 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1392 * gdk_window_get_origin (widget->window, NULL, &y);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1393 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1394 if (GTK_WIDGET_NO_WINDOW(widget))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1395 y += widget->allocation.y;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1396
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1397 x -= ((w >> 1) + 4);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1398
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1399 if ((x + w) > scr_w)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1400 x -= (x + w) - scr_w;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1401 else if (x < 0)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1402 x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1403
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1404 if ((y + h + 4) > scr_h)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1405 y =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1406 y - html->tooltip_hb->font->ascent +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1407 html->tooltip_hb->font->descent;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1408 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1409 y =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1410 y + html->tooltip_hb->font->ascent +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1411 html->tooltip_hb->font->descent;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1412
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1413 gtk_widget_set_usize(html->tooltip_window, w, h);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1414 gtk_widget_popup(html->tooltip_window, x, y);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1415
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1416 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1417
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1418 html->tooltip_timer = -1;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1419
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1420 GDK_THREADS_LEAVE();
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1421
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1422 return FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1423 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1424
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1425
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1426 static gint gtk_html_leave_notify(GtkWidget * widget, GdkEventCrossing * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1427 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1428 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1429
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1430 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1431
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1432 if (html->tooltip_timer != -1)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1433 gtk_timeout_remove(html->tooltip_timer);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1434 if (html->tooltip_window)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1435 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1436 gtk_widget_destroy(html->tooltip_window);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1437 html->tooltip_window = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1438 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1439
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1440
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1441 html->tooltip_hb = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1442 return TRUE;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1443 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1444
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1445
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1446 static gint gtk_html_motion_notify(GtkWidget * widget, GdkEventMotion * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1447 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1448 int x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1449 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1450 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1451 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1452 GdkModifierType state;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1453 int realx,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1454 realy;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1455 GtkHtml *html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1456
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1457 if (event->is_hint)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1458 gdk_window_get_pointer(event->window, &x, &y, &state);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1459 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1460 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1461 x = event->x;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1462 y = event->y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1463 state = event->state;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1464 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1465
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1466 gdk_window_get_size(html->html_area, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1467
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1468 realx = x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1469 realy = y + html->yoffset;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1470
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1471
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1472 if (state & GDK_BUTTON1_MASK)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1473 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1474 if (realx != html->start_sel_x || realy != html->start_sel_y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1475 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1476 char *tmp = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1477
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1478 if (y < 0 || y > height)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1479 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1480 int diff;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1481 if (html->timer == 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1482 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1483 html->timer = gtk_timeout_add(100,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1484 (GtkFunction) scroll_timeout,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1485 html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1486 if (y < 0)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1487 diff = y / 2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1488 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1489 diff = (y - height) / 2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1490
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1491 if (html->vadj->value + diff >
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1492 html->vadj->upper - height + 20)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1493 gtk_adjustment_set_value(html->vadj,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1494 html->vadj->upper - height +
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1495 20);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1496 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1497 gtk_adjustment_set_value(html->vadj,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1498 html->vadj->value + diff);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1499
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1500 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1501 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1502
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1503 if (html->selected_text != NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1504 tmp = g_strdup(html->selected_text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1505 do_select(html, realx, realy);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1506 if (tmp)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1507 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1508 if (!html->selected_text || strcmp(tmp, html->selected_text))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1509 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1510 GtkHtmlBit *hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1511 GList *hbits = html->html_bits;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1512 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1513 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1514 hb = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1515 if (hb->was_selected)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1516 gtk_html_draw_bit(html, hb, 0);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1517 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1518 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1519 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1520 g_free(tmp);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1521 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1522 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1523 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1524 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1525 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1526 GtkHtmlBit *hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1527 GList *urls;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1528
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1529 urls = html->urls;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1530 while (urls)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1531 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1532 hb = (GtkHtmlBit *) urls->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1533 if ((realx > hb->x && realx < (hb->x + hb->width)) &&
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1534 (realy < hb->y && realy > (hb->y - hb->height)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1535 {
26
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1536 GdkCursor *cursor = NULL;
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1537
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1538 if (html->tooltip_hb != hb)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1539 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1540 html->tooltip_hb = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1541 if (html->tooltip_timer != -1)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1542 gtk_timeout_remove(html->tooltip_timer);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1543 if (html->tooltip_window)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1544 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1545 gtk_widget_destroy(html->tooltip_window);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1546 html->tooltip_window = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1547 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1548 html->tooltip_timer =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1549 gtk_timeout_add(HTML_TOOLTIP_DELAY,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1550 gtk_html_tooltip_timeout, html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1551 }
26
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1552
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1553 cursor = gdk_cursor_new(GDK_HAND2);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1554 gdk_window_set_cursor(html->html_area, cursor);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1555 gdk_cursor_destroy(cursor);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
1556
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1557 return TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1558 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1559 urls = urls->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1560 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1561 if (html->tooltip_timer != -1)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1562 gtk_timeout_remove(html->tooltip_timer);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1563 if (html->tooltip_window)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1564 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1565 gtk_widget_destroy(html->tooltip_window);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1566 html->tooltip_window = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1567 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1568
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1569
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1570 html->tooltip_hb = NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1571 gdk_window_set_cursor(html->html_area, NULL);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1572
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1573
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1574 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1575
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1576 return TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1577 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1578
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1579 static gint gtk_html_button_release(GtkWidget * widget, GdkEventButton * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1580 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1581 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1582
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1583 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1584
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1585 if (html->frozen > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1586 return TRUE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1587
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1588 if (event->button == 1)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1589 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1590 int realx,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1591 realy;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1592 GtkHtmlBit *hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1593 GList *urls = html->urls;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1594
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1595 realx = event->x;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1596 realy = event->y + html->yoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1597 if (realx != html->start_sel_x || realy != html->start_sel_y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1598 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1599 if (gtk_selection_owner_set(widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1600 GDK_SELECTION_PRIMARY, event->time))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1601 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1602 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1603 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1604 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1605 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1606 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1607 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1608 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1609 if (gdk_selection_owner_get(GDK_SELECTION_PRIMARY) ==
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1610 widget->window)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1611 gtk_selection_owner_set(NULL, GDK_SELECTION_PRIMARY,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1612 event->time);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1613
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1614
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1615 while (urls)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1616 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1617 void open_url_nw(GtkWidget * w, char *url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1618 hb = (GtkHtmlBit *) urls->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1619 if ((realx > hb->x && realx < (hb->x + hb->width)) &&
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1620 (realy < hb->y && realy > (hb->y - hb->height)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1621 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1622 open_url_nw(NULL, hb->url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1623 // else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1624 // open_url(NULL, hb->url);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1625 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1626 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1627 urls = urls->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1628 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1629 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1630 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1631 return TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1632 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1633
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1634
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1635
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1636 static gint gtk_html_button_press(GtkWidget * widget, GdkEventButton * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1637 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1638 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1639 gfloat value;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1640
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1641
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1642 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1643 value = html->vadj->value;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1644
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1645 if (html->frozen > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1646 return TRUE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1647
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1648 if (event->button == 4)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1649 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1650 value -= html->vadj->step_increment;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1651 if (value < html->vadj->lower)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1652 value = html->vadj->lower;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1653 gtk_adjustment_set_value(html->vadj, value);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1654 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1655 else if (event->button == 5)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1656 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1657 value += html->vadj->step_increment;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1658 if (value > html->vadj->upper)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1659 value = html->vadj->upper;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1660 gtk_adjustment_set_value(html->vadj, value);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1661
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1662 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1663 else if (event->button == 1)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1664 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1665 GList *hbits = g_list_last(html->html_bits);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1666 int realx,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1667 realy;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1668 GtkHtmlBit *hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1669
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1670 realx = event->x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1671 realy = event->y + html->yoffset;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1672
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1673 html->start_sel_x = realx;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1674 html->start_sel_y = realy;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1675
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1676 if (!hbits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1677 return TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1678
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1679 if (html->selected_text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1680 {
894
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1681 gboolean forcedraw = FALSE;
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1682 hbits = html->html_bits;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1683 g_free(html->selected_text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1684 html->selected_text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1685 html->start_sel = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1686 html->end_sel = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1687 html->num_start = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1688 html->num_end = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1689 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1690 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1691 hb = (GtkHtmlBit *) hbits->data;
894
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1692 if (hb->was_selected || forcedraw) {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1693 gtk_html_draw_bit(html, hb, 1);
894
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1694 forcedraw = TRUE;
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1695 }
b5b3aa06111d [gaim-migrate @ 904]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 871
diff changeset
1696 hbits = hbits->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1697 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1698 hbits = g_list_last(html->html_bits);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1699 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1700
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1701 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1702 if (realy > hb->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1703 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1704 if (hb->text)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1705 html->num_start = strlen(hb->text) - 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1706 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1707 html->num_start = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1708 html->start_sel = hb;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1709 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1710 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1711 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1712 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1713 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1714 if ((realy < hb->y && realy > (hb->y - hb->height)) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1715 (realx > hb->x + hb->width))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1716 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1717 if (hb->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1718 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1719 html->num_end = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1720 html->end_sel = hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1721 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1722 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1723
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1724 if (hb->text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1725 html->num_start = strlen(hb->text) - 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1726 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1727 html->num_start = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1728
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1729 html->start_sel = hb;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1730 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1731 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1732 else if ((realx > hb->x && realx < (hb->x + hb->width)) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1733 (realy < hb->y && realy > (hb->y - hb->height)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1734 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1735 int i,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1736 len;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1737 int w = realx - hb->x;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1738
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1739 if (hb->type != HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1740 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1741 html->num_end = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1742 html->end_sel = hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1743 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1744 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1745
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1746 if (hb->text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1747 len = strlen(hb->text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1748 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1749 len = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1750
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1751 for (i = 1; i <= len; i++)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1752 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1753 if (gdk_text_measure(hb->font, hb->text, i) > w)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1754 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1755 html->num_start = i - 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1756 html->start_sel = hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1757 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1758 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1759 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1760 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1761 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1762 hbits = hbits->prev;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1763 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1764 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1765 else if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1766 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1767 GtkHtmlBit *hb = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1768 int realx,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1769 realy;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1770 GList *urls;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1771
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1772 realx = event->x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1773 realy = event->y + html->yoffset;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1774
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1775 urls = html->urls;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1776 while (urls)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1777 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1778 hb = (GtkHtmlBit *) urls->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1779 if ((realx > hb->x && realx < (hb->x + hb->width)) &&
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1780 (realy < hb->y && realy > (hb->y - hb->height)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1781 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1782 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1783 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1784 urls = urls->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1785 hb = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1786 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1787
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1788 if (hb != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1789 {
69
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1790
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1791 GtkWidget *menu, *button;
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1792
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1793 menu = gtk_menu_new();
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1794
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1795 if (web_browser == BROWSER_NETSCAPE) {
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1796
353
a4df8f1cc61a [gaim-migrate @ 363]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 349
diff changeset
1797 button = gtk_menu_item_new_with_label(_("Open URL in existing window"));
69
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1798 gtk_signal_connect(GTK_OBJECT(button), "activate",
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1799 GTK_SIGNAL_FUNC(open_url), hb->url);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1800 gtk_menu_append(GTK_MENU(menu), button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1801 gtk_widget_show(button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1802
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1803 }
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1804
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1805
353
a4df8f1cc61a [gaim-migrate @ 363]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 349
diff changeset
1806 button = gtk_menu_item_new_with_label(_("Open URL in new window"));
69
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1807 gtk_signal_connect(GTK_OBJECT(button), "activate",
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1808 GTK_SIGNAL_FUNC(open_url_nw), hb->url);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1809 gtk_menu_append(GTK_MENU(menu), button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1810 gtk_widget_show(button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1811
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1812 if (web_browser == BROWSER_NETSCAPE) {
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1813
353
a4df8f1cc61a [gaim-migrate @ 363]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 349
diff changeset
1814 button = gtk_menu_item_new_with_label(_("Add URL as bookmark"));
69
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1815 gtk_signal_connect(GTK_OBJECT(button), "activate",
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1816 GTK_SIGNAL_FUNC(add_bookmark), hb->url);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1817 gtk_menu_append(GTK_MENU(menu), button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1818 gtk_widget_show(button);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1819
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1820 }
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1821
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1822 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1823 event->button, event->time);
3b479e2700c9 [gaim-migrate @ 79]
Rob Flynn <gaim@robflynn.com>
parents: 53
diff changeset
1824
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1825 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1826 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1827
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1828 return TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1829 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1830
871
75b05911234a [gaim-migrate @ 881]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 869
diff changeset
1831
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1832 static void gtk_html_draw_bit(GtkHtml * html, GtkHtmlBit * hb, int redraw)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1833 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1834 int mypos,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1835 epos,
871
75b05911234a [gaim-migrate @ 881]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 869
diff changeset
1836 spos;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1837 GdkGC *gc = html->gc;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1838 int shift;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1839 GtkStateType selected_state;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1840 GtkWidget *widget = GTK_WIDGET(html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1841 GdkRectangle area;
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
1842 GList *hbits;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
1843 GtkHtmlBit *hbit;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
1844
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1845 if (html->frozen > 0)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1846 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1847
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
1848 hbits = g_list_find(html->html_bits, hb);
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
1849
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1850 if (hb->type == HTML_BIT_TEXT)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1851 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1852
716
0995382d0c46 [gaim-migrate @ 726]
Todd Kulesza <fflewddur>
parents: 677
diff changeset
1853 if (!(hb->text))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1854 return;
720
8b3412f3ac2a [gaim-migrate @ 730]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 716
diff changeset
1855 /* this is possible, don't comment it out >:P */
8b3412f3ac2a [gaim-migrate @ 730]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 716
diff changeset
1856 if (!strlen(hb->text))
8b3412f3ac2a [gaim-migrate @ 730]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 716
diff changeset
1857 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1858
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1859 mypos = g_list_index(html->html_bits, hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1860 epos = g_list_index(html->html_bits, html->end_sel);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1861 spos = g_list_index(html->html_bits, html->start_sel);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1862
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1863 if (((html->end_sel == NULL) || (html->start_sel == NULL)) ||
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1864 ((epos < mypos) && (spos < mypos)) ||
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1865 ((epos > mypos) && (spos > mypos)))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1866 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1867 selected_state = GTK_STATE_NORMAL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1868 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1869 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1870 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1871 selected_state = GTK_STATE_SELECTED;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1872 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1873
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1874 gdk_text_extents(hb->font, hb->text, 1, &shift, NULL, NULL, NULL, NULL);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1875
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1876 if (selected_state == GTK_STATE_SELECTED)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1877 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1878 int schar = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1879 echar = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1880 int startx = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1881 xwidth = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1882
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1883 if (epos > spos ||
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1884 (epos == spos && html->num_end >= html->num_start))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1885 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1886 if (mypos == epos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1887 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1888 echar = html->num_end;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1889 xwidth =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1890 gdk_text_width(hb->font, hb->text, html->num_end + 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1891 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1892 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1893 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1894 echar = strlen(hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1895 xwidth = hb->width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1896 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1897 if (mypos == spos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1898 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1899 schar = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1900 startx =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1901 gdk_text_width(hb->font, hb->text, html->num_start);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1902 xwidth -= startx;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1903 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1904 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1905 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1906 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1907 if (mypos == spos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1908 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1909 echar = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1910 xwidth =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1911 gdk_text_width(hb->font, hb->text,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1912 html->num_start + 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1913 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1914 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1915 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1916 echar = strlen(hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1917 xwidth = hb->width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1918 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1919 if (mypos == epos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1920 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1921 schar = html->num_end;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1922 startx =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1923 gdk_text_width(hb->font, hb->text, html->num_end);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1924 xwidth -= startx;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1925 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1926 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1927
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1928 if (!redraw && echar == hb->sel_e && schar == hb->sel_s)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1929 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1930
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1931 hb->sel_e = echar;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1932 hb->sel_s = schar;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1933
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1934 startx += hb->x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1935
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1936 area.x = hb->x - html->xoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1937 area.y = hb->y - hb->height + 3 - html->yoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1938 area.width = hb->width + 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1939 area.height = hb->height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1940 clear_area(html, &area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1941
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1942 gtk_paint_flat_box(widget->style, html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1943 selected_state, GTK_SHADOW_NONE,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1944 NULL, widget, "text",
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1945 startx,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1946 hb->y - hb->height + 3 - html->yoffset,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1947 xwidth + 2, hb->height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1948 hb->was_selected = 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1949 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1950 else if (hb->was_selected)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1951 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1952 area.x = hb->x - html->xoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1953 area.y = hb->y - hb->height + 3 - html->yoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1954 area.width = hb->width + 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1955 area.height = hb->height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1956 clear_area(html, &area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1957
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1958 hb->sel_e = -1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1959 hb->sel_s = -1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1960
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1961 hb->was_selected = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1962 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1963
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1964 if (selected_state == GTK_STATE_SELECTED && (mypos == epos
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1965 || mypos == spos))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1966 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1967 char *s = hb->text;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1968 int num = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1969 width = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1970 fsel = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1971 esel = strlen(hb->text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1972 int lbearing,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1973 rbearing,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1974 w;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1975
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1976 if (epos > spos ||
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1977 (epos == spos && html->num_end >= html->num_start))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1978 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1979 if (mypos == epos)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1980 esel = html->num_end;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1981 if (mypos == spos)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1982 fsel = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1983 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1984 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1985 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1986 if (mypos == spos)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1987 esel = html->num_start;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1988 if (mypos == epos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1989 fsel = html->num_end;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1990 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1991
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1992 while (*s)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
1993 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1994
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1995 if (num < fsel || num > esel)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1996 selected_state = GTK_STATE_NORMAL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1997 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1998 selected_state = GTK_STATE_SELECTED;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1999 if (hb->fore != NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2000 gdk_gc_set_foreground(gc, hb->fore);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2001 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2002 gdk_gc_set_foreground(gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2003 &widget->style->fg[selected_state]);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2004
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2005 gdk_gc_set_font(gc, hb->font);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2006
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2007 gdk_text_extents(hb->font, s, 1, &lbearing, &rbearing, &w, NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2008 NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2009
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2010 gdk_draw_text(html->html_area, hb->font, gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2011 shift + hb->x + width, hb->y - html->yoffset, s,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2012 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2013
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2014 if (hb->uline)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2015 gdk_draw_line(html->html_area, gc, shift + hb->x + width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2016 hb->y - html->yoffset,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2017 shift + hb->x + width + w,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2018 hb->y - html->yoffset);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2019
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2020 if (hb->strike)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2021 gdk_draw_line(html->html_area, gc, shift + hb->x + width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2022 hb->y - html->yoffset - (hb->height / 3),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2023 shift + hb->x + width + w,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2024 hb->y - html->yoffset - (hb->height / 3));
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2025
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2026 width += w;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2027
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2028 s++;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2029 num++;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2030 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2031
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2032
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2033 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2034 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2035 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2036 /*my stuff here*/
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2037
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2038 if(!hb->was_selected)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2039 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2040 area.x = hb->x - html->xoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2041 area.y = hb->y - hb->height + 3 - html->yoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2042 area.width = hb->width + 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2043 area.height = hb->height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2044 clear_area(html, &area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2045 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2046
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2047 /*end my stuff*/
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2048
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2049
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2050 if (hb->text && hb->back != NULL) {
897
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2051 int hwidth, hheight, hei, tmpcnt;
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2052 hei = get_line_height(html, hb);
860
a8633715fb5b [gaim-migrate @ 870]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 853
diff changeset
2053 gdk_window_get_size(html->html_area, &hwidth, &hheight);
629
ce8d8608d05b [gaim-migrate @ 639]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 627
diff changeset
2054 gdk_gc_set_foreground(gc, hb->back);
635
2ad1a8234ef1 [gaim-migrate @ 645]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 632
diff changeset
2055 gdk_draw_rectangle(html->html_area, gc, TRUE /* filled */,
868
d828bdc3854b [gaim-migrate @ 878]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 860
diff changeset
2056 hb->x, hb->y - html->yoffset - hei - 6,
860
a8633715fb5b [gaim-migrate @ 870]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 853
diff changeset
2057 hwidth - shift - hb->x + 1, hei + hei + 2);
897
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2058 for (tmpcnt = 1; tmpcnt < hb->newline; tmpcnt++) {
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2059 int eoff = hei + hei + 2;
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2060 eoff *= tmpcnt;
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2061 gdk_draw_rectangle(html->html_area, gc, TRUE,
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2062 1, hb->y - html->yoffset - hei - 6 + eoff,
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2063 hwidth, hei + hei + 2);
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2064 }
629
ce8d8608d05b [gaim-migrate @ 639]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 627
diff changeset
2065 }
ce8d8608d05b [gaim-migrate @ 639]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 627
diff changeset
2066
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2067 if (hb->fore != NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2068 gdk_gc_set_foreground(gc, hb->fore);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2069 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2070 gdk_gc_set_foreground(gc, &widget->style->fg[selected_state]);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2071
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2072 gdk_gc_set_font(gc, hb->font);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2073
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2074 gdk_draw_string(html->html_area, hb->font, gc, shift + hb->x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2075 hb->y - html->yoffset, hb->text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2076 if (hb->uline)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2077 gdk_draw_line(html->html_area, gc, shift + hb->x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2078 hb->y - html->yoffset,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2079 hb->x + gdk_string_measure(hb->font, hb->text),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2080 hb->y - html->yoffset);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2081
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2082 if (hb->strike)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2083 gdk_draw_line(html->html_area, gc, shift + hb->x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2084 hb->y - html->yoffset - (hb->height / 3),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2085 hb->x + gdk_string_measure(hb->font, hb->text),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2086 hb->y - html->yoffset - (hb->height / 3));
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2087
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2088 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2089 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2090 else if (hb->type == HTML_BIT_SEP)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2091 {
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2092 if (hb->back != NULL) {
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2093 int hwidth, hheight, hei, tmpcnt;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2094 hei = get_line_height(html, hb);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2095 gdk_window_get_size(html->html_area, &hwidth, &hheight);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2096 gdk_gc_set_foreground(gc, hb->back);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2097 gdk_draw_rectangle(html->html_area, gc, TRUE,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2098 1, hb->y - html->yoffset,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2099 hwidth, 5);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2100 for (tmpcnt = 0; tmpcnt < hb->newline; tmpcnt++) {
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2101 int eoff = hei + hei + 2;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2102 eoff *= tmpcnt;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2103 eoff += 5;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2104 gdk_draw_rectangle(html->html_area, gc, TRUE,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2105 1, hb->y - html->yoffset + eoff,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2106 hwidth, hei + hei + 2);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2107 }
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2108 }
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2109
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2110 if (hb->fore != NULL)
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2111 gdk_gc_set_foreground(gc, hb->fore);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2112 else
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2113 gdk_gc_set_foreground(gc, &widget->style->fg[GTK_STATE_NORMAL]);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2114
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2115 gdk_draw_line(html->html_area, gc, hb->x + 2,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2116 hb->y - html->yoffset - (hb->height / 2 - 1),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2117 hb->x + hb->width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2118 hb->y - html->yoffset - (hb->height / 2 - 1));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2119
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2120 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2121 else if (hb->type == HTML_BIT_PIXMAP)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2122 {
907
08d5037c9296 [gaim-migrate @ 917]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 897
diff changeset
2123 area.x = hb->x - html->xoffset;
08d5037c9296 [gaim-migrate @ 917]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 897
diff changeset
2124 area.y = hb->y - hb->height + 5 - html->yoffset;
911
65c8bd1feec5 [gaim-migrate @ 921]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 907
diff changeset
2125 area.width = hb->width;
907
08d5037c9296 [gaim-migrate @ 917]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 897
diff changeset
2126 area.height = hb->height;
08d5037c9296 [gaim-migrate @ 917]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 897
diff changeset
2127 clear_area(html, &area);
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2128 if (hb->back != NULL && selected_state != GTK_STATE_SELECTED) {
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2129 int hwidth, hheight, hei, tmpcnt;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2130 hei = get_line_height(html, hb);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2131 gdk_window_get_size(html->html_area, &hwidth, &hheight);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2132 gdk_gc_set_foreground(gc, hb->back);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2133 for (tmpcnt = 1; tmpcnt < hb->newline; tmpcnt++) {
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2134 int eoff = hei + hei + 2;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2135 eoff *= tmpcnt - 1;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2136 eoff += 5;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2137 gdk_draw_rectangle(html->html_area, gc, TRUE,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2138 1, hb->y - html->yoffset - 11 + eoff,
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2139 hwidth, hei + hei + 2);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2140 }
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2141 }
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2142
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2143 if (hb->fore != NULL)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2144 gdk_gc_set_background(gc, &widget->style->base[GTK_STATE_NORMAL]);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2145 gdk_draw_pixmap(html->html_area, gc, hb->pm, 0, 0, hb->x,
492
56399273ed8d [gaim-migrate @ 502]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 481
diff changeset
2146 hb->y - html->yoffset - (hb->height) + 4, -1, -1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2147 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2148 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2149
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2150
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2151
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2152 gint compare_types(GtkHtmlBit * hb, GtkHtmlBit * hb2)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2153 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2154 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2155 * In this function, it's OK to accidently return a
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2156 * * 0, but will cause problems on an accidental 1
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2157 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2158
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2159 if (!hb || !hb2)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2160 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2161
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2162
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2163 if (hb->uline != hb2->uline)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2164 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2165 if (hb->strike != hb2->strike)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2166 return 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2167 if (hb->font && hb2->font)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2168 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2169 if (!gdk_font_equal(hb->font, hb2->font))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2170 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2171 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2172 else if (hb->font && !hb2->font)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2173 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2174 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2175 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2176 else if (!hb->font && hb2->font)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2177 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2178 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2179 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2180 if (hb->type != hb2->type)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2181 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2182
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2183 if (hb->fore && hb2->fore)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2184 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2185 if (!gdk_color_equal(hb->fore, hb2->fore))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2186 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2187 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2188 else if (hb->fore && !hb2->fore)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2189 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2190 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2191 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2192 else if (!hb->fore && hb2->fore)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2193 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2194 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2195 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2196
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2197 if (hb->back && hb2->back)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2198 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2199 if (!gdk_color_equal(hb->back, hb2->back))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2200 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2201 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2202 else if (hb->back && !hb2->back)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2203 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2204 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2205 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2206 else if (!hb->back && hb2->back)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2207 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2208 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2209 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2210
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2211 if ((hb->url != NULL && hb2->url == NULL) ||
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2212 (hb->url == NULL && hb2->url != NULL))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2213 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2214
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2215 if (hb->url != NULL && hb2->url != NULL)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2216 if (strcasecmp(hb->url, hb2->url))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2217 return 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2218
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2219 return 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2220 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2221
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2222 static gint html_bit_is_onscreen(GtkHtml * html, GtkHtmlBit * hb)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2223 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2224 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2225 height;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2226
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2227 gdk_window_get_size(html->html_area, &width, &height);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2228
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2229 if (hb->y < html->yoffset)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2230 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2231 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2232 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2233
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2234 if ((hb->y - hb->height) > (html->yoffset + height))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2235 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2236 return 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2237 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2238 return 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2239 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2240
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2241 static void draw_cursor(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2242 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2243 if (html->editable &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2244 html->cursor_hb &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2245 GTK_WIDGET_DRAWABLE(html) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2246 html_bit_is_onscreen(html, html->cursor_hb))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2247 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2248 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2249 y;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2250 gint width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2251
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2252 GdkFont *font = html->cursor_hb->font;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2253
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2254 gdk_text_extents(font, html->cursor_hb->text, html->cursor_pos, NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2255 NULL, &width, NULL, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2256
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2257 gdk_gc_set_foreground(html->gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2258 &GTK_WIDGET(html)->style->text[GTK_STATE_NORMAL]);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2259
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2260 y = html->cursor_hb->y - html->yoffset;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2261 x = html->cursor_hb->x + width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2262
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2263
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2264 gdk_draw_line(html->html_area, html->gc, x, y, x, y - font->ascent);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2265
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2266 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2267 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2268
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2269 static void undraw_cursor(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2270 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2271 if (html->editable &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2272 html->cursor_hb &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2273 GTK_WIDGET_DRAWABLE(html) &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2274 html_bit_is_onscreen(html, html->cursor_hb))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2275 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2276 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2277 y;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2278 gint width;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2279 GdkRectangle area;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2280
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2281 GdkFont *font = html->cursor_hb->font;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2282
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2283 gdk_text_extents(font, html->cursor_hb->text, html->cursor_pos, NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2284 NULL, &width, NULL, NULL);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2285
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2286 y = html->cursor_hb->y - html->yoffset;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2287 x = html->cursor_hb->x + width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2288
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2289 area.x = x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2290 area.y = y - font->ascent;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2291 area.height = font->ascent + 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2292 area.width = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2293
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2294
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2295 clear_area(html, &area);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2296
897
b2ce6a6a8633 [gaim-migrate @ 907]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 896
diff changeset
2297 gtk_html_draw_bit(html, html->cursor_hb, 1);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2298
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2299
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2300 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2301 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2302
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2303
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2304 static void expose_html(GtkHtml * html, GdkRectangle * area, gboolean cursor)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2305 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2306 GList *hbits;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2307 GtkHtmlBit *hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2308 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2309 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2310 gint realy;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2311
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2312
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2313 if (html->frozen > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2314 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2315
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2316
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2317 hbits = html->html_bits;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2318
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2319 gdk_window_get_size(html->html_area, &width, &height);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2320
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2321 realy = area->y + html->yoffset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2322
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2323 /* this is needed since background colors draw across the entire window width
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2324 if anyone knows of a cleaner way to work bg colors, please submit code =) */
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2325 area->x = 0;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2326 area->width = width;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
2327
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2328 clear_area(html, area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2329
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2330 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2331 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2332
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2333 hb = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2334
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2335 if (html_bit_is_onscreen(html, hb))
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2336 gtk_html_draw_bit(html, hb, 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2337
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2338
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2339 hbits = hbits->next;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2340 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2341 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2342
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2343 static void resize_html(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2344 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2345 GList *hbits = html->html_bits;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2346 GList *html_bits = html->html_bits;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2347 GtkHtmlBit *hb,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2348 *hb2;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2349 char *str;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2350 gint height;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2351
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2352 if (!hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2353 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2354
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2355
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2356 html->html_bits = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2357
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2358 html->current_x = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2359 html->current_y = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2360
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2361 html->vadj->upper = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2362
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2363 gtk_html_freeze(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2364
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2365 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2366 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2367 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2368 if (hb->type == HTML_BIT_SEP)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2369 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2370
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2371 gtk_html_add_seperator(html, hb->font, hb->fore, hb->back);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2372
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2373 g_free(hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2374
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2375 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2376 continue;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2377 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2378 if (hb->type == HTML_BIT_PIXMAP)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2379 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2380
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2381 gtk_html_add_pixmap(html, hb->pm, hb->fit, hb->newline);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2382
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2383 g_free(hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2384
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2385 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2386 continue;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2387 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2388
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2389 if (hb->newline)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2390 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2391 int i;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2392
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2393 if (!hb->text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2394 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2395 hb->text = g_malloc(1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2396 hb->text[0] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2397 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2398 for (i = 0; i < hb->newline; i++)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2399 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2400 str = hb->text;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2401 hb->text = g_strconcat(str, "\n", NULL);
506
58af37870fdd [gaim-migrate @ 516]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 499
diff changeset
2402 if (str) g_free(str);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2403 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2404 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2405
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2406 if (hbits->next)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2407 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2408 hb2 = (GtkHtmlBit *) hbits->next->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2409 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2410 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2411 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2412 hb2 = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2413 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2414
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2415
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2416
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2417 if (!hb->newline && compare_types(hb, hb2))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2418 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2419 str = hb2->text;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2420 hb2->text = g_strconcat(hb->text, hb2->text, NULL);
537
d050f88321a1 [gaim-migrate @ 547]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 536
diff changeset
2421 if (str) g_free(str);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2422 hb2 = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2423 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2424 else if (hb->text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2425 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2426 gtk_html_add_text(html, hb->font, hb->fore, hb->back,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2427 hb->text, strlen(hb->text), hb->uline, hb->strike,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2428 hb->url);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2429 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2430
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2431
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2432
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2433 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2434 * Font stays, so do colors (segfaults if I free)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2435 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2436 if (hb->fore)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2437 gdk_color_free(hb->fore);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2438 if (hb->back)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2439 gdk_color_free(hb->back);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2440 if (hb->text)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2441 g_free(hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2442 if (hb->url)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2443 g_free(hb->url);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2444
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2445 g_free(hb);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2446
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2447 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2448 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2449
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2450 g_list_free(html_bits);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2451
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2452
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2453 gtk_html_thaw(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2454
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2455 gdk_window_get_size(html->html_area, NULL, &height);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2456 gtk_adjustment_set_value(html->vadj, html->vadj->upper - height);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2457
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2458 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2459
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2460 static GdkGC *create_bg_gc(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2461 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2462 GdkGCValues values;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2463
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2464 values.tile = GTK_WIDGET(html)->style->bg_pixmap[GTK_STATE_NORMAL];
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2465 values.fill = GDK_TILED;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2466
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2467 return gdk_gc_new_with_values(html->html_area, &values,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2468 GDK_GC_FILL | GDK_GC_TILE);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2469 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2470
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2471 static void clear_area(GtkHtml * html, GdkRectangle * area)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2472 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2473 GtkWidget *widget = GTK_WIDGET(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2474 gint x,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2475 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2476
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2477
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2478 if (html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2479 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2480 if (html->pm == NULL)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2481 html->pm = get_desktop_pixmap(widget);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2482
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2483 if (html->pm == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2484 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2485
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2486 if (html->bg_gc == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2487 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2488 GdkGCValues values;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2489
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2490 values.tile = html->pm;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2491 values.fill = GDK_TILED;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2492
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2493 html->bg_gc = gdk_gc_new_with_values(html->html_area, &values,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2494 GDK_GC_FILL | GDK_GC_TILE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2495
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2496 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2497
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2498 gdk_window_get_deskrelative_origin(html->html_area, &x, &y);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2499
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2500 gdk_draw_pixmap(html->html_area, html->bg_gc, html->pm,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2501 x + area->x, y + area->y, area->x, area->y, area->width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2502 area->height);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2503
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2504 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2505
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2506 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2507 if (html->bg_gc)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2508 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2509
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2510 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2511 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2512
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2513 gdk_window_get_size(widget->style->bg_pixmap[GTK_STATE_NORMAL], &width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2514 &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2515
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2516 gdk_gc_set_ts_origin(html->bg_gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2517 (-html->xoffset) % width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2518 (-html->yoffset) % height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2519
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2520 gdk_draw_rectangle(html->html_area, html->bg_gc, TRUE,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2521 area->x, area->y, area->width, area->height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2522 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2523 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2524 gdk_window_clear_area(html->html_area, area->x, area->y, area->width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2525 area->height);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2526 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2527
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2528
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2529
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2530
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2531 static void gtk_html_destroy(GtkObject * object)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2532 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2533 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2534
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2535 g_return_if_fail(object != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2536 g_return_if_fail(GTK_IS_HTML(object));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2537
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2538 html = (GtkHtml *) object;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2539
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2540
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2541 gtk_signal_disconnect_by_data(GTK_OBJECT(html->hadj), html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2542 gtk_signal_disconnect_by_data(GTK_OBJECT(html->vadj), html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2543
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2544 if (html->timer)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2545 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2546 gtk_timeout_remove(html->timer);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2547 html->timer = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2548 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2549
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2550 if (html->tooltip_timer)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2551 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2552 gtk_timeout_remove(html->tooltip_timer);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2553 html->tooltip_timer = -1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2554 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2555
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2556
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2557 GTK_OBJECT_CLASS(parent_class)->destroy(object);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2558
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2559 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2560
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2561 static void gtk_html_finalize(GtkObject * object)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2562 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2563 GList *hbits;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2564 GtkHtml *html;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2565 GtkHtmlBit *hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2566
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2567
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2568 g_return_if_fail(object != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2569 g_return_if_fail(GTK_IS_HTML(object));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2570
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2571 html = (GtkHtml *) object;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2572
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2573 gtk_object_unref(GTK_OBJECT(html->hadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2574 gtk_object_unref(GTK_OBJECT(html->vadj));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2575
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2576 hbits = html->html_bits;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2577
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2578 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2579 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2580 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2581 if (hb->fore)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2582 gdk_color_free(hb->fore);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2583 if (hb->back)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2584 gdk_color_free(hb->back);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2585 if (hb->text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2586 g_free(hb->text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2587 if (hb->url)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2588 g_free(hb->url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2589 if (hb->pm)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2590 gdk_pixmap_unref(hb->pm);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2591
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2592 g_free(hb);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2593 hbits = hbits->next;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2594 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2595 if (html->html_bits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2596 g_list_free(html->html_bits);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2597
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2598 if (html->urls)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2599 g_list_free(html->urls);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2600
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2601 if (html->selected_text)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2602 g_free(html->selected_text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2603
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2604 if (html->gc)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2605 gdk_gc_destroy(html->gc);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2606
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2607 if (html->bg_gc)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2608 gdk_gc_destroy(html->bg_gc);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2609
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2610 if (html->tooltip_window)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2611 gtk_widget_destroy(html->tooltip_window);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2612
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2613 GTK_OBJECT_CLASS(parent_class)->finalize(object);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2614 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2615
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2616 static void gtk_html_realize(GtkWidget * widget)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2617 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2618 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2619 GdkWindowAttr attributes;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2620 gint attributes_mask;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2621
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2622 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2623 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2624
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2625 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2626 GTK_WIDGET_SET_FLAGS(html, GTK_REALIZED);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2627
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2628 attributes.window_type = GDK_WINDOW_CHILD;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2629 attributes.x = widget->allocation.x;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2630 attributes.y = widget->allocation.y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2631 attributes.width = widget->allocation.width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2632 attributes.height = widget->allocation.height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2633 attributes.wclass = GDK_INPUT_OUTPUT;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2634 attributes.visual = gtk_widget_get_visual(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2635 attributes.colormap = gtk_widget_get_colormap(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2636 attributes.event_mask = gtk_widget_get_events(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2637 attributes.event_mask |= (GDK_EXPOSURE_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2638 GDK_BUTTON_PRESS_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2639 GDK_BUTTON_RELEASE_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2640 GDK_BUTTON_MOTION_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2641 GDK_ENTER_NOTIFY_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2642 GDK_LEAVE_NOTIFY_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2643 GDK_POINTER_MOTION_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2644 GDK_POINTER_MOTION_HINT_MASK |
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2645 GDK_VISIBILITY_NOTIFY_MASK | GDK_KEY_PRESS_MASK);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2646
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2647 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2648
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2649 widget->window =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2650 gdk_window_new(gtk_widget_get_parent_window(widget), &attributes,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2651 attributes_mask);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2652 gdk_window_set_user_data(widget->window, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2653
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2654 attributes.x = (widget->style->klass->xthickness + BORDER_WIDTH);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2655 attributes.y = (widget->style->klass->ythickness + BORDER_WIDTH);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2656 attributes.width =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2657 MAX(1, (gint) widget->allocation.width - (gint) attributes.x * 2);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2658 attributes.height =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2659 MAX(1, (gint) widget->allocation.height - (gint) attributes.y * 2);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2660
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2661 html->html_area =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2662 gdk_window_new(widget->window, &attributes, attributes_mask);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2663 gdk_window_set_user_data(html->html_area, html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2664
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2665 widget->style = gtk_style_attach(widget->style, widget->window);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2666
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2667 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2668 * Can't call gtk_style_set_background here because it's handled specially
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2669 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2670 gdk_window_set_background(widget->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2671 &widget->style->base[GTK_STATE_NORMAL]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2672 gdk_window_set_background(html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2673 &widget->style->base[GTK_STATE_NORMAL]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2674
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2675 if (widget->style->bg_pixmap[GTK_STATE_NORMAL])
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2676 html->bg_gc = create_bg_gc(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2677
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2678 html->gc = gdk_gc_new(html->html_area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2679 gdk_gc_set_exposures(html->gc, TRUE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2680 gdk_gc_set_foreground(html->gc, &widget->style->text[GTK_STATE_NORMAL]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2681
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2682 gdk_window_show(html->html_area);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2683
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2684 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2685
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2686 static void gtk_html_style_set(GtkWidget * widget, GtkStyle * previous_style)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2687 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2688 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2689
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2690 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2691 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2692
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2693 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2694 if (GTK_WIDGET_REALIZED(widget))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2695 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2696 gdk_window_set_background(widget->window,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2697 &widget->style->base[GTK_STATE_NORMAL]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2698 gdk_window_set_background(html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2699 &widget->style->base[GTK_STATE_NORMAL]);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2700
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2701 if (html->bg_gc)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2702 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2703 gdk_gc_destroy(html->bg_gc);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2704 html->bg_gc = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2705 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2706
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2707 if (widget->style->bg_pixmap[GTK_STATE_NORMAL])
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2708 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2709 html->bg_gc = create_bg_gc(html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2710 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2711
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2712 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2713 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2714
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2715 static void gtk_html_unrealize(GtkWidget * widget)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2716 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2717 GtkHtml *html;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2718
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2719 g_return_if_fail(widget != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2720 g_return_if_fail(GTK_IS_HTML(widget));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2721
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2722 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2723
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2724 gdk_window_set_user_data(html->html_area, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2725 gdk_window_destroy(html->html_area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2726 html->html_area = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2727
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2728 gdk_gc_destroy(html->gc);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2729 html->gc = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2730
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2731 if (html->bg_gc)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2732 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2733 gdk_gc_destroy(html->bg_gc);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2734 html->bg_gc = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2735 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2736
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2737 if (GTK_WIDGET_CLASS(parent_class)->unrealize)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2738 (*GTK_WIDGET_CLASS(parent_class)->unrealize) (widget);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2739 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2740
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2741
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2742 void gtk_html_add_pixmap(GtkHtml * html, GdkPixmap * pm, int fit, int newline)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2743 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2744 GtkHtmlBit *last_hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2745 GtkHtmlBit *hb = g_new0(GtkHtmlBit, 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2746 GdkWindowPrivate *private = (GdkWindowPrivate *) pm;
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2747 int width, height;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2748
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2749 last_hb = (GtkHtmlBit *) g_list_last(html->html_bits)->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2750
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2751 /* wrap pixmaps */
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2752 gdk_window_get_size(html->html_area, &width, &height);
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2753 if ((html->current_x + private->width) >= width) {
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2754 html->current_x = 0;
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2755 }
499
3ebd3ca4c3d4 [gaim-migrate @ 509]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 492
diff changeset
2756
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2757 hb->fit = fit;
542
872d68495410 [gaim-migrate @ 552]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 540
diff changeset
2758 html->current_x += 2;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2759 hb->x = html->current_x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2760 hb->y = html->current_y;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2761 if (fit)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2762 hb->height = last_hb->height;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2763 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2764 hb->height = private->height;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2765 hb->type = HTML_BIT_PIXMAP;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2766 hb->width = private->width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2767 hb->text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2768 hb->url = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2769 hb->fore = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2770 hb->back = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2771 hb->font = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2772 hb->uline = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2773 hb->strike = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2774 hb->was_selected = 0;
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2775 hb->newline = newline;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2776 hb->pm = pm;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2777
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2778 if (html->current_x == BORDER_WIDTH)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2779 {
540
f586c3819574 [gaim-migrate @ 550]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 537
diff changeset
2780 html->current_y += hb->height + 3;
f586c3819574 [gaim-migrate @ 550]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 537
diff changeset
2781 hb->y += hb->height + 3;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2782 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2783
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2784
542
872d68495410 [gaim-migrate @ 552]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 540
diff changeset
2785 html->current_x += hb->width + 1;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2786
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2787 gtk_html_draw_bit(html, hb, 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2788
536
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2789 if (hb->newline)
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2790 html->current_x = 0;
c9f994ea5833 [gaim-migrate @ 546]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 526
diff changeset
2791
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2792 html->html_bits = g_list_append(html->html_bits, hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2793
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2794
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2795 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2796
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2797 static void gtk_html_add_seperator(GtkHtml * html, GdkFont *font, GdkColor *fore, GdkColor *back)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2798 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2799 GtkHtmlBit *hb = g_new0(GtkHtmlBit, 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2800 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2801 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2802
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2803 html->current_x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2804 html->current_y += 5;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2805
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2806 gdk_window_get_size(html->html_area, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2807
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2808 hb->x = html->current_x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2809 hb->y = html->current_y;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2810 hb->height = 5;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2811 hb->type = HTML_BIT_SEP;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2812 hb->width =
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2813 width -
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2814 GTK_SCROLLED_WINDOW(GTK_WIDGET(html)->parent)->vscrollbar->allocation.
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2815 width - 10;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2816 hb->text = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2817 hb->url = NULL;
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2818 if (fore)
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2819 hb->fore = gdk_color_copy(fore);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2820 else
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2821 hb->fore = NULL;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2822
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2823 if (back)
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2824 hb->back = gdk_color_copy(back);
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2825 else
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2826 hb->back = NULL;
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
2827 hb->font = font;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2828 hb->uline = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2829 hb->strike = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2830 hb->was_selected = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2831 hb->newline = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2832 hb->pm = NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2833
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2834 gtk_html_draw_bit(html, hb, 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2835
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2836 html->html_bits = g_list_append(html->html_bits, hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2837
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2838 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2839
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2840 static void gtk_html_add_text(GtkHtml * html,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2841 GdkFont * cfont,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2842 GdkColor * fore,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2843 GdkColor * back,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2844 char *chars,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2845 gint length, gint uline, gint strike, char *url)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2846 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2847 char *nextline = NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2848 *c,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2849 *text,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2850 *tmp;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2851 GdkGC *gc;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2852 int nl = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2853 nl2 = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2854 int maxwidth;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2855 gint lb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2856 GList *hbits;
79
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
2857 size_t num = 0;
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
2858 int i,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2859 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2860 GtkHtmlBit *hb;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2861 gint hwidth,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2862 hheight;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2863
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2864 if (length == 1 && chars[0] == '\n')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2865 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2866 GtkHtmlBit *h;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2867 hbits = g_list_last(html->html_bits);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2868 if (!hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2869 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2870 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2871 * I realize this loses a \n sometimes
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2872 * * if it's the first thing in the widget.
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2873 * * so fucking what.
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2874 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2875
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2876 h = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2877 h->newline++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2878 if (html->current_x > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2879 html->current_x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2880 else
540
f586c3819574 [gaim-migrate @ 550]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 537
diff changeset
2881 html->current_y += cfont->ascent + cfont->descent + 5;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2882 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2883 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2884
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2885
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2886
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2887 c = text = g_malloc(length + 2);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2888 strncpy(text, chars, length);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2889 text[length] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2890
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2891
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2892 gc = html->gc;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2893
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2894 if (gc == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2895 gc = html->gc = gdk_gc_new(html->html_area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2896
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2897 gdk_gc_set_font(gc, cfont);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2898
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2899
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2900 while (*c)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2901 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2902 if (*c == '\n')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2903 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2904 if (*(c + 1) == '\0')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2905 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2906 nl = 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2907 length--;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2908 c[0] = '\0';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2909 break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2910 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2911 if (*c)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2912 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2913 gtk_html_add_text(html, cfont, fore, back, text, num + 1, uline,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2914 strike, url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2915 tmp = text;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2916 length -= (num + 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2917 text = g_malloc(length + 2);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2918 strncpy(text, (c + 1), length);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2919 text[length] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2920 c = text;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2921 num = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2922 g_free(tmp);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2923 continue;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2924 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2925 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2926
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2927 num++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2928 c++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2929 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2930
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2931 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2932 * Note, yG is chosen because G is damn high, and y is damn low,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2933 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2934 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2935 * it should be just fine. :)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2936 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2937
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2938 gdk_window_get_size(html->html_area, &hwidth, &hheight);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2939
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2940 num = strlen(text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2941
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2942 while (GTK_WIDGET(html)->allocation.width < 20)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2943 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2944 while (gtk_events_pending())
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2945 gtk_main_iteration();
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2946 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2947
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2948 maxwidth = (hwidth - html->current_x - 8);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2949 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2950 * HTK_SCROLLED_WINDOW(GTK_WIDGET(layout)->parent)->vscrollbar->allocation.width) - 8;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2951 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2952
851
2cee5577224b [gaim-migrate @ 861]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 850
diff changeset
2953 if ((maxwidth == (hwidth - 8) && gdk_text_measure(cfont, text, num) > 2 * maxwidth) ||
2cee5577224b [gaim-migrate @ 861]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 850
diff changeset
2954 gdk_text_measure(cfont, text, num) < 0) {
847
430a88eb4a68 [gaim-migrate @ 857]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 842
diff changeset
2955 int pos = num / 2;
842
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2956 static int count = 0;
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2957 count ++;
850
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2958 while (pos < num && (!isspace(text[pos]) || text[pos] == '\n')) pos++;
847
430a88eb4a68 [gaim-migrate @ 857]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 842
diff changeset
2959 if (pos == num) {
430a88eb4a68 [gaim-migrate @ 857]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 842
diff changeset
2960 pos = num/2;
850
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2961 while (pos > 0 && (!isspace(text[pos]) || text[pos] == '\n')) pos--;
847
430a88eb4a68 [gaim-migrate @ 857]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 842
diff changeset
2962 if (!pos) pos = num / 2;
430a88eb4a68 [gaim-migrate @ 857]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 842
diff changeset
2963 }
850
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2964 gtk_html_add_text(html, cfont, fore, back, text, pos + 1, uline, strike, url);
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2965 gtk_html_add_text(html, cfont, fore, back, &text[pos+1], 1, uline, strike, url);
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2966 gtk_html_add_text(html, cfont, fore, back, &text[pos+2], num - pos + 1, uline, strike, url);
842
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2967 g_free(text);
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2968 count--;
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2969 if (!count) {
853
050f244b6829 [gaim-migrate @ 863]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 852
diff changeset
2970 /* FIXME : sometimes we need to add newline, sometimes we don't */
842
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2971 hbits = g_list_last(html->html_bits);
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2972 if (!hbits) return; /* does this ever happen? */
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2973 hb = (GtkHtmlBit *)hbits->data;
850
902be73a6a43 [gaim-migrate @ 860]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 847
diff changeset
2974 hb->newline++;
842
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2975 }
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2976 return;
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2977 }
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
2978
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2979 while (gdk_text_measure(cfont, text, num) > maxwidth)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2980 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2981 if (num > 1)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2982 num--;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2983 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
2984 {
26
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2985 if (html->current_x != 0) {
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2986 html->current_x = 0;
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2987 if (nl) {
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2988 text[length] = '\n';
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2989 length++;
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2990 }
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2991 gtk_html_add_text(html, cfont, fore, back, text, length, uline, strike, url);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2992 g_free(text);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2993 return;
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2994 } else {
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2995 num = strlen (text);
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
2996 break;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2997 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2998 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2999
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3000 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3001
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3002 height = cfont->ascent + cfont->descent + 2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3003
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3004
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3005 if ((int) (html->vadj->upper - html->current_y) < (int) (height * 2))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3006 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3007 int val;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3008 val = (height * 2) + html->current_y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3009 html->vadj->upper = val;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3010 adjust_adj(html, html->vadj);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3011 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3012
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3013
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3014 if (html->current_x == 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3015 {
540
f586c3819574 [gaim-migrate @ 550]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 537
diff changeset
3016 html->current_y += height + 3;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3017 gdk_text_extents(cfont, text, 1, &lb, NULL, NULL, NULL, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3018 html->current_x += (2 - lb);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3019 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3020 else if ((hbits = g_list_last(html->html_bits)) != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3021 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3022 int diff,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3023 y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3024 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3025 if (height > hb->height)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3026 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3027 diff = height - hb->height;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3028 y = hb->y;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3029 html->current_y += diff;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3030 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3031 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3032 hb = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3033 if (hb->y != y)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3034 break;
492
56399273ed8d [gaim-migrate @ 502]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 481
diff changeset
3035 if (hb->type != HTML_BIT_PIXMAP)
56399273ed8d [gaim-migrate @ 502]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 481
diff changeset
3036 hb->height = height;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3037 hb->y += diff; ////////////my thing here /////////////////
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3038 gtk_html_draw_bit(html, hb, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3039
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3040 hbits = hbits->prev;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3041 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3042 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3043 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3044
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3045
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3046
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3047
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3048 if (num != strlen(text))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3049 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3050 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3051 * This is kinda cheesy but it may make things
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3052 * * much better lookin
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3053 */
26
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
3054
842
2804dc8e9ba0 [gaim-migrate @ 852]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 829
diff changeset
3055 for (i=2; (num > i); i++) {
26
b9e90a914e20 [gaim-migrate @ 35]
Rob Flynn <gaim@robflynn.com>
parents: 12
diff changeset
3056 if (text[num - i] == ' ') {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3057 num = num - (i - 1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3058 nl2 = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3059 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3060 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3061 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3062
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3063 nextline = g_malloc(length - num + 2);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3064 strncpy(nextline, (char *) (text + num), length - num);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3065 nextline[length - num] = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3066 if (nl)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3067 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3068 nextline[length - num] = '\n';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3069 nextline[length - num + 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3070 nl = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3071 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3072
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3073
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3074 text[num] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3075 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3076
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3077
52
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3078 if (url != NULL) {
53
bb007396e0a1 [gaim-migrate @ 63]
Rob Flynn <gaim@robflynn.com>
parents: 52
diff changeset
3079 fore = get_color(3355647, gdk_window_get_colormap(html->html_area));
52
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3080 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3081
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3082 hb = g_new0(GtkHtmlBit, 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3083
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3084 hb->text = g_strdup(text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3085
52
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3086 if (fore)
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3087 hb->fore = gdk_color_copy(fore);
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3088 else
ceb0d714d180 [gaim-migrate @ 62]
Rob Flynn <gaim@robflynn.com>
parents: 49
diff changeset
3089 hb->fore = NULL;
49
4d25b98a9d09 [gaim-migrate @ 58]
Jim Duchek <jimduchek>
parents: 26
diff changeset
3090
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3091 if (back)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3092 hb->back = gdk_color_copy(back);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3093 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3094 hb->back = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3095 hb->font = cfont;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3096 hb->uline = uline;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3097 hb->strike = strike;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3098 hb->height = height;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3099 gdk_text_extents(cfont, text, num, &lb, NULL, &hb->width, NULL, NULL);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3100 hb->x = html->current_x;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3101 hb->y = html->current_y;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3102 hb->type = HTML_BIT_TEXT;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3103 hb->pm = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3104 if (url != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3105 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3106 uline = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3107 hb->uline = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3108 hb->url = g_strdup(url);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3109 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3110 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3111 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3112 hb->url = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3113 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3114 html->current_x += hb->width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3115
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3116 html->html_bits = g_list_append(html->html_bits, hb);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3117 if (url != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3118 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3119 html->urls = g_list_append(html->urls, hb);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3120 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3121
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3122
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3123
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3124 gtk_html_draw_bit(html, hb, 1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3125
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3126 if (nl || nl2)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3127 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3128 if (nl)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3129 hb->newline = 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3130 html->current_x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3131 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3132 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3133 hb->newline = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3134
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3135
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3136 if (nextline != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3137 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3138 gtk_html_add_text(html, cfont, fore, back, nextline, strlen(nextline),
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3139 uline, strike, url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3140 g_free(nextline);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3141 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3142
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3143 g_free(text);
137
fe81c8b4951d [gaim-migrate @ 147]
Rob Flynn <gaim@robflynn.com>
parents: 79
diff changeset
3144 if (url != NULL)
fe81c8b4951d [gaim-migrate @ 147]
Rob Flynn <gaim@robflynn.com>
parents: 79
diff changeset
3145 g_free(fore);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3146 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3147
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3148 static char * html_strtok( char * input, char delim )
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3149 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3150 static char * end;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3151 static char * curr_offset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3152 int i;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3153 int num_quotes=0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3154
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3155 if( input != NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3156 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3157 curr_offset = input;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3158 end = input+strlen(input);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3159 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3160 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3161 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3162 if( curr_offset + strlen(curr_offset) < end )
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3163 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3164 curr_offset += strlen(curr_offset) + 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3165 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3166 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3167 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3168 return NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3169 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3170 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3171 for( i=0; curr_offset+i < end &&
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3172 (curr_offset[i] != delim || num_quotes != 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3173 ; i++ )
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3174 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3175 if( curr_offset[i] == '\"' )
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3176 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3177 num_quotes = (num_quotes+1)%2;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3178 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3179 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3180 curr_offset[i] = '\0';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3181 return curr_offset;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3182 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3183
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3184
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3185 void gtk_html_append_text(GtkHtml * html, char *text, gint options)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3186 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3187 GdkColormap *map;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3188 GdkFont *cfont;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3189 GdkRectangle area;
829
9a123b171f46 [gaim-migrate @ 839]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 791
diff changeset
3190 char *ws,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3191 tag[BUF_LONG],
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3192 *c,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3193 *url = NULL;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3194 gint intag = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3195 wpos = 0,
481
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3196 tpos = 0;
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3197 static gint colorv,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3198 bold = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3199 italic = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3200 fixed = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3201 uline = 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3202 strike = 0,
481
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3203 title = 0,
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3204 height;
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3205 static struct font_state *current = NULL,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3206 *tmp;
481
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3207 static struct font_state def_state = { 3, 0, 0, "", NULL, NULL, NULL };
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3208
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3209 if (text == NULL) {
740
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3210 bold = 0;
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3211 italic = 0;
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3212 fixed = 0;
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3213 uline = 0;
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3214 strike = 0;
01d3c96867e2 [gaim-migrate @ 750]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 737
diff changeset
3215 title = 0;
481
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3216 while (current->next)
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3217 {
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3218 if (current->ownbg)
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3219 g_free(current->bgcol);
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3220 if (current->owncolor)
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3221 g_free(current->color);
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3222 tmp = current;
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3223 current = current->next;
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3224 g_free(tmp);
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3225 }
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3226 return;
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3227 }
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3228
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
3229 if (!current) current = &def_state;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3230 map = gdk_window_get_colormap(html->html_area);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3231 cfont = getfont(current->font, bold, italic, fixed, current->size);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3232 c = text;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3233
829
9a123b171f46 [gaim-migrate @ 839]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 791
diff changeset
3234 ws = g_malloc(strlen(text) + 2);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3235
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3236 while (*c)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3237 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3238 if (*c == '<')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3239 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3240 if (!intag)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3241 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3242 ws[wpos] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3243 if (wpos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3244 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3245 if (title)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3246 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3247 if (html->title)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3248 g_free(html->title);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3249 html->title = g_strdup(ws);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3250 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3251 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3252 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3253 current->bgcol, ws, strlen(ws), uline,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3254 strike, url);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3255 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3256 wpos = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3257 intag = 1;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3258 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3259 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3260 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3261 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3262 * Assuming you NEVER have nested tags
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3263 * * (and I mean <tag <tag>> by this, not
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3264 * * <tag><tag2></tag2><tag>..
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3265 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3266 tag[tpos] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3267 gtk_html_add_text(html, cfont, current->color, current->bgcol,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3268 "<", 1, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3269 gtk_html_add_text(html, cfont, current->color, current->bgcol,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3270 tag, strlen(tag), 0, 0, NULL);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3271 tpos = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3272
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3273 tag[0] = *c;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3274 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3275 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3276 else if (*c == '>')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3277 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3278 if (intag)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3279 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3280 tag[tpos] = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3281 if (!strcasecmp(tag, "B"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3282 bold = 1;
732
6609b5a16b38 [gaim-migrate @ 742]
Rob Flynn <gaim@robflynn.com>
parents: 721
diff changeset
3283 else if (!strcasecmp(tag, "STRIKE") || !strcasecmp(tag, "S"))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3284 strike = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3285 else if (!strcasecmp(tag, "I"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3286 italic = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3287 else if (!strcasecmp(tag, "U"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3288 uline = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3289 else if (!strcasecmp(tag, "PRE"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3290 fixed = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3291 else if (!strcasecmp(tag, "HR"))
914
215fe9039ae1 [gaim-migrate @ 924]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 911
diff changeset
3292 gtk_html_add_seperator(html, cfont, current->color, current->bgcol);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3293 else if (!strcasecmp(tag, "/B"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3294 bold = 0;
732
6609b5a16b38 [gaim-migrate @ 742]
Rob Flynn <gaim@robflynn.com>
parents: 721
diff changeset
3295 else if (!strcasecmp(tag, "/STRIKE") || !strcasecmp(tag, "/S"))
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3296 strike = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3297 else if (!strcasecmp(tag, "/I"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3298 italic = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3299 else if (!strcasecmp(tag, "/U"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3300 uline = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3301 else if (!strcasecmp(tag, "/PRE"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3302 fixed = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3303 else if (!strcasecmp(tag, "TITLE"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3304 title = 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3305 else if (!strcasecmp(tag, "/TITLE"))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3306 title = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3307 else if (!strncasecmp(tag, "IMG", 3))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3308 {
549
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3309 GdkPixmap *legend_i;
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3310 GdkBitmap *legend_m;
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3311
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3312 if (strstr(tag, "SRC=\"aol_icon.gif\"") != NULL)
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3313 {
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3314 legend_i = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(html)->window, &legend_m, NULL, aol_icon_xpm);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3315 gtk_html_add_pixmap(html, legend_i, 0, 0);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3316 }
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3317
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3318 if (strstr(tag, "SRC=\"admin_icon.gif\"") != NULL)
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3319 {
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3320 legend_i = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(html)->window, &legend_m, NULL, admin_icon_xpm);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3321 gtk_html_add_pixmap(html, legend_i, 0, 0);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3322 }
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3323 if (strstr(tag, "SRC=\"dt_icon.gif\"") != NULL)
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3324 {
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3325 legend_i = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(html)->window, &legend_m, NULL, dt_icon_xpm);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3326 gtk_html_add_pixmap(html, legend_i, 0, 0);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3327 }
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3328 if (strstr(tag, "SRC=\"free_icon.gif\"") != NULL)
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3329 {
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3330 legend_i = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(html)->window, &legend_m, NULL, free_icon_xpm);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3331 gtk_html_add_pixmap(html, legend_i, 0, 0);
39853e359a06 [gaim-migrate @ 559]
Rob Flynn <gaim@robflynn.com>
parents: 542
diff changeset
3332 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3333 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3334 else if (!strcasecmp(tag, "H3"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3335 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3336 current = push_state(current);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3337 current->size = 4;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3338 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3339 else if (!strcasecmp(tag, "/H3"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3340 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3341 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3342 current->bgcol, "\n", 1, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3343
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3344 if (current->next)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3345 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3346 if (current->ownbg)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3347 g_free(current->bgcol);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3348 if (current->owncolor)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3349 g_free(current->color);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3350 tmp = current;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3351 current = current->next;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3352 g_free(tmp);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3353 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3354 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3355 else if (!strcasecmp(tag, "TABLE"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3356 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3357 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3358 else if (!strcasecmp(tag, "/TABLE"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3359 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3360 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3361 else if (!strcasecmp(tag, "TR"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3362 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3363 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3364 else if (!strcasecmp(tag, "/TR"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3365 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3366 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3367 else if (!strcasecmp(tag, "/TD"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3368 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3369 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3370 else if (!strcasecmp(tag, "TD"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3371 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3372 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3373 current->bgcol, " ", 2, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3374 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3375 else if (!strncasecmp(tag, "A ", 2))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3376 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3377 char *d;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3378 char *temp = d = g_strdup(tag);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3379 int flag = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3380 strtok(tag, " ");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3381 while ((d = strtok(NULL, " ")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3382 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3383 if (strlen(d) < 7)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3384 break;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3385 if (!strncasecmp(d, "HREF=\"", strlen("HREF=\"")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3386 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3387 d += strlen("HREF=\"");
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3388 d[strlen(d) - 1] = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3389 url = g_malloc(strlen(d) + 1);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3390 strcpy(url, d);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3391 flag = 1;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3392 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3393 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3394 g_free(temp);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3395 if (!flag)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3396 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3397 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3398 current->bgcol, "<", 1, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3399 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3400 current->bgcol, tag, strlen(tag), 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3401 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3402 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3403 current->bgcol, ">", 1, 0, 0, NULL);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3404 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3405 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3406 else if (!strcasecmp(tag, "/A"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3407 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3408 if (url)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3409 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3410 g_free(url);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3411 url = NULL;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3412 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3413 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3414 else if (!strncasecmp(tag, "FONT", strlen("FONT")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3415 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3416 char *d;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3417 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3418 * Push a new state onto the stack, based on the old state
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3419 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3420 current = push_state(current);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3421 html_strtok(tag, ' ');
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3422 while ((d = html_strtok(NULL, ' ')))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3423 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3424 if (!strncasecmp(d, "COLOR=", strlen("COLOR=")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3425 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3426 d += strlen("COLOR=");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3427 if (*d == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3428 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3429 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3430 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3431 if (*d == '#')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3432 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3433 if (d[strlen(d) - 1] == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3434 d[strlen(d) - 1] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3435 if (sscanf(d, "%x", &colorv)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3436 && !(options & HTML_OPTION_NO_COLOURS))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3437 {
677
05f6f7dabb7e [gaim-migrate @ 687]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 674
diff changeset
3438 current->color = get_color(colorv, map);
05f6f7dabb7e [gaim-migrate @ 687]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 674
diff changeset
3439 current->owncolor = 1;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3440 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3441 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3442 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3443 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3444 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3445 if (!strncasecmp(d, "FACE=", strlen("FACE=")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3446 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3447 d += strlen("FACE=");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3448 if (*d == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3449 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3450 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3451 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3452 if (d[strlen(d) - 1] == '\"')
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3453 d[strlen(d) - 1] = 0;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3454 strcpy(current->font, d);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3455 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3456 else if (!strncasecmp(d, "BACK=", strlen("BACK=")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3457 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3458 d += strlen("BACK=");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3459 if (*d == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3460 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3461 if (*d == '#')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3462 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3463 if (d[strlen(d) - 1] == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3464 d[strlen(d) - 1] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3465 if (sscanf(d, "%x", &colorv)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3466 && !(options & HTML_OPTION_NO_COLOURS))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3467 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3468 current->bgcol = get_color(colorv, map);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3469 current->ownbg = 1;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3470 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3471 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3472 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3473 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3474 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3475 else if (!strncasecmp(d, "SIZE=", strlen("SIZE=")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3476 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3477 d += strlen("SIZE=");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3478 if (*d == '\"')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3479 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3480 if (*d == '+')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3481 d++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3482 if (sscanf(d, "%d", &colorv))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3483 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3484 current->size = colorv;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3485 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3486 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3487 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3488 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3489 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3490 else if (strncasecmp(d, "PTSIZE=", strlen("PTSIZE=")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3491 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3492 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3493 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3494 }
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3495 else if (!strncasecmp(tag, "BODY", strlen("BODY")))
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3496 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3497
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3498 char *d;
632
21c63b26c604 [gaim-migrate @ 642]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 629
diff changeset
3499 current = push_state(current);
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3500 html_strtok(tag, ' ');
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3501 while ((d = html_strtok(NULL, ' ')))
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3502 {
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3503 if (!strncasecmp(d, "BGCOLOR=", strlen("BGCOLOR=")))
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3504 {
677
05f6f7dabb7e [gaim-migrate @ 687]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 674
diff changeset
3505 d += strlen("BGCOLOR=");
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3506 if (*d == '\"')
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3507 d++;
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3508 if (*d == '#')
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3509 d++;
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3510 if (d[strlen(d) - 1] == '\"')
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3511 d[strlen(d) - 1] = 0;
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3512 if (sscanf(d, "%x", &colorv)
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3513 && !(options & HTML_OPTION_NO_COLOURS))
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3514 {
677
05f6f7dabb7e [gaim-migrate @ 687]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 674
diff changeset
3515 if (colorv != 0xffffff ||
669
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3516 !(display_options & OPT_DISP_IGN_WHITE)) {
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3517 current->bgcol = get_color(colorv, map);
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3518 current->ownbg = 1;
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3519 }
e871081839d0 [gaim-migrate @ 679]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 667
diff changeset
3520 }
667
45ed2ca0756e [gaim-migrate @ 677]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 666
diff changeset
3521 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3522 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3523 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3524 else if (!strncasecmp(tag, "/FONT", strlen("/FONT")))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3525 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3526 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3527 * Pop a font state off the list if possible, freeing
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3528 * any resources it used
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3529 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3530 if (current->next)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3531 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3532 if (current->ownbg)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3533 g_free(current->bgcol);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3534 if (current->owncolor)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3535 g_free(current->color);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3536 tmp = current;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3537 current = current->next;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3538 g_free(tmp);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3539 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3540
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3541 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3542 else if (!strcasecmp(tag, "/BODY"))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3543 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3544 if (current->next)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3545 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3546 if (current->ownbg)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3547 g_free(current->bgcol);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3548 if (current->owncolor)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3549 g_free(current->color);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3550 tmp = current;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3551 current = current->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3552 g_free(tmp);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3553 } /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3554 * tags we ignore below
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3555 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3556 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3557 else if (!strncasecmp(tag, "BR", 2))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3558 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3559 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3560 current->bgcol, "\n", 1, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3561 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3562 else if (strncasecmp(tag, "HTML", 4)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3563 && strncasecmp(tag, "/HTML", 5)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3564 && strncasecmp(tag, "BODY", 4)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3565 && strncasecmp(tag, "/BODY", 5)
627
da0a1238874d [gaim-migrate @ 637]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 604
diff changeset
3566 && (strncasecmp(tag, "P", 1) || tag[1] != '>')
da0a1238874d [gaim-migrate @ 637]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 604
diff changeset
3567 && (strncasecmp(tag, "/P", 2) || tag[3] != '>')
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3568 && strncasecmp(tag, "HEAD", 4)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3569 && strncasecmp(tag, "/HEAD", 5))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3570 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3571 if (tpos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3572 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3573 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3574 current->bgcol, "<", 1, 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3575 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3576 current->bgcol, tag, strlen(tag), 0,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3577 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3578 gtk_html_add_text(html, cfont, current->color,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3579 current->bgcol, ">", 1, 0, 0, NULL);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3580
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3581 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3582 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3583 cfont = getfont(current->font, bold, italic, fixed, current->size);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3584 tpos = 0;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3585 intag = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3586 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3587 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3588 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3589 ws[wpos++] = *c;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3590 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3591 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3592 else if (!intag && *c == '&')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3593 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3594 if (!strncasecmp(c, "&amp;", 5))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3595 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3596 ws[wpos++] = '&';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3597 c += 4;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3598 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3599 else if (!strncasecmp(c, "&lt;", 4))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3600 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3601 ws[wpos++] = '<';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3602 c += 3;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3603 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3604 else if (!strncasecmp(c, "&gt;", 4))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3605 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3606 ws[wpos++] = '>';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3607 c += 3;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3608 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3609 else if (!strncasecmp(c, "&nbsp;", 6))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3610 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3611 ws[wpos++] = ' ';
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3612 c += 5;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3613 }
526
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3614 else if (!strncasecmp(c, "&copy;", 6))
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3615 {
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3616 ws[wpos++] = '©';
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3617 c += 5;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3618 }
737
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3619 else if (!strncasecmp(c, "&quot;", 6))
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3620 {
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3621 ws[wpos++] = '\"';
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3622 c += 5;
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3623 }
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3624 else if (!strncasecmp(c, "&reg;", 5))
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3625 {
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3626 ws[wpos++] = 174;
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3627 c += 4;
c3a920cee3fc [gaim-migrate @ 747]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 732
diff changeset
3628 }
526
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3629 else if (*(c + 1) == '#')
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3630 {
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3631 int pound = 0;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3632 debug_print("got &#;\n");
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3633 if (sscanf(c, "&#%d;", &pound) > 0) {
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3634 ws[wpos++] = (char)pound;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3635 c += 2;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3636 while (isdigit(*c)) c++;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3637 if (*c != ';') c--;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3638 } else {
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3639 ws[wpos++] = *c;
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3640 }
5bf71b39cba2 [gaim-migrate @ 536]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 523
diff changeset
3641 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3642 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3643 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3644 ws[wpos++] = *c;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3645 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3646 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3647 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3648 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3649 if (intag)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3650 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3651 tag[tpos++] = *c;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3652 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3653 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3654 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3655 ws[wpos++] = *c;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3656 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3657 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3658 c++;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3659 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3660 ws[wpos] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3661 tag[tpos] = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3662 if (wpos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3663 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3664 gtk_html_add_text(html, cfont, current->color, current->bgcol, ws,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3665 strlen(ws), uline, strike, url);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3666 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3667 if (tpos)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3668 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3669 gtk_html_add_text(html, cfont, current->color, current->bgcol, "<", 1,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3670 0, 0, NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3671 gtk_html_add_text(html, cfont, current->color, current->bgcol, tag,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3672 strlen(tag), 0, 0, NULL);
523
023c3851db0a [gaim-migrate @ 533]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 506
diff changeset
3673 /* gtk_html_add_text(html, cfont, current->color, current->bgcol, ">", 1,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3674 0, 0, NULL);
523
023c3851db0a [gaim-migrate @ 533]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 506
diff changeset
3675 */ }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3676
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3677
829
9a123b171f46 [gaim-migrate @ 839]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 791
diff changeset
3678 g_free(ws);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3679
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3680 gdk_window_get_size(html->html_area, NULL, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3681 area.height = height;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3682 gtk_adjustment_set_value(html->vadj, html->vadj->upper - area.height);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3683
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3684 return;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3685 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3686
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3687
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3688 static void adjust_adj(GtkHtml * html, GtkAdjustment * adj)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3689 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3690 gint height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3691
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3692 gdk_window_get_size(html->html_area, NULL, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3693
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3694 adj->step_increment = MIN(adj->upper, (float) SCROLL_PIXELS);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3695 adj->page_increment = MIN(adj->upper, height - (float) KEY_SCROLL_PIXELS);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3696 adj->page_size = MIN(adj->upper, height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3697 adj->value = MIN(adj->value, adj->upper - adj->page_size);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3698 adj->value = MAX(adj->value, 0.0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3699
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3700 gtk_signal_emit_by_name(GTK_OBJECT(adj), "changed");
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3701 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3702
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3703
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3704 static void scroll_down(GtkHtml * html, gint diff0)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3705 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3706 GdkRectangle rect;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3707 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3708 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3709
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3710 html->yoffset += diff0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3711
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3712 gdk_window_get_size(html->html_area, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3713
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3714 if (html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3715 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3716 rect.x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3717 rect.y = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3718 rect.width = width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3719 rect.height = height;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3720 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3721 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3722 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3723
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3724
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3725 if (height > diff0 && !html->transparent)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3726 gdk_draw_pixmap(html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3727 html->gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3728 html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3729 0, diff0, 0, 0, width, height - diff0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3730
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3731 rect.x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3732 rect.y = MAX(0, height - diff0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3733 rect.width = width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3734 rect.height = MIN(height, diff0);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3735 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3736
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3737 expose_html(html, &rect, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3738 gtk_html_draw_focus((GtkWidget *) html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3739
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3740 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3741
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3742 static void scroll_up(GtkHtml * html, gint diff0)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3743 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3744 GdkRectangle rect;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3745 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3746 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3747
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3748 html->yoffset -= diff0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3749
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3750
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3751 gdk_window_get_size(html->html_area, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3752
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3753 if (html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3754 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3755 rect.x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3756 rect.y = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3757 rect.width = width;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3758 rect.height = height;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3759 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3760 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3761 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3762
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3763 if (height > diff0)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3764 gdk_draw_pixmap(html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3765 html->gc,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3766 html->html_area,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3767 0, 0, 0, diff0, width, height - diff0);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3768
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3769 rect.x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3770 rect.y = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3771 rect.width = width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3772 rect.height = MIN(height, diff0);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3773 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3774
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3775 expose_html(html, &rect, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3776 gtk_html_draw_focus((GtkWidget *) html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3777
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3778 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3779
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3780
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3781
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3782 static void gtk_html_adjustment(GtkAdjustment * adjustment, GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3783 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3784 g_return_if_fail(adjustment != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3785 g_return_if_fail(GTK_IS_ADJUSTMENT(adjustment));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3786 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3787 g_return_if_fail(GTK_IS_HTML(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3788
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3789 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3790 * Just ignore it if we haven't been size-allocated and realized yet
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3791 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3792 if (html->html_area == NULL)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3793 return;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3794
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3795 if (adjustment == html->hadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3796 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3797 g_warning("horizontal scrolling not implemented");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3798 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3799 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3800 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3801 gint diff = ((gint) adjustment->value) - html->last_ver_value;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3802
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3803 if (diff != 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3804 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3805 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3806 * undraw_cursor (text, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3807 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3808
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3809 if (diff > 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3810 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3811 scroll_down(html, diff);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3812 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3813 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3814 { /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3815 * if (diff < 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3816 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3817 scroll_up(html, -diff);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3818 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3819 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3820 * draw_cursor (text, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3821 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3822
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3823 html->last_ver_value = adjustment->value;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3824 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3825 }
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3826 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3827
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3828 static gint gtk_html_visibility_notify(GtkWidget * widget,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3829 GdkEventVisibility * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3830 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3831 GtkHtml *html;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3832 GdkRectangle rect;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3833 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3834 height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3835
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3836 g_return_val_if_fail(widget != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3837 g_return_val_if_fail(GTK_IS_HTML(widget), FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3838
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3839 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3840
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3841 if (GTK_WIDGET_REALIZED(widget) && html->transparent)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3842 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3843 gdk_window_get_size(html->html_area, &width, &height);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3844 rect.x = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3845 rect.y = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3846 rect.width = width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3847 rect.height = height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3848 expose_html(html, &rect, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3849 gtk_html_draw_focus((GtkWidget *) html);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3850 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3851 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3852 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3853 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3854
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3855
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3856 return FALSE;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3857 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3858
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3859
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3860
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3861 static void gtk_html_disconnect(GtkAdjustment * adjustment, GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3862 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3863 g_return_if_fail(adjustment != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3864 g_return_if_fail(GTK_IS_ADJUSTMENT(adjustment));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3865 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3866 g_return_if_fail(GTK_IS_HTML(html));
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3867
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3868 if (adjustment == html->hadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3869 gtk_html_set_adjustments(html, NULL, html->vadj);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3870 if (adjustment == html->vadj)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3871 gtk_html_set_adjustments(html, html->hadj, NULL);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3872 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3873
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3874 static void move_cursor_ver(GtkHtml * html, int count)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3875 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3876 GList *hbits = g_list_find(html->html_bits, html->cursor_hb);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3877 GtkHtmlBit *hb = NULL,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3878 *hb2 = NULL;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3879 gint y;
79
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
3880 size_t len,
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3881 len2 = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3882
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3883 undraw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3884
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3885 if (!html->html_bits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3886 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3887
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3888 if (!html->cursor_hb)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3889 html->cursor_hb = (GtkHtmlBit *) html->html_bits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3890
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3891 hb = html->cursor_hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3892
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3893 len = html->cursor_pos;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3894 hbits = hbits->prev;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3895 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3896 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3897 hb2 = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3898
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3899 if (hb2->y != hb->y)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3900 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3901
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3902 len += strlen(hb2->text);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3903
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3904 hbits = hbits->prev;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3905 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3906
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3907 hbits = g_list_find(html->html_bits, html->cursor_hb);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3908
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3909 if (count < 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3910 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3911 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3912 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3913 hb2 = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3914
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3915 if (hb2->y != hb->y)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3916 break;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3917
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3918 hbits = hbits->prev;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3919 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3920 if (!hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3921 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3922 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3923 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3924 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3925 y = hb2->y;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3926 hb = hb2;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3927 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3928 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3929 hb2 = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3930
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3931 if (hb2->y != y)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3932 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3933
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3934 hb = hb2;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3935
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3936 hbits = hbits->prev;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3937 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3938 hbits = g_list_find(html->html_bits, hb);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3939 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3940 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3941 hb2 = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3942
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3943 if (hb->y != hb2->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3944 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3945 html->cursor_hb = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3946 html->cursor_pos = strlen(hb->text);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3947 break;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3948 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3949
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3950
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3951 if (len < len2 + strlen(hb2->text))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3952 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3953 html->cursor_hb = hb2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3954 html->cursor_pos = len - len2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3955 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3956 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3957
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3958 len2 += strlen(hb2->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3959
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3960 hb = hb2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3961
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3962 hbits = hbits->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3963 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3964 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3965 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3966 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3967 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3968 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3969 hb2 = (GtkHtmlBit *) hbits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3970
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3971 if (hb2->y != hb->y)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3972 break;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3973
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3974 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3975 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3976 if (!hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3977 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3978 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3979 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3980 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3981 hb = hb2;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3982 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3983 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3984 hb2 = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3985
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3986 if (hb->y != hb2->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3987 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3988 html->cursor_hb = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3989 html->cursor_pos = strlen(hb->text);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3990 break;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3991 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3992
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3993
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3994 if (len < len2 + strlen(hb2->text))
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
3995 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3996 html->cursor_hb = hb2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3997 html->cursor_pos = len - len2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3998 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3999 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4000
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4001 len2 += strlen(hb2->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4002
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4003 hb = hb2;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4004
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4005 hbits = hbits->next;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4006 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4007 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4008
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4009 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4010
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4011 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4012
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4013 static void move_cursor_hor(GtkHtml * html, int count)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4014 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4015 GList *hbits = g_list_find(html->html_bits, html->cursor_hb);
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4016 GtkHtmlBit *hb,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4017 *hb2;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4018
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4019 undraw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4020
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4021 if (!html->html_bits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4022 return;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4023
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4024 if (!html->cursor_hb)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4025 html->cursor_hb = (GtkHtmlBit *) html->html_bits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4026
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4027 html->cursor_pos += count;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4028
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4029 if (html->cursor_pos < 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4030 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4031 if (hbits->prev)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4032 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4033 gint diff;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4034 hb = html->cursor_hb;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4035 hb2 = (GtkHtmlBit *) hbits->prev->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4036 diff = html->cursor_pos + strlen(hb2->text) + 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4037 if (hb->y == hb2->y)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4038 --diff;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4039
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4040 html->cursor_pos = diff;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4041
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4042 html->cursor_hb = (GtkHtmlBit *) hbits->prev->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4043 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4044 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4045 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4046 html->cursor_pos = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4047 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4048 }
79
bfdc427b936d [gaim-migrate @ 89]
Rob Flynn <gaim@robflynn.com>
parents: 69
diff changeset
4049 else if ((unsigned) html->cursor_pos > strlen(html->cursor_hb->text))
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4050 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4051 if (hbits->next)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4052 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4053 gint diff;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4054 hb = html->cursor_hb;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4055 hb2 = (GtkHtmlBit *) hbits->next->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4056
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4057 diff = html->cursor_pos - strlen(html->cursor_hb->text) - 1;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4058 if (hb->y == hb2->y)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4059 ++diff;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4060 html->cursor_pos = diff;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4061 html->cursor_hb = (GtkHtmlBit *) hbits->next->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4062 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4063 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4064 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4065 html->cursor_pos = strlen(html->cursor_hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4066 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4067
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4068 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4069
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4070 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4071 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4072
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4073 static void move_beginning_of_line(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4074 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4075 GList *hbits = g_list_find(html->html_bits, html->cursor_hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4076 GtkHtmlBit *hb = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4077 gint y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4078
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4079 undraw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4080
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4081 if (!html->html_bits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4082 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4083
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4084 if (!html->cursor_hb)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4085 html->cursor_hb = (GtkHtmlBit *) html->html_bits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4086
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4087 y = html->cursor_hb->y;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4088
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4089 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4090 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4091 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4092
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4093 if (y != hb->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4094 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4095 hb = (GtkHtmlBit *) hbits->next->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4096 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4097 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4098
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4099 hbits = hbits->prev;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4100 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4101 if (!hbits)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4102 html->cursor_hb = (GtkHtmlBit *) html->html_bits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4103 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4104 html->cursor_hb = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4105
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4106 html->cursor_pos = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4107
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4108
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4109 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4110
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4111
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4112 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4113
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4114 static void move_end_of_line(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4115 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4116 GList *hbits = g_list_find(html->html_bits, html->cursor_hb);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4117 GtkHtmlBit *hb = NULL;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4118 gint y;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4119
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4120 undraw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4121
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4122 if (!html->html_bits)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4123 return;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4124
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4125 if (!html->cursor_hb)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4126 html->cursor_hb = (GtkHtmlBit *) html->html_bits->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4127
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4128 y = html->cursor_hb->y;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4129
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4130 while (hbits)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4131 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4132 hb = (GtkHtmlBit *) hbits->data;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4133
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4134 if (y != hb->y)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4135 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4136 hb = (GtkHtmlBit *) hbits->prev->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4137 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4138 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4139
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4140 hbits = hbits->next;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4141 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4142 if (!hbits)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4143 html->cursor_hb = (GtkHtmlBit *) g_list_last(html->html_bits)->data;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4144 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4145 html->cursor_hb = hb;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4146
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4147 html->cursor_pos = strlen(html->cursor_hb->text);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4148
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4149
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4150 draw_cursor(html);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4151
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4152
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4153 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4154
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4155
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4156
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4157 static gint gtk_html_key_press(GtkWidget * widget, GdkEventKey * event)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4158 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4159 GtkHtml *html;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4160 gchar key;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4161 gint return_val;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4162
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4163 g_return_val_if_fail(widget != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4164 g_return_val_if_fail(GTK_IS_HTML(widget), FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4165 g_return_val_if_fail(event != NULL, FALSE);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4166
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4167 return_val = FALSE;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4168
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4169 html = GTK_HTML(widget);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4170
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4171 key = event->keyval;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4172 return_val = TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4173
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4174
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4175 if (html->editable == FALSE)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4176 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4177 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4178 * switch (event->keyval) {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4179 * case GDK_Home:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4180 * if (event->state & GDK_CONTROL_MASK)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4181 * scroll_int (text, -text->vadj->value);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4182 * else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4183 * return_val = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4184 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4185 * case GDK_End:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4186 * if (event->state & GDK_CONTROL_MASK)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4187 * scroll_int (text, +text->vadj->upper);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4188 * else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4189 * return_val = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4190 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4191 * case GDK_Page_Up: scroll_int (text, -text->vadj->page_increment); break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4192 * case GDK_Page_Down: scroll_int (text, +text->vadj->page_increment); break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4193 * case GDK_Up: scroll_int (text, -KEY_SCROLL_PIXELS); break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4194 * case GDK_Down: scroll_int (text, +KEY_SCROLL_PIXELS); break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4195 * case GDK_Return:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4196 * if (event->state & GDK_CONTROL_MASK)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4197 * gtk_signal_emit_by_name (GTK_OBJECT (text), "activate");
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4198 * else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4199 * return_val = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4200 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4201 * default:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4202 * return_val = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4203 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4204 * }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4205 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4206 }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4207 else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4208 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4209
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4210 switch (event->keyval)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4211 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4212 case GDK_Home:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4213 move_beginning_of_line(html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4214 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4215 case GDK_End:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4216 move_end_of_line(html);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4217 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4218 /*
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4219 * case GDK_Page_Up:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4220 * move_cursor_page_ver (html, -1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4221 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4222 * case GDK_Page_Down:
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4223 * move_cursor_page_ver (html, +1);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4224 * break;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4225 */
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4226 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4227 * CUA has Ctrl-Up/Ctrl-Down as paragraph up down
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4228 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4229 case GDK_Up:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4230 move_cursor_ver(html, -1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4231 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4232 case GDK_Down:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4233 move_cursor_ver(html, +1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4234 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4235 case GDK_Left:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4236 move_cursor_hor(html, -1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4237 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4238 case GDK_Right:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4239 move_cursor_hor(html, +1);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4240 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4241 #if 0
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4242 case GDK_BackSpace:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4243 if (event->state & GDK_CONTROL_MASK)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4244 gtk_text_delete_backward_word(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4245 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4246 gtk_text_delete_backward_character(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4247 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4248 case GDK_Clear:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4249 gtk_text_delete_line(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4250 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4251 case GDK_Insert:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4252 if (event->state & GDK_SHIFT_MASK)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4253 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4254 extend_selection = FALSE;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4255 gtk_editable_paste_clipboard(editable);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4256 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4257 else if (event->state & GDK_CONTROL_MASK)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4258 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4259 gtk_editable_copy_clipboard(editable);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4260 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4261 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4262 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4263 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4264 * gtk_toggle_insert(text) -- IMPLEMENT
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4265 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4266 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4267 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4268 case GDK_Delete:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4269 if (event->state & GDK_CONTROL_MASK)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4270 gtk_text_delete_forward_word(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4271 else if (event->state & GDK_SHIFT_MASK)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4272 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4273 extend_selection = FALSE;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4274 gtk_editable_cut_clipboard(editable);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4275 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4276 else
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4277 gtk_text_delete_forward_character(text);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4278 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4279 case GDK_Tab:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4280 position = text->point.index;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4281 gtk_editable_insert_text(editable, "\t", 1, &position);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4282 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4283 case GDK_Return:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4284 if (event->state & GDK_CONTROL_MASK)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4285 gtk_signal_emit_by_name(GTK_OBJECT(text), "activate");
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4286 else
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4287 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4288 position = text->point.index;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4289 gtk_editable_insert_text(editable, "\n", 1, &position);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4290 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4291 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4292 case GDK_Escape:
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4293 /*
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4294 * Don't insert literally
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4295 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4296 return_val = FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4297 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4298 #endif
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4299 default:
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4300 return_val = FALSE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4301
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4302 #if 0
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4303 if (event->state & GDK_CONTROL_MASK)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4304 {
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4305 if ((key >= 'A') && (key <= 'Z'))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4306 key -= 'A' - 'a';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4307
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4308 if ((key >= 'a') && (key <= 'z')
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4309 && control_keys[(int) (key - 'a')])
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4310 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4311 (*control_keys[(int) (key - 'a')]) (editable, event->time);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4312 return_val = TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4313 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4314
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4315 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4316 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4317 else if (event->state & GDK_MOD1_MASK)
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4318 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4319 if ((key >= 'A') && (key <= 'Z'))
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4320 key -= 'A' - 'a';
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4321
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4322 if ((key >= 'a') && (key <= 'z') && alt_keys[(int) (key - 'a')])
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4323 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4324 (*alt_keys[(int) (key - 'a')]) (editable, event->time);
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4325 return_val = TRUE;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4326 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4327 break;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4328 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4329 #endif
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4330 /*
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4331 * if (event->length > 0) {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4332 * html->cursor_pos++;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4333 * gtk_editable_insert_text (editable, event->string, event->length, &position);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4334 *
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4335 * return_val = TRUE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4336 * }
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4337 * else
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4338 * return_val = FALSE;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4339 */
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4340 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4341
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4342 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4343
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4344 return return_val;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4345 }
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4346
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4347 void gtk_html_freeze(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4348 {
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4349 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4350 g_return_if_fail(GTK_IS_HTML(html));
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4351
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4352 html->frozen++;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4353 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4354
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4355 void gtk_html_thaw(GtkHtml * html)
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4356 {
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4357 GdkRectangle area;
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4358
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4359 g_return_if_fail(html != NULL);
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4360 g_return_if_fail(GTK_IS_HTML(html));
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4361
481
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
4362 gtk_html_append_text(html, NULL, 0);
64afc8f41bcb [gaim-migrate @ 491]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 353
diff changeset
4363
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4364 html->frozen--;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4365
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4366 if (html->frozen < 0)
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4367 html->frozen = 0;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4368
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4369 if (html->frozen == 0)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4370 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4371 if (html->html_area)
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4372 {
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4373 gint width,
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4374 height;
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4375 area.x = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4376 area.y = 0;
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4377
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4378 gdk_window_get_size(html->html_area, &width, &height);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4379
12
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4380 area.width = width;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4381 area.height = height;
76ab3403bf02 [gaim-migrate @ 21]
Rob Flynn <gaim@robflynn.com>
parents: 1
diff changeset
4382
1
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4383 expose_html(html, &area, TRUE);
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4384 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4385 }
2846a03bda67 [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4386 }
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4387
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4388 static int get_line_height(GtkHtml *html, GtkHtmlBit *start)
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4389 {
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4390 int height, max_height = 0;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4391 GList *hbits = html->html_bits;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4392 GtkHtmlBit *hbit;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4393
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4394 hbits = g_list_find(hbits, start);
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4395
896
ced01cdf0e33 [gaim-migrate @ 906]
Todd Kulesza <fflewddur>
parents: 895
diff changeset
4396 while (hbits)
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4397 {
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4398 hbit = hbits->data;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4399 if (hbit->font)
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4400 height = gdk_text_height(hbit->font, "C", 1);
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4401
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4402 if (max_height < height)
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4403 max_height = height;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4404 if (hbit->newline)
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4405 break;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4406 hbits = hbits->next;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4407 }
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4408
896
ced01cdf0e33 [gaim-migrate @ 906]
Todd Kulesza <fflewddur>
parents: 895
diff changeset
4409 if (max_height == 0)
ced01cdf0e33 [gaim-migrate @ 906]
Todd Kulesza <fflewddur>
parents: 895
diff changeset
4410 max_height = gdk_text_height(hbit->font, "C", 1);
ced01cdf0e33 [gaim-migrate @ 906]
Todd Kulesza <fflewddur>
parents: 895
diff changeset
4411
895
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4412 return max_height;
81a8fb0a565f [gaim-migrate @ 905]
Todd Kulesza <fflewddur>
parents: 894
diff changeset
4413 }