]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - unix/gtkwin.c
Add a general way to request an immediate top-level callback.
[PuTTY.git] / unix / gtkwin.c
index 667c72b3076f118140bc4b8a4bb8407bc8cb2546..2b66073954398bc7465da4db2d2f81d1caa47bb6 100644 (file)
@@ -95,6 +95,7 @@ struct gui_data {
     int busy_status;
     guint term_paste_idle_id;
     guint term_exit_idle_id;
+    guint toplevel_callback_idle_id;
     int alt_keycode;
     int alt_digits;
     char *wintitle;
@@ -1399,6 +1400,25 @@ void notify_remote_exit(void *frontend)
     inst->term_exit_idle_id = gtk_idle_add(idle_exit_func, inst);
 }
 
+static gint idle_toplevel_callback_func(gpointer data)
+{
+    struct gui_data *inst = (struct gui_data *)data;
+
+    run_toplevel_callbacks();
+
+    gtk_idle_remove(inst->toplevel_callback_idle_id);
+
+    return TRUE;
+}
+
+void notify_toplevel_callback(void *frontend)
+{
+    struct gui_data *inst = (struct gui_data *)frontend;
+
+    inst->toplevel_callback_idle_id =
+        gtk_idle_add(idle_toplevel_callback_func, inst);
+}
+
 static gint timer_trigger(gpointer data)
 {
     unsigned long now = GPOINTER_TO_LONG(data);
@@ -3858,6 +3878,8 @@ int pt_main(int argc, char **argv)
 
     inst->eventlogstuff = eventlogstuff_new();
 
+    request_callback_notifications(notify_toplevel_callback, inst);
+
     inst->term = term_init(inst->conf, &inst->ucsdata, inst);
     inst->logctx = log_init(inst, inst->conf);
     term_provide_logctx(inst->term, inst->logctx);