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