4 #include <gdk/gdkkeysyms.h>
16 static void on_window_destroy(GtkWidget
*widget
, gpointer data
)
21 static void scroll(struct txtwin
*tw
, int page
, int count
)
23 int val
= gtk_adjustment_get_value(tw
->adjst
);
24 int max
= gtk_adjustment_get_upper(tw
->adjst
) -
25 gtk_adjustment_get_page_size(tw
->adjst
);
26 int step
= page
? gtk_adjustment_get_page_increment(tw
->adjst
) :
27 gtk_adjustment_get_step_increment(tw
->adjst
);
33 gtk_adjustment_set_value(tw
->adjst
, val
);
36 static gboolean
on_key_press(GtkWidget
*widget
, GdkEventKey
*event
,
39 struct txtwin
*tw
= data
;
40 int mod
= event
->state
& gtk_accelerator_get_default_mod_mask();
41 if (mod
== GDK_CONTROL_MASK
) {
42 switch(event
->keyval
) {
54 switch(event
->keyval
) {
70 struct txtwin
*txtwin_alloc()
74 struct txtwin
*tw
= xmalloc(sizeof(struct txtwin
));
75 memset(tw
, 0, sizeof(*tw
));
76 window
= gtk_window_new(GTK_WINDOW_TOPLEVEL
);
77 gtk_window_set_title(GTK_WINDOW(window
), "CNOOR");
78 g_signal_connect(G_OBJECT(window
), "destroy",
79 G_CALLBACK(on_window_destroy
), NULL
);
81 vbox
= gtk_vbox_new(FALSE
, 2);
82 gtk_container_add(GTK_CONTAINER(window
), vbox
);
84 /* create the textview */
85 tw
->main
= gtk_text_view_new();
86 gtk_box_pack_start(GTK_BOX(vbox
), tw
->main
, 1, 1, 0);
87 gtk_signal_connect(GTK_OBJECT(tw
->main
), "key_press_event",
88 GTK_SIGNAL_FUNC(on_key_press
), tw
);
89 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tw
->main
),
91 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tw
->main
), FALSE
);
93 /* add the adjustment */
94 tw
->adjst
= GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 9, 10));
95 gtk_widget_set_scroll_adjustments(tw
->main
, NULL
, tw
->adjst
);
97 /* create the minibuffer */
98 tw
->bar
= gtk_entry_new();
99 gtk_box_pack_start(GTK_BOX(vbox
), tw
->bar
, 0, 0, 0);
100 gtk_signal_connect(GTK_OBJECT(tw
->bar
), "key_press_event",
101 GTK_SIGNAL_FUNC(on_key_press
), tw
);
103 gtk_widget_show_all(window
);
107 void txtwin_free(struct txtwin
*tw
)
112 void txtwin_loop(struct txtwin
*tw
)
117 void txtwin_gtk_init(int argc
, char **argv
)
119 gtk_init(&argc
, &argv
);
122 static GtkTextBuffer
*txtwin_buffer(struct txtwin
*tw
)
124 return gtk_text_view_get_buffer(GTK_TEXT_VIEW(tw
->main
));
127 void txtwin_append(struct txtwin
*tw
, char *s
, char *tag
)
130 GtkTextBuffer
*buf
= txtwin_buffer(tw
);
131 gtk_text_buffer_get_end_iter(buf
, &iter
);
132 gtk_text_buffer_insert_with_tags_by_name(buf
, &iter
, s
, strlen(s
),
136 void txtwin_tag(struct txtwin
*tw
, char *name
, char *fg
, char *bg
, char *font
)
138 GtkTextBuffer
*buf
= txtwin_buffer(tw
);
139 gtk_text_buffer_create_tag(buf
, name
,