1dbd550edSchristos /* change further to gtkviwindow have no knowledge of ipvi */
2dbd550edSchristos #include "config.h"
3dbd550edSchristos
4dbd550edSchristos #include <gdk/gdkkeysyms.h>
5dbd550edSchristos #include <gtk/gtk.h>
6dbd550edSchristos #if 0
7dbd550edSchristos #ifdef HAVE_ZVT
8dbd550edSchristos #include <zvt/zvtterm.h>
9dbd550edSchristos #include <zvt/vt.h>
10dbd550edSchristos #endif
11dbd550edSchristos #endif
12dbd550edSchristos
13dbd550edSchristos #include "../common/common.h"
14dbd550edSchristos #include "../ipc/ip.h"
15dbd550edSchristos
16dbd550edSchristos #include "gtkvi.h"
17dbd550edSchristos #include "gtkviscreen.h"
18dbd550edSchristos #include "gtkviwindow.h"
19*8d01a27eSchristos #include "gtk_extern.h"
20dbd550edSchristos
21dbd550edSchristos enum {
22dbd550edSchristos RENAME,
23dbd550edSchristos LAST_SIGNAL
24dbd550edSchristos };
25dbd550edSchristos
26dbd550edSchristos static void gtk_vi_window_class_init (GtkViWindowClass *klass);
27dbd550edSchristos static void gtk_vi_window_init (GtkViWindow *vi);
28dbd550edSchristos static void gtk_vi_window_destroy (GtkObject *object);
29dbd550edSchristos
30dbd550edSchristos static int vi_key_press_event __P((GtkWidget*, GdkEventKey*, GtkViWindow*));
31dbd550edSchristos static void vi_map __P((GtkWidget *, GtkWidget*));
32dbd550edSchristos static void vi_resized __P((GtkWidget *, int, int, IPVIWIN*));
33dbd550edSchristos static void vi_adjustment_value_changed __P((GtkAdjustment *, IPVIWIN *));
34dbd550edSchristos
35dbd550edSchristos static void vi_input_func __P((gpointer , gint , GdkInputCondition));
36dbd550edSchristos
37dbd550edSchristos static void vi_init_window __P((GtkViWindow *window, int));
38dbd550edSchristos
39dbd550edSchristos static int vi_addstr __P((IPVIWIN*, const char *, u_int32_t));
40dbd550edSchristos static int vi_waddstr __P((IPVIWIN*, const CHAR_T *, u_int32_t));
41dbd550edSchristos static int vi_attribute __P((IPVIWIN*,u_int32_t ,u_int32_t ));
42dbd550edSchristos static int vi_bell __P((IPVIWIN*));
43dbd550edSchristos static int vi_busyon __P((IPVIWIN*, const char *, u_int32_t));
44dbd550edSchristos static int vi_busyoff __P((IPVIWIN*));
45dbd550edSchristos static int vi_clrtoeol __P((IPVIWIN*));
46dbd550edSchristos static int vi_deleteln __P((IPVIWIN*));
47dbd550edSchristos static int vi_discard __P((IPVIWIN*));
48dbd550edSchristos static int vi_editopt __P((IPVIWIN*, const char *, u_int32_t,
49dbd550edSchristos const char *, u_int32_t, u_int32_t));
50dbd550edSchristos static int vi_insertln __P((IPVIWIN*));
51dbd550edSchristos static int vi_move __P((IPVIWIN*, u_int32_t, u_int32_t));
52dbd550edSchristos static int vi_quit __P((IPVIWIN*));
53dbd550edSchristos static int vi_redraw __P((IPVIWIN*));
54dbd550edSchristos static int vi_refresh __P((IPVIWIN*));
55dbd550edSchristos static int vi_rename __P((IPVIWIN*, const char *, u_int32_t));
56dbd550edSchristos static int vi_rewrite __P((IPVIWIN*, u_int32_t));
57dbd550edSchristos static int vi_scrollbar __P((IPVIWIN*, u_int32_t, u_int32_t , u_int32_t ));
58dbd550edSchristos static int vi_select __P((IPVIWIN*, const char *, u_int32_t));
59dbd550edSchristos static int vi_split __P((IPVIWIN*));
60dbd550edSchristos static int vi_ex_init __P((IPVIWIN*));
61dbd550edSchristos static int vi_vi_init __P((IPVIWIN*));
62dbd550edSchristos static int vi_fork __P((IPVIWIN*));
63dbd550edSchristos
64dbd550edSchristos static GtkWidgetClass *parent_class = NULL;
65dbd550edSchristos static guint vi_window_signals[LAST_SIGNAL] = { 0 };
66dbd550edSchristos
67dbd550edSchristos GtkType
gtk_vi_window_get_type(void)68dbd550edSchristos gtk_vi_window_get_type (void)
69dbd550edSchristos {
70dbd550edSchristos static GtkType vi_window_type = 0;
71dbd550edSchristos
72dbd550edSchristos if (!vi_window_type)
73dbd550edSchristos {
74dbd550edSchristos static const GtkTypeInfo vi_window_info =
75dbd550edSchristos {
76dbd550edSchristos "GtkViWindow",
77dbd550edSchristos sizeof (GtkViWindow),
78dbd550edSchristos sizeof (GtkViWindowClass),
79dbd550edSchristos (GtkClassInitFunc) gtk_vi_window_class_init,
80dbd550edSchristos (GtkObjectInitFunc) gtk_vi_window_init,
81dbd550edSchristos /* reserved_1 */ NULL,
82dbd550edSchristos /* reserved_2 */ NULL,
83dbd550edSchristos (GtkClassInitFunc) NULL,
84dbd550edSchristos };
85dbd550edSchristos
86dbd550edSchristos vi_window_type = gtk_type_unique (GTK_TYPE_NOTEBOOK, &vi_window_info);
87dbd550edSchristos }
88dbd550edSchristos
89dbd550edSchristos return vi_window_type;
90dbd550edSchristos }
91dbd550edSchristos
92dbd550edSchristos static void
gtk_vi_window_class_init(GtkViWindowClass * class)93dbd550edSchristos gtk_vi_window_class_init (GtkViWindowClass *class)
94dbd550edSchristos {
95dbd550edSchristos GtkObjectClass *object_class;
96dbd550edSchristos
97dbd550edSchristos object_class = (GtkObjectClass*) class;
98dbd550edSchristos parent_class = gtk_type_class (GTK_TYPE_WIDGET);
99dbd550edSchristos
100dbd550edSchristos vi_window_signals[RENAME] =
101dbd550edSchristos gtk_signal_new ("rename",
102dbd550edSchristos GTK_RUN_FIRST,
103dbd550edSchristos GTK_CLASS_TYPE(object_class),
104dbd550edSchristos GTK_SIGNAL_OFFSET (GtkViScreenClass, rename),
105dbd550edSchristos gtk_marshal_VOID__STRING,
106dbd550edSchristos GTK_TYPE_NONE, 1, GTK_TYPE_STRING, 0);
107dbd550edSchristos
108dbd550edSchristos #ifndef HAVE_PANGO
109dbd550edSchristos gtk_object_class_add_signals(object_class, vi_window_signals, LAST_SIGNAL);
110dbd550edSchristos #endif
111dbd550edSchristos
112dbd550edSchristos object_class->destroy = gtk_vi_window_destroy;
113dbd550edSchristos }
114dbd550edSchristos
115dbd550edSchristos static void
gtk_vi_window_init(GtkViWindow * vi)116dbd550edSchristos gtk_vi_window_init (GtkViWindow *vi)
117dbd550edSchristos {
118dbd550edSchristos }
119dbd550edSchristos
120dbd550edSchristos GtkWidget *
gtk_vi_window_new(GtkVi * vi)121dbd550edSchristos gtk_vi_window_new (GtkVi *vi)
122dbd550edSchristos {
123dbd550edSchristos GtkViWindow* window;
124dbd550edSchristos GtkWidget *vi_widget;
125dbd550edSchristos GtkWidget *vscroll;
126dbd550edSchristos GtkWidget *table;
127dbd550edSchristos GtkWidget *term;
128dbd550edSchristos int fd;
129dbd550edSchristos #ifdef HAVE_ZVT
130dbd550edSchristos int pty[2];
131dbd550edSchristos #endif
132dbd550edSchristos
133dbd550edSchristos window = gtk_type_new(gtk_vi_window_get_type());
134dbd550edSchristos
135dbd550edSchristos window->vi = vi;
136dbd550edSchristos //vi->vi_window = GTK_WIDGET(window);
137dbd550edSchristos
138dbd550edSchristos vi_widget = gtk_vi_screen_new(NULL);
139dbd550edSchristos gtk_widget_show(GTK_WIDGET(vi_widget));
140dbd550edSchristos /*
141dbd550edSchristos vi->vi = vi_widget;
142dbd550edSchristos */
143dbd550edSchristos window->vi_screen = vi_widget;
144dbd550edSchristos
145dbd550edSchristos vscroll = gtk_vscrollbar_new(GTK_VI_SCREEN(vi_widget)->vadj);
146dbd550edSchristos gtk_widget_show(vscroll);
147dbd550edSchristos
148dbd550edSchristos table = gtk_table_new(2, 2, FALSE);
149dbd550edSchristos gtk_table_attach_defaults(GTK_TABLE(table), GTK_WIDGET(vi_widget),
150dbd550edSchristos 0, 1, 0, 1);
151dbd550edSchristos gtk_table_attach(GTK_TABLE(table), vscroll, 1, 2, 0, 1,
152dbd550edSchristos (GtkAttachOptions)0, GTK_FILL, 0, 0);
153dbd550edSchristos gtk_widget_show(table);
154dbd550edSchristos gtk_signal_connect(GTK_OBJECT(table), "map", GTK_SIGNAL_FUNC(vi_map),
155dbd550edSchristos vi_widget/*->ipvi*/);
156dbd550edSchristos window->table = table;
157dbd550edSchristos
158dbd550edSchristos
159dbd550edSchristos gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window), FALSE);
160dbd550edSchristos gtk_notebook_set_show_border(GTK_NOTEBOOK(window), FALSE);
161dbd550edSchristos gtk_notebook_append_page(GTK_NOTEBOOK(window), table, NULL);
162dbd550edSchristos
163dbd550edSchristos term = 0;
164dbd550edSchristos fd = -1;
165dbd550edSchristos
166dbd550edSchristos #if 0
167dbd550edSchristos #ifdef HAVE_ZVT
168dbd550edSchristos term = zvt_term_new();
169dbd550edSchristos zvt_term_set_blink(ZVT_TERM(term), FALSE);
170dbd550edSchristos zvt_term_get_ptys(ZVT_TERM(term), 0, pty);
171dbd550edSchristos fd = pty[1]; /* slave */
172dbd550edSchristos gtk_widget_show(term);
173dbd550edSchristos gtk_notebook_append_page(GTK_NOTEBOOK(window), term, NULL);
174dbd550edSchristos #endif
175dbd550edSchristos #endif
176dbd550edSchristos window->term = term;
177dbd550edSchristos
178dbd550edSchristos vi_init_window(window, fd);
179dbd550edSchristos
180dbd550edSchristos gtk_signal_connect(GTK_OBJECT(vi_widget), "resized",
181dbd550edSchristos GTK_SIGNAL_FUNC(vi_resized), window->ipviwin);
182dbd550edSchristos gtk_signal_connect(GTK_OBJECT(vi_widget), "key_press_event",
183dbd550edSchristos (GtkSignalFunc) vi_key_press_event, window);
184dbd550edSchristos window->value_changed =
185dbd550edSchristos gtk_signal_connect(GTK_OBJECT(GTK_VI_SCREEN(vi_widget)->vadj),
186dbd550edSchristos "value_changed",
187dbd550edSchristos (GtkSignalFunc) vi_adjustment_value_changed, window->ipviwin);
188dbd550edSchristos
189dbd550edSchristos return GTK_WIDGET(window);
190dbd550edSchristos }
191dbd550edSchristos
192dbd550edSchristos static void
gtk_vi_window_destroy(GtkObject * object)193dbd550edSchristos gtk_vi_window_destroy (GtkObject *object)
194dbd550edSchristos {
195dbd550edSchristos GtkViWindow *vi_window;
196dbd550edSchristos
197dbd550edSchristos g_return_if_fail (object != NULL);
198dbd550edSchristos g_return_if_fail (GTK_IS_VI_WINDOW (object));
199dbd550edSchristos
200dbd550edSchristos vi_window = (GtkViWindow*) object;
201dbd550edSchristos
202dbd550edSchristos if (vi_window->table) {
203dbd550edSchristos gtk_signal_disconnect_by_data(GTK_OBJECT(vi_window->table),
204dbd550edSchristos vi_window->vi_screen);
205dbd550edSchristos vi_window->table = 0;
206dbd550edSchristos }
207dbd550edSchristos
208dbd550edSchristos if (vi_window->vi_screen) {
209dbd550edSchristos gtk_signal_disconnect_by_data(GTK_OBJECT(vi_window->vi_screen),
210dbd550edSchristos vi_window->ipviwin);
211dbd550edSchristos gtk_signal_disconnect(GTK_OBJECT(GTK_VI_SCREEN(vi_window->vi_screen)->vadj),
212dbd550edSchristos vi_window->value_changed);
213dbd550edSchristos gtk_widget_destroy(vi_window->vi_screen);
214dbd550edSchristos vi_window->vi_screen = 0;
215dbd550edSchristos }
216dbd550edSchristos
217dbd550edSchristos GTK_OBJECT_CLASS(parent_class)->destroy (object);
218dbd550edSchristos }
219dbd550edSchristos
220dbd550edSchristos void
gtk_vi_window_scrollbar(GtkViWindow * vi,guint top,guint size,guint max)221dbd550edSchristos gtk_vi_window_scrollbar(GtkViWindow *vi, guint top, guint size, guint max)
222dbd550edSchristos {
223dbd550edSchristos GtkViScreen *vi_screen;
224dbd550edSchristos /* work around gcc bug */
225dbd550edSchristos volatile guint mymax = max;
226dbd550edSchristos volatile guint mysize = size;
227dbd550edSchristos
228dbd550edSchristos vi_screen = GTK_VI_SCREEN(vi->vi_screen);
229dbd550edSchristos vi_screen->vadj->value = top;
230dbd550edSchristos vi_screen->vadj->upper = mymax;
231dbd550edSchristos vi_screen->vadj->page_size =
232dbd550edSchristos vi_screen->vadj->page_increment = mysize;
233dbd550edSchristos gtk_signal_handler_block(GTK_OBJECT(vi_screen->vadj), vi->value_changed);
234dbd550edSchristos gtk_adjustment_changed(vi_screen->vadj);
235dbd550edSchristos /*
236dbd550edSchristos gtk_adjustment_value_changed(vi_screen->vadj);
237dbd550edSchristos */
238dbd550edSchristos gtk_signal_handler_unblock(GTK_OBJECT(vi_screen->vadj), vi->value_changed);
239dbd550edSchristos }
240dbd550edSchristos
241dbd550edSchristos /*
242dbd550edSchristos * PUBLIC: void gtk_vi_quit __P((GtkViWindow*, gint));
243dbd550edSchristos */
244dbd550edSchristos void
gtk_vi_quit(vi,write)245dbd550edSchristos gtk_vi_quit(vi, write)
246dbd550edSchristos GtkViWindow *vi;
247dbd550edSchristos gint write;
248dbd550edSchristos {
249dbd550edSchristos if (write)
250dbd550edSchristos vi->ipviwin->wq(vi->ipviwin);
251dbd550edSchristos else
252dbd550edSchristos vi->ipviwin->quit(vi->ipviwin);
253dbd550edSchristos }
254dbd550edSchristos
255dbd550edSchristos /*
256dbd550edSchristos * PUBLIC: void gtk_vi_show_term __P((GtkViWindow*, gint));
257dbd550edSchristos */
258dbd550edSchristos void
gtk_vi_show_term(window,show)259dbd550edSchristos gtk_vi_show_term(window, show)
260dbd550edSchristos GtkViWindow *window;
261dbd550edSchristos gint show;
262dbd550edSchristos {
263dbd550edSchristos gtk_notebook_set_page(GTK_NOTEBOOK(window), show ? 1 : 0);
264dbd550edSchristos }
265dbd550edSchristos
266dbd550edSchristos /*
267dbd550edSchristos * PUBLIC: void gtk_vi_key_press_event __P((GtkViWindow*, GdkEventKey*));
268dbd550edSchristos */
269dbd550edSchristos void
gtk_vi_key_press_event(window,event)270dbd550edSchristos gtk_vi_key_press_event(window, event)
271dbd550edSchristos GtkViWindow *window;
272dbd550edSchristos GdkEventKey *event;
273dbd550edSchristos {
274dbd550edSchristos #if 0
275dbd550edSchristos static struct {
276dbd550edSchristos guint key;
277dbd550edSchristos gint offset;
278dbd550edSchristos } table[] = {
279dbd550edSchristos {GDK_Home, GTK_STRUCT_OFFSET(IPVI, c_bol) },
280dbd550edSchristos //{VI_C_BOTTOM, GTK_STRUCT_OFFSET(IPVI, c_bottom) },
281dbd550edSchristos {GDK_End, GTK_STRUCT_OFFSET(IPVI, c_eol) },
282dbd550edSchristos {GDK_Insert, GTK_STRUCT_OFFSET(IPVI, c_insert) },
283dbd550edSchristos {GDK_Left, GTK_STRUCT_OFFSET(IPVI, c_left) },
284dbd550edSchristos {GDK_Right, GTK_STRUCT_OFFSET(IPVI, c_right) },
285dbd550edSchristos //{VI_C_TOP, GTK_STRUCT_OFFSET(IPVI, c_top) },
286dbd550edSchristos };
287dbd550edSchristos #endif
288dbd550edSchristos static struct {
289dbd550edSchristos guint keyval;
290dbd550edSchristos char key;
291dbd550edSchristos } table[] = {
292dbd550edSchristos { GDK_Left, 'h' },
293dbd550edSchristos { GDK_Right, 'l' },
294dbd550edSchristos { GDK_Up, 'k' },
295dbd550edSchristos { GDK_Down, 'j' },
296dbd550edSchristos { GDK_Page_Up, 'B' - '@' },
297dbd550edSchristos { GDK_Page_Down, 'F' - '@' },
298dbd550edSchristos };
299dbd550edSchristos char key = event->keyval;
300dbd550edSchristos int i;
301dbd550edSchristos
302dbd550edSchristos #if 0
303dbd550edSchristos for (i = 0; i < sizeof(table)/sizeof(*table); ++i)
304dbd550edSchristos if (table[i].key == event->keyval) {
305dbd550edSchristos int (*fun) __P((IPVI*)) =
306dbd550edSchristos *(int (**) __P((IPVI*)) )(((char *)vi->ipvi)+table[i].offset);
307dbd550edSchristos fun(vi->ipvi);
308dbd550edSchristos return;
309dbd550edSchristos }
310dbd550edSchristos #endif
311dbd550edSchristos for (i = 0; i < sizeof(table)/sizeof(*table); ++i)
312dbd550edSchristos if (table[i].keyval == event->keyval) {
313dbd550edSchristos window->ipviwin->string(window->ipviwin, &table[i].key, 1);
314dbd550edSchristos return;
315dbd550edSchristos }
316dbd550edSchristos
317dbd550edSchristos if (event->state & GDK_CONTROL_MASK) {
318dbd550edSchristos if ((key >= 'a') && (key <= 'z'))
319dbd550edSchristos key -= 'a' - 'A';
320dbd550edSchristos key -= '@';
321dbd550edSchristos }
322dbd550edSchristos /*
323dbd550edSchristos fprintf(stderr, "key_press %d %d %d %c %p\n",
324dbd550edSchristos event->length, event->keyval, event->keyval, key, ipvi);
325dbd550edSchristos */
326dbd550edSchristos if (event->length > 0)
327dbd550edSchristos window->ipviwin->string(window->ipviwin, &key, 1);
328dbd550edSchristos }
329dbd550edSchristos
330dbd550edSchristos
331dbd550edSchristos
332dbd550edSchristos static int
vi_key_press_event(vi_screen,event,vi)333dbd550edSchristos vi_key_press_event(vi_screen, event, vi)
334dbd550edSchristos GtkViWindow *vi;
335dbd550edSchristos GtkWidget *vi_screen;
336dbd550edSchristos GdkEventKey *event;
337dbd550edSchristos {
338dbd550edSchristos gint handled;
339dbd550edSchristos
340dbd550edSchristos handled = gtk_accel_groups_activate (GTK_OBJECT (vi),
341dbd550edSchristos event->keyval, (GdkModifierType) event->state);
342dbd550edSchristos if (handled)
343dbd550edSchristos return 1;
344dbd550edSchristos
345dbd550edSchristos gtk_vi_key_press_event(vi, event);
346dbd550edSchristos gtk_signal_emit_stop_by_name(GTK_OBJECT(vi_screen), "key_press_event");
347dbd550edSchristos /* handled */
348dbd550edSchristos return 1;
349dbd550edSchristos }
350dbd550edSchristos
351dbd550edSchristos static void
vi_map(table,vi_screen)352dbd550edSchristos vi_map(table, vi_screen)
353dbd550edSchristos GtkWidget *vi_screen;
354dbd550edSchristos GtkWidget *table;
355dbd550edSchristos {
356dbd550edSchristos gtk_widget_grab_focus(vi_screen);
357dbd550edSchristos }
358dbd550edSchristos
359dbd550edSchristos static void
vi_resized(vi_screen,rows,cols,ipviwin)360dbd550edSchristos vi_resized(vi_screen, rows, cols, ipviwin)
361dbd550edSchristos int rows,cols;
362dbd550edSchristos IPVIWIN *ipviwin;
363dbd550edSchristos GtkWidget *vi_screen;
364dbd550edSchristos {
365dbd550edSchristos GtkViWindow *vi_window = GTK_VI_WINDOW((GtkVi*)(ipviwin->private_data));
366dbd550edSchristos
367dbd550edSchristos ipviwin->resize(ipviwin, rows, cols);
368dbd550edSchristos vi_window->resized = 1;
369dbd550edSchristos }
370dbd550edSchristos
371dbd550edSchristos static void
vi_adjustment_value_changed(adjustment,ipviwin)372dbd550edSchristos vi_adjustment_value_changed (adjustment, ipviwin)
373dbd550edSchristos GtkAdjustment *adjustment;
374dbd550edSchristos IPVIWIN *ipviwin;
375dbd550edSchristos {
376dbd550edSchristos GtkViWindow *vi_window = GTK_VI_WINDOW((GtkVi*)(ipviwin->private_data));
377dbd550edSchristos
378dbd550edSchristos if (vi_window->resized)
379dbd550edSchristos ipviwin->c_settop(ipviwin, adjustment->value);
380dbd550edSchristos }
381dbd550edSchristos
382dbd550edSchristos
383dbd550edSchristos static void
vi_input_func(gpointer data,gint source,GdkInputCondition condition)384dbd550edSchristos vi_input_func (gpointer data, gint source, GdkInputCondition condition)
385dbd550edSchristos {
386dbd550edSchristos IPVIWIN *ipviwin = (IPVIWIN *) data;
387dbd550edSchristos
388dbd550edSchristos (void)ipviwin->input(ipviwin, source);
389dbd550edSchristos }
390dbd550edSchristos
391dbd550edSchristos static void
vi_init_window(GtkViWindow * window,int fd)392dbd550edSchristos vi_init_window (GtkViWindow *window, int fd)
393dbd550edSchristos {
394dbd550edSchristos static struct ip_si_operations ipsi_ops_gtk = {
395dbd550edSchristos vi_addstr,
396dbd550edSchristos vi_attribute,
397dbd550edSchristos vi_bell,
398dbd550edSchristos vi_busyoff,
399dbd550edSchristos vi_busyon,
400dbd550edSchristos vi_clrtoeol,
401dbd550edSchristos vi_deleteln,
402dbd550edSchristos vi_discard,
403dbd550edSchristos vi_editopt,
404dbd550edSchristos vi_insertln,
405dbd550edSchristos vi_move,
406dbd550edSchristos vi_quit,
407dbd550edSchristos vi_redraw,
408dbd550edSchristos vi_refresh,
409dbd550edSchristos vi_rename,
410dbd550edSchristos vi_rewrite,
411dbd550edSchristos vi_scrollbar,
412dbd550edSchristos vi_select,
413dbd550edSchristos vi_split,
414dbd550edSchristos (IPFunc_a)vi_waddstr,
415dbd550edSchristos };
416dbd550edSchristos GtkVi *vi = window->vi;
417dbd550edSchristos
418dbd550edSchristos vi->ipvi->new_window(vi->ipvi, &window->ipviwin, fd);
419dbd550edSchristos
420dbd550edSchristos window->ipviwin->private_data = window;
421dbd550edSchristos window->ipviwin->set_ops(window->ipviwin, &ipsi_ops_gtk);
422dbd550edSchristos window->input_func = gtk_input_add_full(window->ipviwin->ifd,
423dbd550edSchristos GDK_INPUT_READ,
424dbd550edSchristos vi_input_func, 0, (gpointer)window->ipviwin, 0);
425dbd550edSchristos }
426dbd550edSchristos
427dbd550edSchristos static int
vi_addstr(ipviwin,str,len)428dbd550edSchristos vi_addstr(ipviwin, str, len)
429dbd550edSchristos IPVIWIN *ipviwin;
430dbd550edSchristos const char *str;
431dbd550edSchristos u_int32_t len;
432dbd550edSchristos {
433dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
434dbd550edSchristos
435dbd550edSchristos gtk_vi_screen_addstr(GTK_VI_SCREEN(vi->vi_screen), str, len);
436dbd550edSchristos return (0);
437dbd550edSchristos }
438dbd550edSchristos
439dbd550edSchristos static int
vi_waddstr(ipviwin,str,len)440dbd550edSchristos vi_waddstr(ipviwin, str, len)
441dbd550edSchristos IPVIWIN *ipviwin;
442dbd550edSchristos const CHAR_T *str;
443dbd550edSchristos u_int32_t len;
444dbd550edSchristos {
445dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
446dbd550edSchristos
447dbd550edSchristos gtk_vi_screen_waddstr(GTK_VI_SCREEN(vi->vi_screen), str, len/sizeof(CHAR_T));
448dbd550edSchristos return (0);
449dbd550edSchristos }
450dbd550edSchristos
451dbd550edSchristos static int
vi_attribute(ipviwin,attribute,on)452dbd550edSchristos vi_attribute(ipviwin,attribute,on)
453dbd550edSchristos IPVIWIN *ipviwin;
454dbd550edSchristos u_int32_t attribute, on;
455dbd550edSchristos {
456dbd550edSchristos GtkViWindow* window = (GtkViWindow*)(ipviwin->private_data);
457dbd550edSchristos
458dbd550edSchristos if (attribute == SA_ALTERNATE) {
459dbd550edSchristos gtk_vi_show_term(window, !on);
460dbd550edSchristos }
461dbd550edSchristos else
462dbd550edSchristos gtk_vi_screen_attribute(GTK_VI_SCREEN(window->vi_screen), attribute, on);
463dbd550edSchristos return (0);
464dbd550edSchristos }
465dbd550edSchristos
466dbd550edSchristos static int
vi_bell(ipbp)467dbd550edSchristos vi_bell(ipbp)
468dbd550edSchristos IPVIWIN *ipbp;
469dbd550edSchristos {
470dbd550edSchristos /*
471dbd550edSchristos fprintf(stderr, "vi_bell\n");
472dbd550edSchristos */
473dbd550edSchristos #if 0
474dbd550edSchristos /*
475dbd550edSchristos * XXX
476dbd550edSchristos * Future... implement visible bell.
477dbd550edSchristos */
478dbd550edSchristos XBell(XtDisplay(__vi_screen->area), 0);
479dbd550edSchristos #endif
480dbd550edSchristos return (0);
481dbd550edSchristos }
482dbd550edSchristos
483dbd550edSchristos static int
vi_busyon(IPVIWIN * ipviwin,const char * a,u_int32_t s)484dbd550edSchristos vi_busyon (IPVIWIN* ipviwin, const char *a, u_int32_t s)
485dbd550edSchristos {
486dbd550edSchristos /*
487dbd550edSchristos fprintf(stderr, "vi_busyon\n");
488dbd550edSchristos */
489dbd550edSchristos #if 0
490dbd550edSchristos __vi_set_cursor(__vi_screen, 1);
491dbd550edSchristos #endif
492dbd550edSchristos return (0);
493dbd550edSchristos }
494dbd550edSchristos
495dbd550edSchristos static int
vi_busyoff(ipbp)496dbd550edSchristos vi_busyoff(ipbp)
497dbd550edSchristos IPVIWIN *ipbp;
498dbd550edSchristos {
499dbd550edSchristos /*
500dbd550edSchristos fprintf(stderr, "vi_busyoff\n");
501dbd550edSchristos */
502dbd550edSchristos #if 0
503dbd550edSchristos __vi_set_cursor(__vi_screen, 0);
504dbd550edSchristos #endif
505dbd550edSchristos return (0);
506dbd550edSchristos }
507dbd550edSchristos
508dbd550edSchristos static int
vi_clrtoeol(ipviwin)509dbd550edSchristos vi_clrtoeol(ipviwin)
510dbd550edSchristos IPVIWIN *ipviwin;
511dbd550edSchristos {
512dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
513dbd550edSchristos
514dbd550edSchristos gtk_vi_screen_clrtoel(GTK_VI_SCREEN(vi->vi_screen));
515dbd550edSchristos return 0;
516dbd550edSchristos }
517dbd550edSchristos
518dbd550edSchristos static int
vi_deleteln(ipviwin)519dbd550edSchristos vi_deleteln(ipviwin)
520dbd550edSchristos IPVIWIN *ipviwin;
521dbd550edSchristos {
522dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
523dbd550edSchristos
524dbd550edSchristos gtk_vi_screen_deleteln(GTK_VI_SCREEN(vi->vi_screen));
525dbd550edSchristos return (0);
526dbd550edSchristos }
527dbd550edSchristos
528dbd550edSchristos static int
vi_editopt(IPVIWIN * a,const char * b,u_int32_t c,const char * d,u_int32_t e,u_int32_t f)529dbd550edSchristos vi_editopt (IPVIWIN* a, const char *b, u_int32_t c,
530dbd550edSchristos const char *d, u_int32_t e, u_int32_t f)
531dbd550edSchristos {
532dbd550edSchristos /*
533dbd550edSchristos fprintf(stderr, "%p %p vi_editopt\n", a, a->private_data);
534dbd550edSchristos */
535dbd550edSchristos #if 0
536dbd550edSchristos /* XXX: Nothing. */
537dbd550edSchristos #endif
538dbd550edSchristos return (0);
539dbd550edSchristos }
540dbd550edSchristos
541dbd550edSchristos
542dbd550edSchristos static int
vi_discard(ipbp)543dbd550edSchristos vi_discard(ipbp)
544dbd550edSchristos IPVIWIN *ipbp;
545dbd550edSchristos {
546dbd550edSchristos /*
547dbd550edSchristos fprintf(stderr, "vi_discard\n");
548dbd550edSchristos */
549dbd550edSchristos #if 0
550dbd550edSchristos /* XXX: Nothing. */
551dbd550edSchristos #endif
552dbd550edSchristos return (0);
553dbd550edSchristos }
554dbd550edSchristos
555dbd550edSchristos static int
vi_insertln(ipviwin)556dbd550edSchristos vi_insertln(ipviwin)
557dbd550edSchristos IPVIWIN *ipviwin;
558dbd550edSchristos {
559dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
560dbd550edSchristos
561dbd550edSchristos gtk_vi_screen_insertln(GTK_VI_SCREEN(vi->vi_screen));
562dbd550edSchristos return (0);
563dbd550edSchristos }
564dbd550edSchristos
565dbd550edSchristos static int
vi_move(ipviwin,row,col)566dbd550edSchristos vi_move(ipviwin, row, col)
567dbd550edSchristos IPVIWIN *ipviwin;
568dbd550edSchristos u_int32_t row;
569dbd550edSchristos u_int32_t col;
570dbd550edSchristos {
571dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
572dbd550edSchristos
573dbd550edSchristos gtk_vi_screen_move(GTK_VI_SCREEN(vi->vi_screen), row, col);
574dbd550edSchristos return (0);
575dbd550edSchristos }
576dbd550edSchristos
577dbd550edSchristos static int
vi_redraw(ipviwin)578dbd550edSchristos vi_redraw(ipviwin)
579dbd550edSchristos IPVIWIN *ipviwin;
580dbd550edSchristos {
581dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
582dbd550edSchristos
583dbd550edSchristos gtk_widget_draw(GTK_WIDGET(vi->vi_screen), NULL);
584dbd550edSchristos return (0);
585dbd550edSchristos }
586dbd550edSchristos
587dbd550edSchristos static int
vi_refresh(ipviwin)588dbd550edSchristos vi_refresh(ipviwin)
589dbd550edSchristos IPVIWIN *ipviwin;
590dbd550edSchristos {
591dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
592dbd550edSchristos
593dbd550edSchristos gtk_vi_screen_refresh(GTK_VI_SCREEN(vi->vi_screen));
594dbd550edSchristos return (0);
595dbd550edSchristos }
596dbd550edSchristos
597dbd550edSchristos static int
vi_quit(ipviwin)598dbd550edSchristos vi_quit(ipviwin)
599dbd550edSchristos IPVIWIN *ipviwin;
600dbd550edSchristos {
601dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
602dbd550edSchristos
603dbd550edSchristos gtk_input_remove(vi->input_func);
604dbd550edSchristos gtk_widget_destroy(GTK_WIDGET(vi));
605dbd550edSchristos return (0);
606dbd550edSchristos }
607dbd550edSchristos
608dbd550edSchristos static int
vi_rename(ipviwin,str,len)609dbd550edSchristos vi_rename(ipviwin, str, len)
610dbd550edSchristos IPVIWIN *ipviwin;
611dbd550edSchristos const char *str;
612dbd550edSchristos u_int32_t len;
613dbd550edSchristos {
614dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
615dbd550edSchristos
616dbd550edSchristos gchar* name = g_strndup(str, len);
617dbd550edSchristos gtk_signal_emit_by_name(GTK_OBJECT(vi), "rename", name);
618dbd550edSchristos g_free(name);
619dbd550edSchristos return (0);
620dbd550edSchristos }
621dbd550edSchristos
622dbd550edSchristos static int
vi_rewrite(ipviwin,row)623dbd550edSchristos vi_rewrite(ipviwin, row)
624dbd550edSchristos IPVIWIN *ipviwin;
625dbd550edSchristos u_int32_t row;
626dbd550edSchristos {
627dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
628dbd550edSchristos
629dbd550edSchristos gtk_vi_screen_rewrite(GTK_VI_SCREEN(vi->vi_screen), row);
630dbd550edSchristos return (0);
631dbd550edSchristos }
632dbd550edSchristos
633dbd550edSchristos
634dbd550edSchristos static int
vi_scrollbar(ipviwin,top,size,max)635dbd550edSchristos vi_scrollbar(ipviwin, top, size, max)
636dbd550edSchristos IPVIWIN *ipviwin;
637dbd550edSchristos u_int32_t top, size, max;
638dbd550edSchristos {
639dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
640dbd550edSchristos
641dbd550edSchristos gtk_vi_window_scrollbar(vi, top, size, max);
642dbd550edSchristos
643dbd550edSchristos return (0);
644dbd550edSchristos }
645dbd550edSchristos
vi_select(IPVIWIN * a,const char * b,u_int32_t c)646dbd550edSchristos static int vi_select (IPVIWIN* a, const char * b, u_int32_t c)
647dbd550edSchristos {
648dbd550edSchristos /*
649dbd550edSchristos fprintf(stderr, "vi_select\n");
650dbd550edSchristos */
651dbd550edSchristos #if 0
652dbd550edSchristos /* XXX: Nothing. */
653dbd550edSchristos #endif
654dbd550edSchristos return (0);
655dbd550edSchristos }
656dbd550edSchristos
657dbd550edSchristos static int
vi_split(ipbp)658dbd550edSchristos vi_split(ipbp)
659dbd550edSchristos IPVIWIN *ipbp;
660dbd550edSchristos {
661dbd550edSchristos fprintf(stderr, "vi_split\n");
662dbd550edSchristos #if 0
663dbd550edSchristos /* XXX: Nothing. */
664dbd550edSchristos #endif
665dbd550edSchristos return (0);
666dbd550edSchristos }
667dbd550edSchristos
668dbd550edSchristos static int
vi_ex_init(ipviwin)669dbd550edSchristos vi_ex_init(ipviwin)
670dbd550edSchristos IPVIWIN *ipviwin;
671dbd550edSchristos {
672dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
673dbd550edSchristos
674dbd550edSchristos /*
675dbd550edSchristos gtk_vi_show_term(vi, 1);
676dbd550edSchristos */
677dbd550edSchristos return 0;
678dbd550edSchristos }
679dbd550edSchristos
680dbd550edSchristos static int
vi_vi_init(ipviwin)681dbd550edSchristos vi_vi_init(ipviwin)
682dbd550edSchristos IPVIWIN *ipviwin;
683dbd550edSchristos {
684dbd550edSchristos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data);
685dbd550edSchristos
686dbd550edSchristos /*
687dbd550edSchristos gtk_vi_show_term(vi, 0);
688dbd550edSchristos */
689dbd550edSchristos return 0;
690dbd550edSchristos }
691