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