Fri, 04 May 2007 15:53:24 +0000
Fix some ickyness in the tab-completion. Now, if there's only one suggest word, then the first tab will just complete the suggestion. If there's only one suggest word, and it's already completed, then tab will take focus to the next widget. If there is a dropdown, then you can select a suggest word by pressing tabs to move to it, then either space or enter to accept it.
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
1 | #include "gnttextview.h" |
|
14373
609c902d20f5
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14284
diff
changeset
|
2 | #include "gntutils.h" |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
3 | |
|
14460
ec99f8f548a7
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14459
diff
changeset
|
4 | #include <string.h> |
|
ec99f8f548a7
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14459
diff
changeset
|
5 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
6 | enum |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
7 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
8 | SIGS = 1, |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
9 | }; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
10 | |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
11 | typedef struct |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
12 | { |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
13 | GntTextFormatFlags tvflag; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
14 | chtype flags; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
15 | int start; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
16 | int end; /* This is the next byte of the last character of this segment */ |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
17 | } GntTextSegment; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
18 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
19 | typedef struct |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
20 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
21 | GList *segments; /* A list of GntTextSegments */ |
|
14373
609c902d20f5
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14284
diff
changeset
|
22 | int length; /* The current length of the line so far (ie. onscreen width) */ |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
23 | gboolean soft; /* TRUE if it's an overflow from prev. line */ |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
24 | } GntTextLine; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
25 | |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
26 | typedef struct |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
27 | { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
28 | char *name; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
29 | int start; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
30 | int end; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
31 | } GntTextTag; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
32 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
33 | static GntWidgetClass *parent_class = NULL; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
34 | |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
35 | static gchar *select_start; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
36 | static gchar *select_end; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
37 | static gboolean double_click; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
38 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
39 | static void |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
40 | gnt_text_view_draw(GntWidget *widget) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
41 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
42 | GntTextView *view = GNT_TEXT_VIEW(widget); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
43 | int i = 0; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
44 | GList *lines; |
|
14193
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
45 | int rows, scrcol; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
46 | |
|
15991
1efb6bd8ba3f
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15906
diff
changeset
|
47 | wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
48 | werase(widget->window); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
49 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
50 | for (i = 0, lines = view->list; i < widget->priv.height && lines; i++, lines = lines->next) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
51 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
52 | GList *iter; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
53 | GntTextLine *line = lines->data; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
54 | |
|
14284
6c99565d0f50
[gaim-migrate @ 16903]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14283
diff
changeset
|
55 | wmove(widget->window, widget->priv.height - 1 - i, 0); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
56 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
57 | for (iter = line->segments; iter; iter = iter->next) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
58 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
59 | GntTextSegment *seg = iter->data; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
60 | char *end = view->string->str + seg->end; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
61 | char back = *end; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
62 | chtype fl = seg->flags; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
63 | *end = '\0'; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
64 | if (select_start < view->string->str + seg->start && select_end > view->string->str + seg->end) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
65 | fl |= A_REVERSE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
66 | wattrset(widget->window, fl); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
67 | wprintw(widget->window, "%s", (view->string->str + seg->start)); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
68 | } else if (select_start && select_end && |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
69 | ((select_start >= view->string->str + seg->start && select_start <= view->string->str + seg->end) || |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
70 | (select_end <= view->string->str + seg->end && select_start <= view->string->str + seg->start))) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
71 | char *cur = view->string->str + seg->start; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
72 | while (*cur != '\0') { |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
73 | gchar *last = g_utf8_next_char(cur); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
74 | gchar *str; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
75 | if (cur >= select_start && cur <= select_end) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
76 | fl |= A_REVERSE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
77 | else |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
78 | fl = seg->flags; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
79 | str = g_strndup(cur, last - cur); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
80 | wattrset(widget->window, fl); |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
81 | waddstr(widget->window, str); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
82 | g_free(str); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
83 | cur = g_utf8_next_char(cur); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
84 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
85 | } else { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
86 | wattrset(widget->window, fl); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
87 | wprintw(widget->window, "%s", (view->string->str + seg->start)); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
88 | } |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
89 | *end = back; |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
90 | } |
| 14789 | 91 | wattroff(widget->window, A_UNDERLINE | A_BLINK | A_REVERSE); |
| 92 | whline(widget->window, ' ', widget->priv.width - line->length - 1); | |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
93 | } |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
94 | |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
95 | scrcol = widget->priv.width - 1; |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
96 | rows = widget->priv.height - 2; |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
97 | if (rows > 0) |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
98 | { |
|
14193
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
99 | int total = g_list_length(g_list_first(view->list)); |
|
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
100 | int showing, position, up, down; |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
101 | |
|
14193
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
102 | showing = rows * rows / total + 1; |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
103 | showing = MIN(rows, showing); |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
104 | |
|
14193
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
105 | total -= rows; |
|
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
106 | up = g_list_length(lines); |
|
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
107 | down = total - up; |
|
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
108 | |
|
fcfd3eea2160
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14185
diff
changeset
|
109 | position = (rows - showing) * up / MAX(1, up + down); |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
110 | position = MAX((lines != NULL), position); |
|
14169
90d1d4697e23
[gaim-migrate @ 16741]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14094
diff
changeset
|
111 | |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
112 | if (showing + position > rows) |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
113 | position = rows - showing; |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
114 | |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
115 | if (showing + position == rows && view->list && view->list->prev) |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
116 | position = MAX(1, rows - 1 - showing); |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
117 | else if (showing + position < rows && view->list && !view->list->prev) |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
118 | position = rows - showing; |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
119 | |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
120 | mvwvline(widget->window, position + 1, scrcol, |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
121 | ACS_CKBOARD | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D), showing); |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
122 | } |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
123 | |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
124 | mvwaddch(widget->window, 0, scrcol, |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
125 | (lines ? ACS_UARROW : ' ') | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
126 | mvwaddch(widget->window, widget->priv.height - 1, scrcol, |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
127 | ((view->list && view->list->prev) ? ACS_DARROW : ' ') | |
|
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
128 | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); |
|
14169
90d1d4697e23
[gaim-migrate @ 16741]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14094
diff
changeset
|
129 | |
|
14494
3575eac3a518
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14461
diff
changeset
|
130 | GNTDEBUG; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
131 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
132 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
133 | static void |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
134 | gnt_text_view_size_request(GntWidget *widget) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
135 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
136 | if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED)) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
137 | { |
|
14461
ed494fb68279
[gaim-migrate @ 17107]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14460
diff
changeset
|
138 | gnt_widget_set_size(widget, 64, 20); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
139 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
140 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
141 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
142 | static void |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
143 | gnt_text_view_map(GntWidget *widget) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
144 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
145 | if (widget->priv.width == 0 || widget->priv.height == 0) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
146 | gnt_widget_size_request(widget); |
|
14494
3575eac3a518
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14461
diff
changeset
|
147 | GNTDEBUG; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
148 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
149 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
150 | static gboolean |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
151 | gnt_text_view_key_pressed(GntWidget *widget, const char *text) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
152 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
153 | return FALSE; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
154 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
155 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
156 | static void |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
157 | free_text_segment(gpointer data, gpointer null) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
158 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
159 | GntTextSegment *seg = data; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
160 | g_free(seg); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
161 | } |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
162 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
163 | static void |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
164 | free_text_line(gpointer data, gpointer null) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
165 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
166 | GntTextLine *line = data; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
167 | g_list_foreach(line->segments, free_text_segment, NULL); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
168 | g_list_free(line->segments); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
169 | g_free(line); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
170 | } |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
171 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
172 | static void |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
173 | free_tag(gpointer data, gpointer null) |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
174 | { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
175 | GntTextTag *tag = data; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
176 | g_free(tag->name); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
177 | g_free(tag); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
178 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
179 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
180 | static void |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
181 | gnt_text_view_destroy(GntWidget *widget) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
182 | { |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
183 | GntTextView *view = GNT_TEXT_VIEW(widget); |
|
14092
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
184 | view->list = g_list_first(view->list); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
185 | g_list_foreach(view->list, free_text_line, NULL); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
186 | g_list_free(view->list); |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
187 | g_list_foreach(view->tags, free_tag, NULL); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
188 | g_list_free(view->tags); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
189 | g_string_free(view->string, TRUE); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
190 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
191 | |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
192 | static char * |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
193 | gnt_text_view_get_p(GntTextView *view, int x, int y) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
194 | { |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
195 | int i = 0; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
196 | GntWidget *wid = GNT_WIDGET(view); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
197 | GntTextLine *line; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
198 | GList *lines; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
199 | GList *segs; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
200 | GntTextSegment *seg; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
201 | gchar *pos; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
202 | |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
203 | y = wid->priv.height - y; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
204 | if (g_list_length(view->list) < y) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
205 | x = 0; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
206 | y = g_list_length(view->list) - 1; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
207 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
208 | |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
209 | lines = g_list_nth(view->list, y - 1); |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
210 | if (!lines) |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
211 | return NULL; |
|
15824
94b08838e069
Cute little mod.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15814
diff
changeset
|
212 | do { |
|
94b08838e069
Cute little mod.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15814
diff
changeset
|
213 | line = lines->data; |
|
94b08838e069
Cute little mod.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15814
diff
changeset
|
214 | lines = lines->next; |
|
15826
273b7247786b
Fix a crash when selecting text in an empty TV.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15824
diff
changeset
|
215 | } while (line && !line->segments && lines); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
216 | |
|
15826
273b7247786b
Fix a crash when selecting text in an empty TV.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15824
diff
changeset
|
217 | if (!line || !line->segments) /* no valid line */ |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
218 | return NULL; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
219 | segs = line->segments; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
220 | seg = (GntTextSegment *)segs->data; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
221 | pos = view->string->str + seg->start; |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
222 | x = MIN(x, line->length); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
223 | while (++i <= x) { |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
224 | gunichar *u; |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
225 | pos = g_utf8_next_char(pos); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
226 | u = g_utf8_to_ucs4(pos, -1, NULL, NULL, NULL); |
|
15866
3f58d8094334
g_unichar_iswide_cjk() is only in glib 2.12 and newer, and I suspect
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15837
diff
changeset
|
227 | if (u && g_unichar_iswide(*u)) |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
228 | i++; |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
229 | g_free(u); |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
230 | } |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
231 | return pos; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
232 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
233 | |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
234 | static GString * |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
235 | select_word_text(GntTextView *view, gchar *c) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
236 | { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
237 | gchar *start = c; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
238 | gchar *end = c; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
239 | gchar *t, *endsize; |
|
15874
46df7421a1b5
Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15866
diff
changeset
|
240 | while ((t = g_utf8_prev_char(start))) { |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
241 | if (!g_ascii_isspace(*t)) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
242 | if (start == view->string->str) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
243 | break; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
244 | start = t; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
245 | } else |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
246 | break; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
247 | } |
|
15874
46df7421a1b5
Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15866
diff
changeset
|
248 | while ((t = g_utf8_next_char(end))) { |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
249 | if (!g_ascii_isspace(*t)) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
250 | end = t; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
251 | else |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
252 | break; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
253 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
254 | select_start = start; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
255 | select_end = end; |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
256 | endsize = g_utf8_next_char(select_end); /* End at the correct byte */ |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
257 | return g_string_new_len(start, endsize - start); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
258 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
259 | |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
260 | static gboolean too_slow(gpointer n) |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
261 | { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
262 | double_click = FALSE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
263 | return FALSE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
264 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
265 | |
|
14405
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
266 | static gboolean |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
267 | gnt_text_view_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
268 | { |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
269 | if (event == GNT_MOUSE_SCROLL_UP) { |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
270 | gnt_text_view_scroll(GNT_TEXT_VIEW(widget), -1); |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
271 | } else if (event == GNT_MOUSE_SCROLL_DOWN) { |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
272 | gnt_text_view_scroll(GNT_TEXT_VIEW(widget), 1); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
273 | } else if (event == GNT_LEFT_MOUSE_DOWN) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
274 | select_start = gnt_text_view_get_p(GNT_TEXT_VIEW(widget), x - widget->priv.x, y - widget->priv.y); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
275 | g_timeout_add(500, too_slow, NULL); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
276 | } else if (event == GNT_MOUSE_UP) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
277 | if (select_start) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
278 | GString *clip; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
279 | select_end = gnt_text_view_get_p(GNT_TEXT_VIEW(widget), x - widget->priv.x, y - widget->priv.y); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
280 | if (select_end < select_start) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
281 | gchar *t = select_start; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
282 | select_start = select_end; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
283 | select_end = t; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
284 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
285 | if (select_start == select_end) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
286 | if (double_click) { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
287 | clip = select_word_text(GNT_TEXT_VIEW(widget), select_start); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
288 | double_click = FALSE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
289 | } else { |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
290 | double_click = TRUE; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
291 | select_start = 0; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
292 | select_end = 0; |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
293 | gnt_widget_draw(widget); |
|
15874
46df7421a1b5
Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15866
diff
changeset
|
294 | return TRUE; |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
295 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
296 | } else { |
|
15837
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
297 | gchar *endsize = g_utf8_next_char(select_end); /* End at the correct byte */ |
|
7718f3b6f643
Display selected double-width cell chars properly and select the correct number of bytes when these characters are on a selection line.
Richard Nelson <wabz@pidgin.im>
parents:
15826
diff
changeset
|
298 | clip = g_string_new_len(select_start, endsize - select_start); |
|
15814
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
299 | } |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
300 | gnt_widget_draw(widget); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
301 | gnt_set_clipboard_string(clip->str); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
302 | g_string_free(clip, TRUE); |
|
2db42c6a13fa
Add a gntclipboard. You can select text in a textview with the mouse, and paste it in an entry with ctrl-v (or rebind GntEntry's clipboard-paste).
Richard Nelson <wabz@pidgin.im>
parents:
15397
diff
changeset
|
303 | } |
|
14405
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
304 | } else |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
305 | return FALSE; |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
306 | return TRUE; |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
307 | } |
|
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
308 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
309 | static void |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
310 | gnt_text_view_reflow(GntTextView *view) |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
311 | { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
312 | /* This is pretty ugly, and inefficient. Someone do something about it. */ |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
313 | GntTextLine *line; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
314 | GList *back, *iter, *list; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
315 | GString *string; |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
316 | int pos = 0; /* no. of 'real' lines */ |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
317 | |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
318 | list = view->list; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
319 | while (list->prev) { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
320 | line = list->data; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
321 | if (!line->soft) |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
322 | pos++; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
323 | list = list->prev; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
324 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
325 | |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
326 | back = g_list_last(view->list); |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
327 | view->list = NULL; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
328 | |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
329 | string = view->string; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
330 | view->string = NULL; |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
331 | gnt_text_view_clear(view); |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
332 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
333 | view->string = g_string_set_size(view->string, string->len); |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
334 | view->string->len = 0; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
335 | GNT_WIDGET_SET_FLAGS(GNT_WIDGET(view), GNT_WIDGET_DRAWING); |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
336 | |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
337 | for (; back; back = back->prev) { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
338 | line = back->data; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
339 | if (back->next && !line->soft) { |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
340 | gnt_text_view_append_text_with_flags(view, "\n", GNT_TEXT_FLAG_NORMAL); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
341 | } |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
342 | |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
343 | for (iter = line->segments; iter; iter = iter->next) { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
344 | GntTextSegment *seg = iter->data; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
345 | char *start = string->str + seg->start; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
346 | char *end = string->str + seg->end; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
347 | char back = *end; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
348 | *end = '\0'; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
349 | gnt_text_view_append_text_with_flags(view, start, seg->tvflag); |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
350 | *end = back; |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
351 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
352 | free_text_line(line, NULL); |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
353 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
354 | g_list_free(list); |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
355 | |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
356 | list = view->list = g_list_first(view->list); |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
357 | /* Go back to the line that was in view before resizing started */ |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
358 | while (pos--) { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
359 | while (((GntTextLine*)list->data)->soft) |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
360 | list = list->next; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
361 | list = list->next; |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
362 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
363 | view->list = list; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
364 | GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(view), GNT_WIDGET_DRAWING); |
|
14943
ffd493362a87
[gaim-migrate @ 17650]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14888
diff
changeset
|
365 | if (GNT_WIDGET(view)->window) |
|
ffd493362a87
[gaim-migrate @ 17650]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14888
diff
changeset
|
366 | gnt_widget_draw(GNT_WIDGET(view)); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
367 | g_string_free(string, TRUE); |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
368 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
369 | |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
370 | static void |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
371 | gnt_text_view_size_changed(GntWidget *widget, int w, int h) |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
372 | { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
373 | if (w != widget->priv.width) { |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
374 | gnt_text_view_reflow(GNT_TEXT_VIEW(widget)); |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
375 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
376 | } |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
377 | |
|
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
378 | static void |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
379 | gnt_text_view_class_init(GntTextViewClass *klass) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
380 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
381 | parent_class = GNT_WIDGET_CLASS(klass); |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
382 | parent_class->destroy = gnt_text_view_destroy; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
383 | parent_class->draw = gnt_text_view_draw; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
384 | parent_class->map = gnt_text_view_map; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
385 | parent_class->size_request = gnt_text_view_size_request; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
386 | parent_class->key_pressed = gnt_text_view_key_pressed; |
|
14405
4398121ce889
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14373
diff
changeset
|
387 | parent_class->clicked = gnt_text_view_clicked; |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
388 | parent_class->size_changed = gnt_text_view_size_changed; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
389 | |
|
14494
3575eac3a518
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14461
diff
changeset
|
390 | GNTDEBUG; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
391 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
392 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
393 | static void |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
394 | gnt_text_view_init(GTypeInstance *instance, gpointer class) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
395 | { |
|
14005
198d1658b390
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13993
diff
changeset
|
396 | GntWidget *widget = GNT_WIDGET(instance); |
|
198d1658b390
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13993
diff
changeset
|
397 | |
|
14433
69975e91d8ca
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14405
diff
changeset
|
398 | GNT_WIDGET_SET_FLAGS(GNT_WIDGET(instance), GNT_WIDGET_GROW_Y | GNT_WIDGET_GROW_X); |
|
14005
198d1658b390
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13993
diff
changeset
|
399 | |
|
198d1658b390
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13993
diff
changeset
|
400 | widget->priv.minw = 5; |
|
14185
394aa8aa00a3
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14169
diff
changeset
|
401 | widget->priv.minh = 2; |
|
14494
3575eac3a518
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14461
diff
changeset
|
402 | GNTDEBUG; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
403 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
404 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
405 | /****************************************************************************** |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
406 | * GntTextView API |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
407 | *****************************************************************************/ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
408 | GType |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
409 | gnt_text_view_get_gtype(void) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
410 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
411 | static GType type = 0; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
412 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
413 | if(type == 0) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
414 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
415 | static const GTypeInfo info = { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
416 | sizeof(GntTextViewClass), |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
417 | NULL, /* base_init */ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
418 | NULL, /* base_finalize */ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
419 | (GClassInitFunc)gnt_text_view_class_init, |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
420 | NULL, /* class_finalize */ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
421 | NULL, /* class_data */ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
422 | sizeof(GntTextView), |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
423 | 0, /* n_preallocs */ |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
424 | gnt_text_view_init, /* instance_init */ |
|
15874
46df7421a1b5
Enable DEBUG_CFLAGS in libgnt and fix up a number of compile warnings and
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15866
diff
changeset
|
425 | NULL /* value_table */ |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
426 | }; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
427 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
428 | type = g_type_register_static(GNT_TYPE_WIDGET, |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
429 | "GntTextView", |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
430 | &info, 0); |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
431 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
432 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
433 | return type; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
434 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
435 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
436 | GntWidget *gnt_text_view_new() |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
437 | { |
|
15991
1efb6bd8ba3f
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15906
diff
changeset
|
438 | GntWidget *widget = g_object_new(GNT_TYPE_TEXT_VIEW, NULL); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
439 | GntTextView *view = GNT_TEXT_VIEW(widget); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
440 | GntTextLine *line = g_new0(GntTextLine, 1); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
441 | |
|
13989
9a647311c9ac
[gaim-migrate @ 16447]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13958
diff
changeset
|
442 | GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
443 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
444 | view->string = g_string_new(NULL); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
445 | view->list = g_list_append(view->list, line); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
446 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
447 | return widget; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
448 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
449 | |
|
13993
8c12e7d15b40
[gaim-migrate @ 16458]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13992
diff
changeset
|
450 | void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextFormatFlags flags) |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
451 | { |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
452 | gnt_text_view_append_text_with_tag(view, text, flags, NULL); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
453 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
454 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
455 | void gnt_text_view_append_text_with_tag(GntTextView *view, const char *text, |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
456 | GntTextFormatFlags flags, const char *tagname) |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
457 | { |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
458 | GntWidget *widget = GNT_WIDGET(view); |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
459 | int fl = 0; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
460 | const char *start, *end; |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
461 | GList *list = view->list; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
462 | GntTextLine *line; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
463 | int len; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
464 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
465 | if (text == NULL || *text == '\0') |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
466 | return; |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
467 | |
|
14014
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
468 | fl = gnt_text_format_flag_to_chtype(flags); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
469 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
470 | len = view->string->len; |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
471 | view->string = g_string_append(view->string, text); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
472 | |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
473 | if (tagname) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
474 | GntTextTag *tag = g_new0(GntTextTag, 1); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
475 | tag->name = g_strdup(tagname); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
476 | tag->start = len; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
477 | tag->end = view->string->len; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
478 | view->tags = g_list_append(view->tags, tag); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
479 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
480 | |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
481 | view->list = g_list_first(view->list); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
482 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
483 | start = end = view->string->str + len; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
484 | |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
485 | while (*start) { |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
486 | GntTextLine *oldl; |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
487 | GntTextSegment *seg = NULL; |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
488 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
489 | if (*end == '\n' || *end == '\r') { |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
490 | if (!strncmp(end, "\r\n", 2)) |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
491 | end++; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
492 | end++; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
493 | start = end; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
494 | gnt_text_view_next_line(view); |
|
14460
ec99f8f548a7
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14459
diff
changeset
|
495 | view->list = g_list_first(view->list); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
496 | continue; |
|
14072
4e64a4f18686
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14033
diff
changeset
|
497 | } |
|
4e64a4f18686
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14033
diff
changeset
|
498 | |
|
4e64a4f18686
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14033
diff
changeset
|
499 | line = view->list->data; |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
500 | if (line->length == widget->priv.width - 1) { |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
501 | /* The last added line was exactly the same width as the widget */ |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
502 | line = g_new0(GntTextLine, 1); |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
503 | line->soft = TRUE; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
504 | view->list = g_list_prepend(view->list, line); |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
505 | } |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
506 | |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
507 | if ((end = strchr(start, '\r')) != NULL || |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
508 | (end = strchr(start, '\n')) != NULL) { |
|
14460
ec99f8f548a7
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14459
diff
changeset
|
509 | len = gnt_util_onscreen_width(start, end - 1); |
|
ec99f8f548a7
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14459
diff
changeset
|
510 | if (len >= widget->priv.width - line->length - 1) { |
|
14459
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
511 | end = NULL; |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
512 | } |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
513 | } |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
514 | |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
515 | if (end == NULL) |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
516 | end = gnt_util_onscreen_width_to_pointer(start, |
|
d2e639b92d79
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14445
diff
changeset
|
517 | widget->priv.width - line->length - 1, &len); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
518 | |
|
14888
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
519 | /* Try to append to the previous segment if possible */ |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
520 | if (line->segments) { |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
521 | seg = g_list_last(line->segments)->data; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
522 | if (seg->flags != fl) |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
523 | seg = NULL; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
524 | } |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
525 | |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
526 | if (seg == NULL) { |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
527 | seg = g_new0(GntTextSegment, 1); |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
528 | seg->start = start - view->string->str; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
529 | seg->tvflag = flags; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
530 | seg->flags = fl; |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
531 | line->segments = g_list_append(line->segments, seg); |
|
aff7c674ca0f
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14791
diff
changeset
|
532 | } |
|
14373
609c902d20f5
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14284
diff
changeset
|
533 | |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
534 | oldl = line; |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
535 | if (*end && *end != '\n' && *end != '\r') { |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
536 | const char *tmp = end; |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
537 | while (end && *end != '\n' && *end != '\r' && !g_ascii_isspace(*end)) { |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
538 | end = g_utf8_find_prev_char(seg->start + view->string->str, end); |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
539 | } |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
540 | if (!end || !g_ascii_isspace(*end)) |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
541 | end = tmp; |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
542 | else |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
543 | end++; /* Remove the space */ |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
544 | |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
545 | line = g_new0(GntTextLine, 1); |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
546 | line->soft = TRUE; |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
547 | view->list = g_list_prepend(view->list, line); |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
548 | } |
|
16072
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
549 | seg->end = end - view->string->str; |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
550 | oldl->length += len; |
|
4902da58e498
word wrapping, fix \r\n newlines
Richard Nelson <wabz@pidgin.im>
parents:
15991
diff
changeset
|
551 | start = end; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
552 | } |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
553 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
554 | view->list = list; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
555 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
556 | gnt_widget_draw(widget); |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
557 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
558 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
559 | void gnt_text_view_scroll(GntTextView *view, int scroll) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
560 | { |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
561 | if (scroll == 0) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
562 | { |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
563 | view->list = g_list_first(view->list); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
564 | } |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
565 | else if (scroll > 0) |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
566 | { |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
567 | GList *list = g_list_nth_prev(view->list, scroll); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
568 | if (list == NULL) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
569 | list = g_list_first(view->list); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
570 | view->list = list; |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
571 | } |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
572 | else if (scroll < 0) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
573 | { |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
574 | GList *list = g_list_nth(view->list, -scroll); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
575 | if (list == NULL) |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
576 | list = g_list_last(view->list); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
577 | view->list = list; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
578 | } |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
579 | |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
580 | gnt_widget_draw(GNT_WIDGET(view)); |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
581 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
582 | |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
583 | void gnt_text_view_next_line(GntTextView *view) |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
584 | { |
|
13958
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
585 | GntTextLine *line = g_new0(GntTextLine, 1); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
586 | GList *list = view->list; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
587 | |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
588 | view->list = g_list_prepend(g_list_first(view->list), line); |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
589 | view->list = list; |
|
bd1c3bb3f33d
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13950
diff
changeset
|
590 | gnt_widget_draw(GNT_WIDGET(view)); |
|
13944
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
591 | } |
|
2269d17043b1
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff
changeset
|
592 | |
|
14014
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
593 | chtype gnt_text_format_flag_to_chtype(GntTextFormatFlags flags) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
594 | { |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
595 | chtype fl = 0; |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
596 | |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
597 | if (flags & GNT_TEXT_FLAG_BOLD) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
598 | fl |= A_BOLD; |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
599 | if (flags & GNT_TEXT_FLAG_UNDERLINE) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
600 | fl |= A_UNDERLINE; |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
601 | if (flags & GNT_TEXT_FLAG_BLINK) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
602 | fl |= A_BLINK; |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
603 | |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
604 | if (flags & GNT_TEXT_FLAG_DIM) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
605 | fl |= (A_DIM | COLOR_PAIR(GNT_COLOR_DISABLED)); |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
606 | else if (flags & GNT_TEXT_FLAG_HIGHLIGHT) |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
607 | fl |= (A_DIM | COLOR_PAIR(GNT_COLOR_HIGHLIGHT)); |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
608 | else |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
609 | fl |= COLOR_PAIR(GNT_COLOR_NORMAL); |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
610 | |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
611 | return fl; |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
612 | } |
|
223d99ce2f06
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14005
diff
changeset
|
613 | |
|
14033
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
614 | void gnt_text_view_clear(GntTextView *view) |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
615 | { |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
616 | GntTextLine *line; |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
617 | |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
618 | g_list_foreach(view->list, free_text_line, NULL); |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
619 | g_list_free(view->list); |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
620 | view->list = NULL; |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
621 | |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
622 | line = g_new0(GntTextLine, 1); |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
623 | view->list = g_list_append(view->list, line); |
|
14445
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
624 | if (view->string) |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
625 | g_string_free(view->string, TRUE); |
|
69f18df58bbf
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14433
diff
changeset
|
626 | view->string = g_string_new(NULL); |
|
14033
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
627 | |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
628 | if (GNT_WIDGET(view)->window) |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
629 | gnt_widget_draw(GNT_WIDGET(view)); |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
630 | } |
|
127990de806d
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14014
diff
changeset
|
631 | |
|
14092
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
632 | int gnt_text_view_get_lines_below(GntTextView *view) |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
633 | { |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
634 | int below = 0; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
635 | GList *list = view->list; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
636 | while ((list = list->prev)) |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
637 | ++below; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
638 | return below; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
639 | } |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
640 | |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
641 | int gnt_text_view_get_lines_above(GntTextView *view) |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
642 | { |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
643 | int above = 0; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
644 | GList *list = view->list; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
645 | list = g_list_nth(view->list, GNT_WIDGET(view)->priv.height); |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
646 | if (!list) |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
647 | return 0; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
648 | while ((list = list->next)) |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
649 | ++above; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
650 | return above; |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
651 | } |
|
191e12cbe464
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14072
diff
changeset
|
652 | |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
653 | /** |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
654 | * XXX: There are quite possibly more than a few bugs here. |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
655 | */ |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
656 | int gnt_text_view_tag_change(GntTextView *view, const char *name, const char *text, gboolean all) |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
657 | { |
|
15375
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
658 | GList *alllines = g_list_first(view->list); |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
659 | GList *list, *next, *iter, *inext; |
|
15397
2a5e63b97a2b
[gaim-migrate @ 18127]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15396
diff
changeset
|
660 | const int text_length = text ? strlen(text) : 0; |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
661 | int count = 0; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
662 | for (list = view->tags; list; list = next) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
663 | GntTextTag *tag = list->data; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
664 | next = list->next; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
665 | if (strcmp(tag->name, name) == 0) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
666 | int change; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
667 | char *before, *after; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
668 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
669 | count++; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
670 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
671 | before = g_strndup(view->string->str, tag->start); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
672 | after = g_strdup(view->string->str + tag->end); |
|
15396
a5938aa3f6c9
[gaim-migrate @ 18126]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15375
diff
changeset
|
673 | change = (tag->end - tag->start) - text_length; |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
674 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
675 | g_string_printf(view->string, "%s%s%s", before, text ? text : "", after); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
676 | g_free(before); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
677 | g_free(after); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
678 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
679 | /* Update the offsets of the next tags */ |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
680 | for (iter = next; iter; iter = iter->next) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
681 | GntTextTag *t = iter->data; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
682 | t->start -= change; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
683 | t->end -= change; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
684 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
685 | |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
686 | /* Update the offsets of the segments */ |
|
15375
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
687 | for (iter = alllines; iter; iter = inext) { |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
688 | GList *segs, *snext; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
689 | GntTextLine *line = iter->data; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
690 | inext = iter->next; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
691 | for (segs = line->segments; segs; segs = snext) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
692 | GntTextSegment *seg = segs->data; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
693 | snext = segs->next; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
694 | if (seg->start >= tag->end) { |
|
15372
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
695 | /* The segment is somewhere after the tag */ |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
696 | seg->start -= change; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
697 | seg->end -= change; |
|
15372
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
698 | } else if (seg->end <= tag->start) { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
699 | /* This segment is somewhere in front of the tag */ |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
700 | } else if (seg->start >= tag->start) { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
701 | /* This segment starts in the middle of the tag */ |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
702 | if (text == NULL) { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
703 | free_text_segment(seg, NULL); |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
704 | line->segments = g_list_delete_link(line->segments, segs); |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
705 | if (line->segments == NULL) { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
706 | free_text_line(line, NULL); |
|
15375
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
707 | if (view->list == iter) { |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
708 | if (inext) |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
709 | view->list = inext; |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
710 | else |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
711 | view->list = iter->prev; |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
712 | } |
|
42b08c34496b
[gaim-migrate @ 18104]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15372
diff
changeset
|
713 | alllines = g_list_delete_link(alllines, iter); |
|
15372
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
714 | } |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
715 | } else { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
716 | /* XXX: (null) */ |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
717 | seg->start = tag->start; |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
718 | seg->end = tag->end - change; |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
719 | } |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
720 | line->length -= change; |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
721 | /* XXX: Make things work if the tagged text spans over several lines. */ |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
722 | } else { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
723 | /* XXX: handle the rest of the conditions */ |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
724 | g_printerr("WTF! This needs to be handled properly!!\n"); |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
725 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
726 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
727 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
728 | if (text == NULL) { |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
729 | /* Remove the tag */ |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
730 | view->tags = g_list_delete_link(view->tags, list); |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
731 | free_tag(tag, NULL); |
|
15372
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
732 | } else { |
|
d89caf014964
[gaim-migrate @ 18101]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15233
diff
changeset
|
733 | tag->end -= change; |
|
15233
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
734 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
735 | if (!all) |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
736 | break; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
737 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
738 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
739 | return count; |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
740 | } |
|
fdd9e78534ad
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14943
diff
changeset
|
741 | |
|
16186
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
742 | static gboolean |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
743 | scroll_tv(GntWidget *wid, const char *key, GntTextView *tv) |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
744 | { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
745 | if (strcmp(key, GNT_KEY_PGUP) == 0) { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
746 | gnt_text_view_scroll(tv, -(GNT_WIDGET(tv)->priv.height - 2)); |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
747 | } else if (strcmp(key, GNT_KEY_PGDOWN) == 0) { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
748 | gnt_text_view_scroll(tv, GNT_WIDGET(tv)->priv.height - 2); |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
749 | } else if (strcmp(key, GNT_KEY_DOWN) == 0) { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
750 | gnt_text_view_scroll(tv, 1); |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
751 | } else if (strcmp(key, GNT_KEY_UP) == 0) { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
752 | gnt_text_view_scroll(tv, -1); |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
753 | } else { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
754 | return FALSE; |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
755 | } |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
756 | return TRUE; |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
757 | } |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
758 | |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
759 | void gnt_text_view_attach_scroll_widget(GntTextView *view, GntWidget *widget) |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
760 | { |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
761 | g_signal_connect(G_OBJECT(widget), "key_pressed", G_CALLBACK(scroll_tv), view); |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
762 | } |
|
73cb5b43aaf9
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16072
diff
changeset
|
763 |