X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/85b1c49f319475d24329deaeaa7f0953d83bb589..c9739dba40b647342cbc8b93ac0c431849454c50:/unix/gtkwin.c diff --git a/unix/gtkwin.c b/unix/gtkwin.c index 11c9c21d..a377ad65 100644 --- a/unix/gtkwin.c +++ b/unix/gtkwin.c @@ -663,13 +663,12 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data) end = 2; } - /* Control-Break is the same as Control-C */ + /* Control-Break sends a Break special to the backend */ if (event->keyval == GDK_Break && (event->state & GDK_CONTROL_MASK)) { - output[1] = '\003'; - use_ucsoutput = FALSE; - end = 2; - special = TRUE; + if (inst->back) + inst->back->special(inst->backhandle, TS_BRK); + return TRUE; } /* We handle Return ourselves, because it needs to be flagged as @@ -1205,6 +1204,7 @@ void notify_remote_exit(void *frontend) inst->back->free(inst->backhandle); inst->backhandle = NULL; inst->back = NULL; + term_provide_resize_fn(inst->term, NULL, NULL); update_specials_menu(inst); } gtk_widget_show(inst->restartitem); @@ -1434,7 +1434,7 @@ void palette_reset(void *frontend) int r = i / 36, g = (i / 6) % 6, b = i % 6; inst->cols[i+16].red = r ? r * 0x2828 + 0x3737 : 0; inst->cols[i+16].green = g ? g * 0x2828 + 0x3737 : 0; - inst->cols[i+16].blue = b ? b + 0x2828 + 0x3737 : 0; + inst->cols[i+16].blue = b ? b * 0x2828 + 0x3737 : 0; } else { int shade = i - 216; shade = shade * 0x0a0a + 0x0808; @@ -1867,7 +1867,7 @@ void sys_cursor(void *frontend, int x, int y) */ void do_beep(void *frontend, int mode) { - if (mode != BELL_VISUAL) + if (mode == BELL_DEFAULT) gdk_beep(); } @@ -2408,7 +2408,7 @@ static void help(FILE *fp) { } } -int do_cmdline(int argc, char **argv, int do_everything, +int do_cmdline(int argc, char **argv, int do_everything, int *allow_launch, struct gui_data *inst, Config *cfg) { int err = 0; @@ -2614,7 +2614,8 @@ int do_cmdline(int argc, char **argv, int do_everything, exit(1); } else if(p[0] != '-' && (!do_everything || - process_nonoption_arg(p, cfg))) { + process_nonoption_arg(p, cfg, + allow_launch))) { /* do nothing */ } else { @@ -3305,6 +3306,7 @@ void set_window_icon(GtkWidget *window, const char *const *const *icon, int n_icon) { GdkPixmap *iconpm; + GdkBitmap *iconmask; #if GTK_CHECK_VERSION(2,0,0) GList *iconlist; int n; @@ -3314,9 +3316,9 @@ void set_window_icon(GtkWidget *window, const char *const *const *icon, return; gtk_widget_realize(window); - iconpm = gdk_pixmap_create_from_xpm_d(window->window, NULL, + iconpm = gdk_pixmap_create_from_xpm_d(window->window, &iconmask, NULL, (gchar **)icon[0]); - gdk_window_set_icon(window->window, NULL, iconpm, NULL); + gdk_window_set_icon(window->window, NULL, iconpm, iconmask); #if GTK_CHECK_VERSION(2,0,0) iconlist = NULL; @@ -3476,15 +3478,23 @@ int pt_main(int argc, char **argv) /* Splatter this argument so it doesn't clutter a ps listing */ memset(argv[1], 0, strlen(argv[1])); } else { - if (do_cmdline(argc, argv, 0, inst, &inst->cfg)) + /* By default, we bring up the config dialog, rather than launching + * a session. This gets set to TRUE if something happens to change + * that (e.g., a hostname is specified on the command-line). */ + int allow_launch = FALSE; + if (do_cmdline(argc, argv, 0, &allow_launch, inst, &inst->cfg)) exit(1); /* pre-defaults pass to get -class */ do_defaults(NULL, &inst->cfg); - if (do_cmdline(argc, argv, 1, inst, &inst->cfg)) + if (do_cmdline(argc, argv, 1, &allow_launch, inst, &inst->cfg)) exit(1); /* post-defaults, do everything */ cmdline_run_saved(&inst->cfg); - if (!cfg_launchable(&inst->cfg) && !cfgbox(&inst->cfg)) + if (loaded_session) + allow_launch = TRUE; + + if ((!allow_launch || !cfg_launchable(&inst->cfg)) && + !cfgbox(&inst->cfg)) exit(0); /* config box hit Cancel */ }