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