And everyone's favourite cosmetic change: Unix PuTTY now doesn't
[sgt/putty] / unix / pterm.c
index d04b9e3..177e53a 100644 (file)
@@ -184,6 +184,17 @@ static Mouse_Button translate_button(Mouse_Button button)
 }
 
 /*
+ * Return the top-level GtkWindow associated with a particular
+ * front end instance.
+ */
+void *get_window(void *frontend)
+{
+    Terminal *term = (Terminal *)frontend;
+    struct gui_data *inst = (struct gui_data *)term->frontend;
+    return inst->window;
+}
+
+/*
  * Minimise or restore the window in response to a server-side
  * request.
  */
@@ -1948,6 +1959,7 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg)
 {
     int err = 0;
     extern char **pty_argv;           /* declared in pty.c */
+    extern int use_pty_argv;
 
     /*
      * Macros to make argument handling easier. Note that because
@@ -2054,7 +2066,7 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg)
                cfg->colours[index][2] = col.blue / 256;
            }
 
-       } else if (!strcmp(p, "-e")) {
+       } else if (use_pty_argv && !strcmp(p, "-e")) {
            /* This option swallows all further arguments. */
            if (!do_everything)
                break;
@@ -2219,9 +2231,10 @@ void uxsel_input_remove(int id) {
     gdk_input_remove(id);
 }
 
-int main(int argc, char **argv)
+int pt_main(int argc, char **argv)
 {
-    extern void pty_pre_init(void);    /* declared in pty.c */
+    extern Backend *select_backend(Config *cfg);
+    extern int cfgbox(Config *cfg);
     struct gui_data *inst;
     int font_charset;
 
@@ -2229,8 +2242,6 @@ int main(int argc, char **argv)
      * it */
     block_signal(SIGCHLD, 1);
 
-    pty_pre_init();
-
     gtk_init(&argc, &argv);
 
     /*
@@ -2246,6 +2257,9 @@ int main(int argc, char **argv)
     if (do_cmdline(argc, argv, 1, &inst->cfg))
        exit(1);                       /* post-defaults, do everything */
 
+    if (!cfgbox(&inst->cfg))
+       exit(0);                       /* config box hit Cancel */
+
     inst->fonts[0] = gdk_font_load(inst->cfg.font.name);
     if (!inst->fonts[0]) {
        fprintf(stderr, "pterm: unable to load font \"%s\"\n",
@@ -2295,11 +2309,6 @@ int main(int argc, char **argv)
 
     inst->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
-    if (inst->cfg.wintitle[0])
-       set_title(inst, inst->cfg.wintitle);
-    else
-       set_title(inst, "pterm");
-
     /*
      * Set up the colour map.
      */
@@ -2397,9 +2406,22 @@ int main(int argc, char **argv)
 
     uxsel_init();
 
-    inst->back = &pty_backend;
-    inst->back->init((void *)inst->term, &inst->backhandle, &inst->cfg,
-                    NULL, 0, NULL, 0);
+    inst->back = select_backend(&inst->cfg);
+    {
+       char *realhost;
+
+       inst->back->init((void *)inst->term, &inst->backhandle, &inst->cfg,
+                        inst->cfg.host, inst->cfg.port, &realhost,
+                        inst->cfg.tcp_nodelay);
+
+        if (inst->cfg.wintitle[0])
+            set_title(inst, inst->cfg.wintitle);
+        else {
+            char *title = make_default_wintitle(realhost);
+            set_title(inst, title);
+            sfree(title);
+        }
+    }
     inst->back->provide_logctx(inst->backhandle, inst->logctx);
 
     term_provide_resize_fn(inst->term, inst->back->size, inst->backhandle);