/* $NetBSD: gtk_main.c,v 1.1.1.2 2008/05/18 14:31:22 aymeric Exp $ */ /*- * Copyright (c) 1999 * Sven Verdoolaege. All rights reserved. * * See the LICENSE file for redistribution information. */ #include "config.h" #include #include #include #include #include #include #include "../common/common.h" #include "../ipc/ip.h" #include #include "gtkvi.h" #include "gtkviwindow.h" #include "gtkviscreen.h" #include "../gtk/extern.h" static void vi_destroyed __P((GtkWidget*,GtkWidget*)); static void vi_rename __P((GtkWidget*,gchar*,GtkWidget*)); static void vi_quit __P((GtkViWindow*, int)); static void win_toplevel(GtkViWindow *win); static void create_toplevel(GtkVi *vi); static GtkItemFactoryEntry menu_items[] = { { "/_File", NULL, NULL, 0, "" }, { "/File/E_xit", NULL, vi_quit, 1, NULL }, { "/File/_Quit", NULL, vi_quit, 0, NULL }, { "/_Window", NULL, NULL, 0, "" }, { "/Window/New Window", NULL, win_toplevel, 0, NULL }, #if 0 /*wrong argument anyway*/ { "/Window/Show Terminal", NULL, gtk_vi_show_term, 1, NULL }, { "/Window/Show Vi", NULL, gtk_vi_show_term, 0, NULL }, #endif }; static int n_toplevel = 0; int main(int argc, char **argv) { GtkVi *vi; gtk_set_locale (); gtk_init (&argc, &argv); gtk_vi_init(&vi, argc, argv); create_toplevel(vi); gtk_main(); return 0; } static void win_toplevel(GtkViWindow *win) { create_toplevel(win->vi); } static void create_toplevel(GtkVi *vi) { GtkWidget *window; GtkWidget *box, *menubar; GtkWidget *vi_window; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); GtkItemFactory *factory; GtkAccelGroup *accel; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); ++n_toplevel; box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), box); gtk_widget_show(box); vi_window = gtk_vi_window_new(vi); accel = gtk_accel_group_new(); factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", accel); gtk_item_factory_create_items (factory, nmenu_items, menu_items, (gpointer)vi_window); gtk_accel_group_attach(accel, GTK_OBJECT(window)); menubar = gtk_item_factory_get_widget (factory, "
"); gtk_widget_show(menubar); gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0); gtk_accel_group_attach(accel, GTK_OBJECT(vi_window)); gtk_widget_show(vi_window); gtk_signal_connect(GTK_OBJECT(vi_window), "rename", GTK_SIGNAL_FUNC(vi_rename), window); gtk_signal_connect(GTK_OBJECT(GTK_VI_WINDOW(vi_window)->vi_screen), "destroy", GTK_SIGNAL_FUNC(vi_destroyed), window); gtk_box_pack_start(GTK_BOX(box), vi_window, TRUE, TRUE, 0); /* gtk_widget_grab_focus(GTK_WIDGET(vi->vi)); */ gtk_widget_show(window); } static void vi_quit(GtkViWindow *vi, gint write) { gtk_vi_quit(vi, write); } static void vi_destroyed(GtkWidget *vi, GtkWidget *window) { gtk_widget_destroy(window); if (!--n_toplevel) gtk_main_quit(); } static void vi_rename(GtkWidget *vi, gchar *name, GtkWidget *window) { gtk_window_set_title(GTK_WINDOW(window), name); }