Mercurial > pidgin.yaz
annotate console/libgnt/gnttextview.c @ 15172:a00712d0522e
[gaim-migrate @ 17957]
Show 'ABC is typing...' in the conversation window for typing notification.
seanegan suggested this, and it sounded like an interesting thing to do.
The change in gnttextview.c will need some more work if it is to be used for
some other task, but its current use should be OK.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 11 Dec 2006 06:02:15 +0000 |
parents | 5228f8cf2a6a |
children | e9963b2cfcaf |
rev | line source |
---|---|
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
1 #include "gnttextview.h" |
14311
fda9dc44807d
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14222
diff
changeset
|
2 #include "gntutils.h" |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
3 |
14398
2377498b4698
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14397
diff
changeset
|
4 #include <string.h> |
2377498b4698
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14397
diff
changeset
|
5 |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
6 enum |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
7 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
8 SIGS = 1, |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
9 }; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
10 |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
11 typedef struct |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
12 { |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
13 GntTextFormatFlags tvflag; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
14 chtype flags; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
15 int start; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
16 int end; /* This is the next byte of the last character of this segment */ |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
17 } GntTextSegment; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
18 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
19 typedef struct |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
20 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
21 GList *segments; /* A list of GntTextSegments */ |
14311
fda9dc44807d
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14222
diff
changeset
|
22 int length; /* The current length of the line so far (ie. onscreen width) */ |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
23 gboolean soft; /* TRUE if it's an overflow from prev. line */ |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
24 } GntTextLine; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
25 |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
26 typedef struct |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
27 { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
28 char *name; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
29 int start; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
30 int end; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
31 } GntTextTag; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
32 |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
33 static GntWidgetClass *parent_class = NULL; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
34 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
35 static void |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
36 gnt_text_view_draw(GntWidget *widget) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
37 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
38 GntTextView *view = GNT_TEXT_VIEW(widget); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
39 int i = 0; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
40 GList *lines; |
14131
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
41 int rows, scrcol; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
42 |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
43 werase(widget->window); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
44 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
45 for (i = 0, lines = view->list; i < widget->priv.height && lines; i++, lines = lines->next) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
46 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
47 GList *iter; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
48 GntTextLine *line = lines->data; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
49 |
14222
8c13a650cef5
[gaim-migrate @ 16903]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14221
diff
changeset
|
50 wmove(widget->window, widget->priv.height - 1 - i, 0); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
51 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
52 for (iter = line->segments; iter; iter = iter->next) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
53 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
54 GntTextSegment *seg = iter->data; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
55 char *end = view->string->str + seg->end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
56 char back = *end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
57 *end = '\0'; |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
58 wattrset(widget->window, seg->flags); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
59 wprintw(widget->window, "%s", (view->string->str + seg->start)); |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
60 *end = back; |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
61 } |
14727
9baeeaa365d1
[gaim-migrate @ 17482]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14432
diff
changeset
|
62 wattroff(widget->window, A_UNDERLINE | A_BLINK | A_REVERSE); |
9baeeaa365d1
[gaim-migrate @ 17482]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14432
diff
changeset
|
63 whline(widget->window, ' ', widget->priv.width - line->length - 1); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
64 } |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
65 |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
66 scrcol = widget->priv.width - 1; |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
67 rows = widget->priv.height - 2; |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
68 if (rows > 0) |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
69 { |
14131
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
70 int total = g_list_length(g_list_first(view->list)); |
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
71 int showing, position, up, down; |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
72 |
14131
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
73 showing = rows * rows / total + 1; |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
74 showing = MIN(rows, showing); |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
75 |
14131
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
76 total -= rows; |
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
77 up = g_list_length(lines); |
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
78 down = total - up; |
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
79 |
db2311999862
[gaim-migrate @ 16773]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14123
diff
changeset
|
80 position = (rows - showing) * up / MAX(1, up + down); |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
81 position = MAX((lines != NULL), position); |
14107
c0ee28af3ca2
[gaim-migrate @ 16741]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14032
diff
changeset
|
82 |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
83 if (showing + position > rows) |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
84 position = rows - showing; |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
85 |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
86 if (showing + position == rows && view->list && view->list->prev) |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
87 position = MAX(1, rows - 1 - showing); |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
88 else if (showing + position < rows && view->list && !view->list->prev) |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
89 position = rows - showing; |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
90 |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
91 mvwvline(widget->window, position + 1, scrcol, |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
92 ACS_CKBOARD | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D), showing); |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
93 } |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
94 |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
95 mvwaddch(widget->window, 0, scrcol, |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
96 (lines ? ACS_UARROW : ' ') | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
97 mvwaddch(widget->window, widget->priv.height - 1, scrcol, |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
98 ((view->list && view->list->prev) ? ACS_DARROW : ' ') | |
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
99 COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); |
14107
c0ee28af3ca2
[gaim-migrate @ 16741]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14032
diff
changeset
|
100 |
14432
3ac156db9cb6
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14399
diff
changeset
|
101 GNTDEBUG; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
102 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
103 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
104 static void |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
105 gnt_text_view_size_request(GntWidget *widget) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
106 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
107 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED)) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
108 { |
14399
28baa42b5ac2
[gaim-migrate @ 17107]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14398
diff
changeset
|
109 gnt_widget_set_size(widget, 64, 20); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
110 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
111 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
112 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
113 static void |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
114 gnt_text_view_map(GntWidget *widget) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
115 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
116 if (widget->priv.width == 0 || widget->priv.height == 0) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
117 gnt_widget_size_request(widget); |
14432
3ac156db9cb6
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14399
diff
changeset
|
118 GNTDEBUG; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
119 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
120 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
121 static gboolean |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
122 gnt_text_view_key_pressed(GntWidget *widget, const char *text) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
123 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
124 return FALSE; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
125 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
126 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
127 static void |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
128 free_text_segment(gpointer data, gpointer null) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
129 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
130 GntTextSegment *seg = data; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
131 g_free(seg); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
132 } |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
133 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
134 static void |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
135 free_text_line(gpointer data, gpointer null) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
136 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
137 GntTextLine *line = data; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
138 g_list_foreach(line->segments, free_text_segment, NULL); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
139 g_list_free(line->segments); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
140 g_free(line); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
141 } |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
142 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
143 static void |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
144 free_tag(gpointer data, gpointer null) |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
145 { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
146 GntTextTag *tag = data; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
147 g_free(tag->name); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
148 g_free(tag); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
149 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
150 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
151 static void |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
152 gnt_text_view_destroy(GntWidget *widget) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
153 { |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
154 GntTextView *view = GNT_TEXT_VIEW(widget); |
14030
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
155 view->list = g_list_first(view->list); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
156 g_list_foreach(view->list, free_text_line, NULL); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
157 g_list_free(view->list); |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
158 g_list_foreach(view->tags, free_tag, NULL); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
159 g_list_free(view->tags); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
160 g_string_free(view->string, TRUE); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
161 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
162 |
14343
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
163 static gboolean |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
164 gnt_text_view_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
165 { |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
166 if (event == GNT_MOUSE_SCROLL_UP) { |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
167 gnt_text_view_scroll(GNT_TEXT_VIEW(widget), -1); |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
168 } else if (event == GNT_MOUSE_SCROLL_DOWN) { |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
169 gnt_text_view_scroll(GNT_TEXT_VIEW(widget), 1); |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
170 } else |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
171 return FALSE; |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
172 return TRUE; |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
173 } |
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
174 |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
175 static void |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
176 gnt_text_view_reflow(GntTextView *view) |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
177 { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
178 /* This is pretty ugly, and inefficient. Someone do something about it. */ |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
179 GntTextLine *line; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
180 GList *back, *iter, *list; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
181 GString *string; |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
182 int pos = 0; /* no. of 'real' lines */ |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
183 |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
184 list = view->list; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
185 while (list->prev) { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
186 line = list->data; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
187 if (!line->soft) |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
188 pos++; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
189 list = list->prev; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
190 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
191 |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
192 back = g_list_last(view->list); |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
193 view->list = NULL; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
194 |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
195 string = view->string; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
196 view->string = NULL; |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
197 gnt_text_view_clear(view); |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
198 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
199 view->string = g_string_set_size(view->string, string->len); |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
200 view->string->len = 0; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
201 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(view), GNT_WIDGET_DRAWING); |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
202 |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
203 for (; back; back = back->prev) { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
204 line = back->data; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
205 if (back->next && !line->soft) { |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
206 gnt_text_view_append_text_with_flags(view, "\n", GNT_TEXT_FLAG_NORMAL); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
207 } |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
208 |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
209 for (iter = line->segments; iter; iter = iter->next) { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
210 GntTextSegment *seg = iter->data; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
211 char *start = string->str + seg->start; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
212 char *end = string->str + seg->end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
213 char back = *end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
214 *end = '\0'; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
215 gnt_text_view_append_text_with_flags(view, start, seg->tvflag); |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
216 *end = back; |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
217 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
218 free_text_line(line, NULL); |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
219 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
220 g_list_free(list); |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
221 |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
222 list = view->list = g_list_first(view->list); |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
223 /* Go back to the line that was in view before resizing started */ |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
224 while (pos--) { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
225 while (((GntTextLine*)list->data)->soft) |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
226 list = list->next; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
227 list = list->next; |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
228 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
229 view->list = list; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
230 GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(view), GNT_WIDGET_DRAWING); |
14881
5228f8cf2a6a
[gaim-migrate @ 17650]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14826
diff
changeset
|
231 if (GNT_WIDGET(view)->window) |
5228f8cf2a6a
[gaim-migrate @ 17650]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14826
diff
changeset
|
232 gnt_widget_draw(GNT_WIDGET(view)); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
233 g_string_free(string, TRUE); |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
234 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
235 |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
236 static void |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
237 gnt_text_view_size_changed(GntWidget *widget, int w, int h) |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
238 { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
239 if (w != widget->priv.width) { |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
240 gnt_text_view_reflow(GNT_TEXT_VIEW(widget)); |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
241 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
242 } |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
243 |
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
244 static void |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
245 gnt_text_view_class_init(GntTextViewClass *klass) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
246 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
247 parent_class = GNT_WIDGET_CLASS(klass); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
248 parent_class->destroy = gnt_text_view_destroy; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
249 parent_class->draw = gnt_text_view_draw; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
250 parent_class->map = gnt_text_view_map; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
251 parent_class->size_request = gnt_text_view_size_request; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
252 parent_class->key_pressed = gnt_text_view_key_pressed; |
14343
0387a167f342
[gaim-migrate @ 17044]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14311
diff
changeset
|
253 parent_class->clicked = gnt_text_view_clicked; |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
254 parent_class->size_changed = gnt_text_view_size_changed; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
255 |
14432
3ac156db9cb6
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14399
diff
changeset
|
256 GNTDEBUG; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
257 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
258 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
259 static void |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
260 gnt_text_view_init(GTypeInstance *instance, gpointer class) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
261 { |
13943
25be562aaca8
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13931
diff
changeset
|
262 GntWidget *widget = GNT_WIDGET(instance); |
25be562aaca8
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13931
diff
changeset
|
263 |
14371
f3137c1faebe
[gaim-migrate @ 17077]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14343
diff
changeset
|
264 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(instance), GNT_WIDGET_GROW_Y | GNT_WIDGET_GROW_X); |
13943
25be562aaca8
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13931
diff
changeset
|
265 |
25be562aaca8
[gaim-migrate @ 16480]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13931
diff
changeset
|
266 widget->priv.minw = 5; |
14123
f8ab496671fa
[gaim-migrate @ 16761]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14107
diff
changeset
|
267 widget->priv.minh = 2; |
14432
3ac156db9cb6
[gaim-migrate @ 17146]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14399
diff
changeset
|
268 GNTDEBUG; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
269 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
270 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
271 /****************************************************************************** |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
272 * GntTextView API |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
273 *****************************************************************************/ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
274 GType |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
275 gnt_text_view_get_gtype(void) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
276 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
277 static GType type = 0; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
278 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
279 if(type == 0) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
280 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
281 static const GTypeInfo info = { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
282 sizeof(GntTextViewClass), |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
283 NULL, /* base_init */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
284 NULL, /* base_finalize */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
285 (GClassInitFunc)gnt_text_view_class_init, |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
286 NULL, /* class_finalize */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
287 NULL, /* class_data */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
288 sizeof(GntTextView), |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
289 0, /* n_preallocs */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
290 gnt_text_view_init, /* instance_init */ |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
291 }; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
292 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
293 type = g_type_register_static(GNT_TYPE_WIDGET, |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
294 "GntTextView", |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
295 &info, 0); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
296 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
297 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
298 return type; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
299 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
300 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
301 GntWidget *gnt_text_view_new() |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
302 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
303 GntWidget *widget = g_object_new(GNT_TYPE_TEXTVIEW, NULL); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
304 GntTextView *view = GNT_TEXT_VIEW(widget); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
305 GntTextLine *line = g_new0(GntTextLine, 1); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
306 |
13927
9309d27d780c
[gaim-migrate @ 16447]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13896
diff
changeset
|
307 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
308 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
309 view->string = g_string_new(NULL); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
310 view->list = g_list_append(view->list, line); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
311 |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
312 return widget; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
313 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
314 |
13931
917a71dd02eb
[gaim-migrate @ 16458]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13930
diff
changeset
|
315 void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextFormatFlags flags) |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
316 { |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
317 gnt_text_view_append_text_with_tag(view, text, flags, NULL); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
318 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
319 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
320 void gnt_text_view_append_text_with_tag(GntTextView *view, const char *text, |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
321 GntTextFormatFlags flags, const char *tagname) |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
322 { |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
323 GntWidget *widget = GNT_WIDGET(view); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
324 int fl = 0; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
325 const char *start, *end; |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
326 GList *list = view->list; |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
327 GntTextLine *line; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
328 int len; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
329 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
330 if (text == NULL || *text == '\0') |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
331 return; |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
332 |
13952
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
333 fl = gnt_text_format_flag_to_chtype(flags); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
334 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
335 len = view->string->len; |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
336 view->string = g_string_append(view->string, text); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
337 |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
338 if (tagname) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
339 GntTextTag *tag = g_new0(GntTextTag, 1); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
340 tag->name = g_strdup(tagname); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
341 tag->start = len; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
342 tag->end = view->string->len; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
343 view->tags = g_list_append(view->tags, tag); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
344 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
345 |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
346 view->list = g_list_first(view->list); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
347 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
348 start = end = view->string->str + len; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
349 |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
350 while (*start) { |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
351 GntTextSegment *seg = NULL; |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
352 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
353 if (*end == '\n' || *end == '\r') { |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
354 end++; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
355 start = end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
356 gnt_text_view_next_line(view); |
14398
2377498b4698
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14397
diff
changeset
|
357 view->list = g_list_first(view->list); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
358 continue; |
14010
7573bd40a190
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13971
diff
changeset
|
359 } |
7573bd40a190
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13971
diff
changeset
|
360 |
7573bd40a190
[gaim-migrate @ 16602]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13971
diff
changeset
|
361 line = view->list->data; |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
362 if (line->length == widget->priv.width - 1) { |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
363 /* The last added line was exactly the same width as the widget */ |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
364 line = g_new0(GntTextLine, 1); |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
365 line->soft = TRUE; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
366 view->list = g_list_prepend(view->list, line); |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
367 } |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
368 |
14397
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
369 if ((end = strchr(start, '\n')) != NULL || |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
370 (end = strchr(start, '\r')) != NULL) { |
14398
2377498b4698
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14397
diff
changeset
|
371 len = gnt_util_onscreen_width(start, end - 1); |
2377498b4698
[gaim-migrate @ 17106]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14397
diff
changeset
|
372 if (len >= widget->priv.width - line->length - 1) { |
14397
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
373 end = NULL; |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
374 } |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
375 } |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
376 |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
377 if (end == NULL) |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
378 end = gnt_util_onscreen_width_to_pointer(start, |
70f52ff1caec
[gaim-migrate @ 17105]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14383
diff
changeset
|
379 widget->priv.width - line->length - 1, &len); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
380 |
14826
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
381 /* Try to append to the previous segment if possible */ |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
382 if (line->segments) { |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
383 seg = g_list_last(line->segments)->data; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
384 if (seg->flags != fl) |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
385 seg = NULL; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
386 } |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
387 |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
388 if (seg == NULL) { |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
389 seg = g_new0(GntTextSegment, 1); |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
390 seg->start = start - view->string->str; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
391 seg->tvflag = flags; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
392 seg->flags = fl; |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
393 line->segments = g_list_append(line->segments, seg); |
955798236bf4
[gaim-migrate @ 17593]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14729
diff
changeset
|
394 } |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
395 seg->end = end - view->string->str; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
396 line->length += len; |
14311
fda9dc44807d
[gaim-migrate @ 17001]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14222
diff
changeset
|
397 |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
398 start = end; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
399 if (*end && *end != '\n' && *end != '\r') { |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
400 line = g_new0(GntTextLine, 1); |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
401 line->soft = TRUE; |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
402 view->list = g_list_prepend(view->list, line); |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
403 } |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
404 } |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
405 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
406 view->list = list; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
407 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
408 gnt_widget_draw(widget); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
409 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
410 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
411 void gnt_text_view_scroll(GntTextView *view, int scroll) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
412 { |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
413 if (scroll == 0) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
414 { |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
415 view->list = g_list_first(view->list); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
416 } |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
417 else if (scroll > 0) |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
418 { |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
419 GList *list = g_list_nth_prev(view->list, scroll); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
420 if (list == NULL) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
421 list = g_list_first(view->list); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
422 view->list = list; |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
423 } |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
424 else if (scroll < 0) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
425 { |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
426 GList *list = g_list_nth(view->list, -scroll); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
427 if (list == NULL) |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
428 list = g_list_last(view->list); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
429 view->list = list; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
430 } |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
431 |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
432 gnt_widget_draw(GNT_WIDGET(view)); |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
433 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
434 |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
435 void gnt_text_view_next_line(GntTextView *view) |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
436 { |
13896
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
437 GntTextLine *line = g_new0(GntTextLine, 1); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
438 GList *list = view->list; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
439 |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
440 view->list = g_list_prepend(g_list_first(view->list), line); |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
441 view->list = list; |
a621329e8c85
[gaim-migrate @ 16381]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13888
diff
changeset
|
442 gnt_widget_draw(GNT_WIDGET(view)); |
13882
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
443 } |
5c750626eaa5
[gaim-migrate @ 16362]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
444 |
13952
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
445 chtype gnt_text_format_flag_to_chtype(GntTextFormatFlags flags) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
446 { |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
447 chtype fl = 0; |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
448 |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
449 if (flags & GNT_TEXT_FLAG_BOLD) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
450 fl |= A_BOLD; |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
451 if (flags & GNT_TEXT_FLAG_UNDERLINE) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
452 fl |= A_UNDERLINE; |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
453 if (flags & GNT_TEXT_FLAG_BLINK) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
454 fl |= A_BLINK; |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
455 |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
456 if (flags & GNT_TEXT_FLAG_DIM) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
457 fl |= (A_DIM | COLOR_PAIR(GNT_COLOR_DISABLED)); |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
458 else if (flags & GNT_TEXT_FLAG_HIGHLIGHT) |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
459 fl |= (A_DIM | COLOR_PAIR(GNT_COLOR_HIGHLIGHT)); |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
460 else |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
461 fl |= COLOR_PAIR(GNT_COLOR_NORMAL); |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
462 |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
463 return fl; |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
464 } |
841a5ffbfee4
[gaim-migrate @ 16500]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13943
diff
changeset
|
465 |
13971
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
466 void gnt_text_view_clear(GntTextView *view) |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
467 { |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
468 GntTextLine *line; |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
469 |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
470 g_list_foreach(view->list, free_text_line, NULL); |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
471 g_list_free(view->list); |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
472 view->list = NULL; |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
473 |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
474 line = g_new0(GntTextLine, 1); |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
475 view->list = g_list_append(view->list, line); |
14383
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
476 if (view->string) |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
477 g_string_free(view->string, TRUE); |
5f3058c7a7df
[gaim-migrate @ 17089]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14371
diff
changeset
|
478 view->string = g_string_new(NULL); |
13971
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
479 |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
480 if (GNT_WIDGET(view)->window) |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
481 gnt_widget_draw(GNT_WIDGET(view)); |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
482 } |
df8183b7fa2c
[gaim-migrate @ 16529]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
13952
diff
changeset
|
483 |
14030
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
484 int gnt_text_view_get_lines_below(GntTextView *view) |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
485 { |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
486 int below = 0; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
487 GList *list = view->list; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
488 while ((list = list->prev)) |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
489 ++below; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
490 return below; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
491 } |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
492 |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
493 int gnt_text_view_get_lines_above(GntTextView *view) |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
494 { |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
495 int above = 0; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
496 GList *list = view->list; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
497 list = g_list_nth(view->list, GNT_WIDGET(view)->priv.height); |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
498 if (!list) |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
499 return 0; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
500 while ((list = list->next)) |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
501 ++above; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
502 return above; |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
503 } |
0e70bb6d32fd
[gaim-migrate @ 16632]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14010
diff
changeset
|
504 |
15172
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
505 /** |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
506 * XXX: There are quite possibly more than a few bugs here. |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
507 */ |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
508 int gnt_text_view_tag_change(GntTextView *view, const char *name, const char *text, gboolean all) |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
509 { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
510 GList *list, *next, *iter, *inext; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
511 int count = 0; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
512 for (list = view->tags; list; list = next) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
513 GntTextTag *tag = list->data; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
514 next = list->next; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
515 if (strcmp(tag->name, name) == 0) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
516 int change; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
517 char *before, *after; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
518 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
519 count++; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
520 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
521 before = g_strndup(view->string->str, tag->start); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
522 after = g_strdup(view->string->str + tag->end); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
523 change = (tag->end - tag->start) - (text ? strlen(text) : 0); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
524 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
525 g_string_printf(view->string, "%s%s%s", before, text ? text : "", after); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
526 g_free(before); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
527 g_free(after); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
528 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
529 /* Update the offsets of the next tags */ |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
530 for (iter = next; iter; iter = iter->next) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
531 GntTextTag *t = iter->data; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
532 t->start -= change; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
533 t->end -= change; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
534 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
535 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
536 /* Update the offsets of the segments */ |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
537 for (iter = view->list; iter; iter = inext) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
538 GList *segs, *snext; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
539 GntTextLine *line = iter->data; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
540 inext = iter->next; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
541 for (segs = line->segments; segs; segs = snext) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
542 GntTextSegment *seg = segs->data; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
543 snext = segs->next; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
544 if (seg->start >= tag->end) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
545 seg->start -= change; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
546 seg->end -= change; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
547 continue; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
548 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
549 if (seg->end < tag->start) |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
550 continue; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
551 |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
552 if (seg->start >= tag->start && seg->end <= tag->end) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
553 free_text_segment(seg, NULL); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
554 line->segments = g_list_delete_link(line->segments, segs); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
555 if (line->segments == NULL) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
556 free_text_line(line, NULL); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
557 view->list = g_list_delete_link(view->list, iter); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
558 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
559 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
560 /* XXX: handle the rest of the conditions */ |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
561 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
562 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
563 if (text == NULL) { |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
564 /* Remove the tag */ |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
565 view->tags = g_list_delete_link(view->tags, list); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
566 free_tag(tag, NULL); |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
567 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
568 if (!all) |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
569 break; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
570 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
571 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
572 return count; |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
573 } |
a00712d0522e
[gaim-migrate @ 17957]
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
14881
diff
changeset
|
574 |