char wintitle[sizeof(((Config *)0)->wintitle)];
char icontitle[sizeof(((Config *)0)->wintitle)];
int master_fd, master_func_id, exited;
+ void *ldisc;
};
static struct gui_data the_inst;
static struct gui_data *inst = &the_inst; /* so we always write `inst->' */
static int send_raw_mouse;
-void ldisc_update(int echo, int edit)
+void ldisc_update(void *frontend, int echo, int edit)
{
/*
* This is a stub in pterm. If I ever produce a Unix
printf("\n");
#endif
- ldisc_send(output+start, end-start, 1);
+ ldisc_send(inst->ldisc, output+start, end-start, 1);
show_mouseptr(0);
term_seen_key_event(term);
term_out(term);
}
}
-void frontend_keypress(void)
+void frontend_keypress(void *handle)
{
+ struct gui_data *inst = (struct gui_data *)handle;
+
/*
* If our child process has exited but not closed, terminate on
* any keypress.
n, r, g, b);
}
+void set_window_background(void)
+{
+ if (inst->area && inst->area->window)
+ gdk_window_set_background(inst->area->window, &inst->cols[18]);
+ if (inst->window && inst->window->window)
+ gdk_window_set_background(inst->window->window, &inst->cols[18]);
+}
+
void palette_set(int n, int r, int g, int b)
{
static const int first[21] = {
real_palette_set(first[n], r, g, b);
if (first[n] >= 18)
real_palette_set(first[n] + 1, r, g, b);
+ if (first[n] == 18)
+ set_window_background();
}
void palette_reset(void)
g_error("pterm: couldn't allocate colour %d (#%02x%02x%02x)\n",
i, cfg.colours[i][0], cfg.colours[i][1], cfg.colours[i][2]);
}
+
+ set_window_background();
}
void write_clip(wchar_t * data, int len, int must_deselect)
if (do_cmdline(argc, argv, 1)) /* post-defaults, do everything */
exit(1);
+ /*
+ * Initialise the whole instance structure to zeroes
+ */
+ memset(inst, 0, sizeof(*inst));
+
inst->fonts[0] = gdk_font_load(cfg.font);
if (!inst->fonts[0]) {
fprintf(stderr, "pterm: unable to load font \"%s\"\n", cfg.font);
gtk_widget_show(GTK_WIDGET(inst->hbox));
gtk_widget_show(inst->window);
+ set_window_background();
+
inst->textcursor = make_mouse_ptr(GDK_XTERM);
inst->rawcursor = make_mouse_ptr(GDK_LEFT_PTR);
inst->blankcursor = make_mouse_ptr(-1);
back = &pty_backend;
back->init((void *)term, &backhandle, NULL, 0, NULL, 0);
+ term_provide_resize_fn(term, back->size, backhandle);
+
term_size(term, cfg.height, cfg.width, cfg.savelines);
- ldisc_send(NULL, 0, 0); /* cause ldisc to notice changes */
+
+ inst->ldisc = ldisc_create(term, back, backhandle, inst);
+ ldisc_send(inst->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */
inst->master_fd = pty_master_fd;
inst->exited = FALSE;