1 diff -aurN vte-0.11.13.orig/src/vte.c vte-0.11.13/src/vte.c
2 --- vte-0.11.13.orig/src/vte.c 2005-03-14 15:43:47.000000000 +0100
3 +++ vte-0.11.13/src/vte.c 2005-04-15 21:18:40.000000000 +0200
4 @@ -15821,6 +15821,80 @@
5 terminal->pvt->accessible_emit = TRUE;
10 +_vte_terminal_get_selection(VteTerminal *terminal)
12 + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL);
14 + return g_strdup (terminal->pvt->selection);
18 +_vte_terminal_get_start_selection(VteTerminal *terminal, long *x, long *y)
20 + struct selection_cell_coords ss;
22 + g_return_if_fail(VTE_IS_TERMINAL(terminal));
24 + ss = terminal->pvt->selection_start;
36 +_vte_terminal_get_end_selection(VteTerminal *terminal, long *x, long *y)
38 + struct selection_cell_coords se;
40 + g_return_if_fail(VTE_IS_TERMINAL(terminal));
42 + se = terminal->pvt->selection_end;
54 +_vte_terminal_select_text(VteTerminal *terminal, long start_x, long start_y, long end_x, long end_y, int start_offset, int end_offset)
56 + g_return_if_fail(VTE_IS_TERMINAL(terminal));
58 + terminal->pvt->selection_type = selection_type_char;
59 + terminal->pvt->has_selection = TRUE;
60 + terminal->pvt->selecting_had_delta = TRUE;
61 + terminal->pvt->selection_start.x = start_x;
62 + terminal->pvt->selection_start.y = start_y;
63 + terminal->pvt->selection_end.x = end_x;
64 + terminal->pvt->selection_end.y = end_y;
65 + vte_terminal_copy(terminal,
66 + GDK_SELECTION_PRIMARY);
67 + vte_invalidate_cells (terminal,
69 + terminal->column_count,
70 + MIN (start_y, end_y),
71 + ABS (start_y - end_y) + 1);
73 + vte_terminal_emit_selection_changed(terminal);
77 +_vte_terminal_remove_selection(VteTerminal *terminal)
79 + vte_terminal_deselect_all (terminal);
82 static gboolean display_timeout (gpointer data);
83 static gboolean coalesce_timeout (gpointer data);
85 diff -aurN vte-0.11.13.orig/src/vteaccess.c vte-0.11.13/src/vteaccess.c
86 --- vte-0.11.13.orig/src/vteaccess.c 2005-03-09 12:24:56.000000000 +0100
87 +++ vte-0.11.13/src/vteaccess.c 2005-04-15 21:13:33.000000000 +0200
91 if (i == priv->snapshot_linebreaks->len) {
92 - if (offset < priv->snapshot_characters->len) {
93 + if (offset <= priv->snapshot_characters->len) {
94 cur_x = offset - cur_offset;
101 +vte_terminal_accessible_selection_changed (VteTerminal *terminal,
104 + g_return_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(data));
105 + g_return_if_fail(VTE_IS_TERMINAL(terminal));
107 + g_signal_emit_by_name (data, "text_selection_changed");
111 vte_terminal_initialize (AtkObject *obj, gpointer data)
113 VteTerminal *terminal;
115 g_signal_connect(G_OBJECT(terminal), "visibility-notify-event",
116 GTK_SIGNAL_FUNC(vte_terminal_accessible_visibility_notify),
118 + g_signal_connect(G_OBJECT(terminal), "selection-changed",
119 + GTK_SIGNAL_FUNC(vte_terminal_accessible_selection_changed),
122 if (GTK_IS_WIDGET((GTK_WIDGET(terminal))->parent)) {
123 parent = gtk_widget_get_accessible((GTK_WIDGET(terminal))->parent);
124 @@ -1382,55 +1395,136 @@
126 vte_terminal_accessible_get_n_selections(AtkText *text)
128 - g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), 0);
130 + VteTerminal *terminal;
132 + g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), -1);
133 vte_terminal_accessible_update_private_data_if_needed(ATK_OBJECT(text),
138 + widget = GTK_ACCESSIBLE(text)->widget;
139 + if (widget == NULL) {
140 + /* State is defunct */
143 + g_return_val_if_fail (VTE_IS_TERMINAL (widget), -1);
144 + terminal = VTE_TERMINAL (widget);
145 + return (vte_terminal_get_has_selection (terminal)) ? 1 : 0;
149 vte_terminal_accessible_get_selection(AtkText *text, gint selection_number,
150 gint *start_offset, gint *end_offset)
153 + VteTerminal *terminal;
154 + VteTerminalAccessiblePrivate *priv;
155 + long start_x, start_y, end_x, end_y;
157 g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), NULL);
158 vte_terminal_accessible_update_private_data_if_needed(ATK_OBJECT(text),
162 + widget = GTK_ACCESSIBLE(text)->widget;
163 + if (widget == NULL) {
164 + /* State is defunct */
167 + g_return_val_if_fail (VTE_IS_TERMINAL (widget), NULL);
168 + terminal = VTE_TERMINAL (widget);
169 + if (!vte_terminal_get_has_selection (terminal)) {
172 + if (selection_number != 0) {
176 + priv = g_object_get_data(G_OBJECT(text),
177 + VTE_TERMINAL_ACCESSIBLE_PRIVATE_DATA);
178 + _vte_terminal_get_start_selection (terminal, &start_x, &start_y);
179 + *start_offset = offset_from_xy (priv, start_x, start_y);
180 + _vte_terminal_get_end_selection (terminal, &end_x, &end_y);
181 + *end_offset = offset_from_xy (priv, end_x, end_y);
182 + return _vte_terminal_get_selection (terminal);
186 vte_terminal_accessible_add_selection(AtkText *text,
187 gint start_offset, gint end_offset)
190 + VteTerminal *terminal;
191 + VteTerminalAccessiblePrivate *priv;
192 + gint start_x, start_y, end_x, end_y;
194 g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), FALSE);
195 vte_terminal_accessible_update_private_data_if_needed(ATK_OBJECT(text),
199 + widget = GTK_ACCESSIBLE(text)->widget;
200 + if (widget == NULL) {
201 + /* State is defunct */
204 + g_return_val_if_fail (VTE_IS_TERMINAL (widget), FALSE);
205 + terminal = VTE_TERMINAL (widget);
206 + g_return_val_if_fail (!vte_terminal_get_has_selection (terminal), FALSE);
207 + priv = g_object_get_data(G_OBJECT(text),
208 + VTE_TERMINAL_ACCESSIBLE_PRIVATE_DATA);
209 + xy_from_offset (priv, start_offset, &start_x, &start_y);
210 + xy_from_offset (priv, end_offset, &end_x, &end_y);
211 + _vte_terminal_select_text (terminal, start_x, start_y, end_x, end_y, start_offset, end_offset);
216 vte_terminal_accessible_remove_selection(AtkText *text,
217 gint selection_number)
220 + VteTerminal *terminal;
222 g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), FALSE);
223 vte_terminal_accessible_update_private_data_if_needed(ATK_OBJECT(text),
227 + widget = GTK_ACCESSIBLE(text)->widget;
228 + if (widget == NULL) {
229 + /* State is defunct */
232 + g_return_val_if_fail (VTE_IS_TERMINAL (widget), FALSE);
233 + terminal = VTE_TERMINAL (widget);
234 + if (selection_number == 0 && vte_terminal_get_has_selection (terminal)) {
235 + _vte_terminal_remove_selection (terminal);
243 vte_terminal_accessible_set_selection(AtkText *text, gint selection_number,
244 gint start_offset, gint end_offset)
247 + VteTerminal *terminal;
249 g_return_val_if_fail(VTE_IS_TERMINAL_ACCESSIBLE(text), FALSE);
250 vte_terminal_accessible_update_private_data_if_needed(ATK_OBJECT(text),
254 + widget = GTK_ACCESSIBLE(text)->widget;
255 + if (widget == NULL) {
256 + /* State is defunct */
259 + g_return_val_if_fail (VTE_IS_TERMINAL (widget), FALSE);
260 + terminal = VTE_TERMINAL (widget);
261 + if (selection_number != 0) {
264 + if (vte_terminal_get_has_selection (terminal)) {
265 + _vte_terminal_remove_selection (terminal);
268 + return vte_terminal_accessible_add_selection (text, start_offset, end_offset);
272 @@ -1519,6 +1613,9 @@
275 widget = (GTK_ACCESSIBLE(component))->widget;
276 + if (widget == NULL) {
279 if (!GTK_WIDGET_REALIZED(widget)) {
282 @@ -1543,6 +1640,9 @@
285 widget = (GTK_ACCESSIBLE(component))->widget;
286 + if (widget == NULL) {
289 if (!GTK_WIDGET_REALIZED(widget)) {
292 @@ -1575,7 +1675,12 @@
294 VteTerminal *terminal;
295 gint columns, rows, xpad, ypad;
296 - terminal = VTE_TERMINAL((GTK_ACCESSIBLE(component))->widget);
298 + widget = GTK_ACCESSIBLE(component)->widget;
299 + if (widget == NULL) {
302 + terminal = VTE_TERMINAL(widget);
303 vte_terminal_get_padding(terminal, &xpad, &ypad);
304 /* If the size is an exact multiple of the cell size, use that,
305 * otherwise round down. */
306 @@ -1599,6 +1704,9 @@
309 widget = (GTK_ACCESSIBLE(component))->widget;
310 + if (widget == NULL) {
313 if (GTK_WIDGET_HAS_FOCUS(widget)) {
316 diff -aurN vte-0.11.13.orig/src/vteint.h vte-0.11.13/src/vteint.h
317 --- vte-0.11.13.orig/src/vteint.h 2003-06-16 23:16:33.000000000 +0200
318 +++ vte-0.11.13/src/vteint.h 2005-04-15 21:13:33.000000000 +0200
322 void _vte_terminal_accessible_ref(VteTerminal *terminal);
323 +char* _vte_terminal_get_selection(VteTerminal *terminal);
324 +void _vte_terminal_get_start_selection(VteTerminal *terminal, long *x, long *y);
325 +void _vte_terminal_get_end_selection(VteTerminal *terminal, long *x, long *y);
326 +void _vte_terminal_select_text(VteTerminal *terminal, long start_x, long start_y, long end_x, long end_y, int start_offset, int end_offset);
327 +void _vte_terminal_remove_selection(VteTerminal *terminal);