xref: /netbsd-src/external/bsd/nvi/dist/gtk/gtk_main.c (revision 8d01a27e2b735e802aea2b531dbc8b21a5af4376)
1dbd550edSchristos /*-
2dbd550edSchristos  * Copyright (c) 1999
3dbd550edSchristos  *	Sven Verdoolaege.  All rights reserved.
4dbd550edSchristos  *
5dbd550edSchristos  * See the LICENSE file for redistribution information.
6dbd550edSchristos  */
7dbd550edSchristos 
8dbd550edSchristos #include "config.h"
9dbd550edSchristos 
10dbd550edSchristos #include <sys/types.h>
11dbd550edSchristos #include <sys/queue.h>
12dbd550edSchristos #include <bitstring.h>
13dbd550edSchristos 
14dbd550edSchristos #include <sys/time.h>
15dbd550edSchristos #include <sys/types.h>
16dbd550edSchristos #include <unistd.h>
17dbd550edSchristos 
18dbd550edSchristos #include "../common/common.h"
19dbd550edSchristos #include "../ipc/ip.h"
20dbd550edSchristos 
21dbd550edSchristos #include <gtk/gtk.h>
22dbd550edSchristos #include "gtkvi.h"
23dbd550edSchristos #include "gtkviwindow.h"
24dbd550edSchristos #include "gtkviscreen.h"
25*8d01a27eSchristos #include "gtk_extern.h"
26dbd550edSchristos 
27dbd550edSchristos static void vi_destroyed __P((GtkWidget*,GtkWidget*));
28dbd550edSchristos static void vi_rename __P((GtkWidget*,gchar*,GtkWidget*));
29dbd550edSchristos static void vi_quit __P((GtkViWindow*, int));
30dbd550edSchristos 
31dbd550edSchristos static void win_toplevel(GtkViWindow *win);
32dbd550edSchristos static void create_toplevel(GtkVi *vi);
33dbd550edSchristos 
34dbd550edSchristos static GtkItemFactoryEntry menu_items[] = {
35dbd550edSchristos     { "/_File",	   	NULL,	    NULL,	    0,	"<Branch>" },
36dbd550edSchristos     { "/File/E_xit",	NULL,	    vi_quit,	    1,  NULL },
37dbd550edSchristos     { "/File/_Quit",	NULL,	    vi_quit,	    0,  NULL },
38dbd550edSchristos     { "/_Window",   	NULL,	    NULL,	    0,	"<Branch>" },
39dbd550edSchristos     { "/Window/New Window",	NULL,	 win_toplevel,	0, NULL },
40dbd550edSchristos #if 0 /*wrong argument anyway*/
41dbd550edSchristos     { "/Window/Show Terminal",	NULL,    gtk_vi_show_term,    1,  NULL },
42dbd550edSchristos     { "/Window/Show Vi",	NULL,    gtk_vi_show_term,    0,  NULL },
43dbd550edSchristos #endif
44dbd550edSchristos };
45dbd550edSchristos 
46dbd550edSchristos static int n_toplevel = 0;
47dbd550edSchristos 
48dbd550edSchristos int
main(int argc,char ** argv)49dbd550edSchristos main(int argc, char **argv)
50dbd550edSchristos {
51dbd550edSchristos 	GtkVi	*vi;
52dbd550edSchristos 
53dbd550edSchristos 	gtk_set_locale ();
54dbd550edSchristos 
55dbd550edSchristos 	gtk_init (&argc, &argv);
56dbd550edSchristos 
57dbd550edSchristos 	gtk_vi_init(&vi, argc, argv);
58dbd550edSchristos 
59dbd550edSchristos 	create_toplevel(vi);
60dbd550edSchristos 
61dbd550edSchristos 	gtk_main();
62dbd550edSchristos 
63dbd550edSchristos 	return 0;
64dbd550edSchristos }
65dbd550edSchristos 
66dbd550edSchristos static
win_toplevel(GtkViWindow * win)67dbd550edSchristos void win_toplevel(GtkViWindow *win)
68dbd550edSchristos {
69dbd550edSchristos     create_toplevel(win->vi);
70dbd550edSchristos }
71dbd550edSchristos 
72dbd550edSchristos static
create_toplevel(GtkVi * vi)73dbd550edSchristos void create_toplevel(GtkVi *vi)
74dbd550edSchristos {
75dbd550edSchristos 	GtkWidget *window;
76dbd550edSchristos 	GtkWidget *box, *menubar;
77dbd550edSchristos 	GtkWidget *vi_window;
78dbd550edSchristos 	gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
79dbd550edSchristos 	GtkItemFactory *factory;
80dbd550edSchristos 	GtkAccelGroup *accel;
81dbd550edSchristos 
82dbd550edSchristos 	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
83dbd550edSchristos 	++n_toplevel;
84dbd550edSchristos 
85dbd550edSchristos 	box = gtk_vbox_new(FALSE, 0);
86dbd550edSchristos 	gtk_container_add(GTK_CONTAINER(window), box);
87dbd550edSchristos 	gtk_widget_show(box);
88dbd550edSchristos 
89dbd550edSchristos 	vi_window = gtk_vi_window_new(vi);
90dbd550edSchristos 
91dbd550edSchristos 	accel = gtk_accel_group_new();
92dbd550edSchristos 	factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel);
93dbd550edSchristos 	gtk_item_factory_create_items (factory, nmenu_items, menu_items, (gpointer)vi_window);
94dbd550edSchristos 	gtk_accel_group_attach(accel, GTK_OBJECT(window));
95dbd550edSchristos 	menubar = gtk_item_factory_get_widget (factory, "<main>");
96dbd550edSchristos 	gtk_widget_show(menubar);
97dbd550edSchristos 	gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);
98dbd550edSchristos 
99dbd550edSchristos 	gtk_accel_group_attach(accel, GTK_OBJECT(vi_window));
100dbd550edSchristos 	gtk_widget_show(vi_window);
101dbd550edSchristos 
102dbd550edSchristos 	gtk_signal_connect(GTK_OBJECT(vi_window), "rename",
103dbd550edSchristos 			   GTK_SIGNAL_FUNC(vi_rename),
104dbd550edSchristos 			   window);
105dbd550edSchristos 	gtk_signal_connect(GTK_OBJECT(GTK_VI_WINDOW(vi_window)->vi_screen), "destroy",
106dbd550edSchristos 			   GTK_SIGNAL_FUNC(vi_destroyed),
107dbd550edSchristos 			   window);
108dbd550edSchristos 	gtk_box_pack_start(GTK_BOX(box), vi_window, TRUE, TRUE, 0);
109dbd550edSchristos 
110dbd550edSchristos 	/*
111dbd550edSchristos 	gtk_widget_grab_focus(GTK_WIDGET(vi->vi));
112dbd550edSchristos 	*/
113dbd550edSchristos 
114dbd550edSchristos 	gtk_widget_show(window);
115dbd550edSchristos }
116dbd550edSchristos 
117dbd550edSchristos static void
vi_quit(GtkViWindow * vi,gint write)118dbd550edSchristos vi_quit(GtkViWindow *vi, gint write)
119dbd550edSchristos {
120dbd550edSchristos 	gtk_vi_quit(vi, write);
121dbd550edSchristos }
122dbd550edSchristos 
123dbd550edSchristos static void
vi_destroyed(GtkWidget * vi,GtkWidget * window)124dbd550edSchristos vi_destroyed(GtkWidget *vi, GtkWidget *window)
125dbd550edSchristos {
126dbd550edSchristos 	gtk_widget_destroy(window);
127dbd550edSchristos 	if (!--n_toplevel)
128dbd550edSchristos 		gtk_main_quit();
129dbd550edSchristos }
130dbd550edSchristos 
131dbd550edSchristos static void
vi_rename(GtkWidget * vi,gchar * name,GtkWidget * window)132dbd550edSchristos vi_rename(GtkWidget *vi, gchar *name, GtkWidget *window)
133dbd550edSchristos {
134dbd550edSchristos 	gtk_window_set_title(GTK_WINDOW(window), name);
135dbd550edSchristos }
136