1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/*=======================================*\
| ____ ____ |
| / \ /\ | |
| \____ / \ |____ |
| \ /____\ | |
| \____/prite / \nimation |____ditor |
| |
| Copyleft Vasily_Makarov 2011 |
| |
\*=======================================*/
GtkWidget *find_entry;
static gboolean find_text() {
gboolean found;
gchar *text = gtk_entry_get_text(find_entry);
GtkTextIter m_start, m_end, start;
gtk_text_buffer_get_selection_bounds(source_buffer, NULL, &start);
found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL);
if (!found) {
gtk_text_buffer_get_start_iter(source_buffer, &start);
found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL);
}
if (found) {
gtk_text_buffer_place_cursor(source_buffer, &m_start);
gtk_text_buffer_move_mark_by_name(source_buffer, "selection_bound", &m_end);
gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (source_view),
gtk_text_buffer_get_insert (source_buffer),
0.25,
FALSE,
0.0,
0.0);
return TRUE;
} else
return FALSE;
}
static GtkWidget *find_window_new(GtkWindow *parent) {
GtkWidget *dialog;
GtkWidget *vbox;
GtkWidget *entry;
GtkWidget *content_area;
GtkWidget *label;
dialog = gtk_dialog_new_with_buttons (_("Find"),
parent,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_FIND,
GTK_RESPONSE_NONE,
NULL);
content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
label = gtk_label_new(_("Text:"));
gtk_container_add(GTK_CONTAINER(content_area), label);
entry = gtk_entry_new();
gtk_container_add(GTK_CONTAINER(content_area), entry);
find_entry = entry;
g_signal_connect(dialog,
"response",
G_CALLBACK(find_text),
NULL);
return dialog;
}
|