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