simon-git: putty (master): Simon Tatham

Commits to Tartarus CVS repository. tartarus-commits at lists.tartarus.org
Tue Mar 22 22:27:26 GMT 2016


TL;DR:
  eac66b0 Divide the whole of gtkwin.c into three parts.

Repository:     git://git.tartarus.org/simon/putty.git
On the web:     http://tartarus.org/~simon-git/gitweb/?p=putty.git
Branch updated: master
Committer:      Simon Tatham <anakin at pobox.com>
Date:           2016-03-22 22:27:26

commit eac66b0281f30be97094fe94174e65477b018812
web diff http://tartarus.org/~simon-git/gitweb/?p=putty.git;a=commitdiff;h=eac66b0281f30be97094fe94174e65477b018812;hp=a5588cd6353d43a5ada8e4a866b896372574cea5
Author: Simon Tatham <anakin at pobox.com>
Date:   Tue Mar 22 21:24:30 2016 +0000

    Divide the whole of gtkwin.c into three parts.
    
    This lays further groundwork for the OS X GTK3 port, which is going to
    have to deal with multiple sessions sharing the same process. gtkwin.c
    was a bit too monolithic for this, since it included some
    process-global runtime state (timers, toplevel callbacks), some
    process startup stuff (gtk_init, gtk_main, argv processing) and some
    per-session-window stuff.
    
    The per-session stuff remains in gtkwin.c, with the top-level function
    now being new_session_window() taking a Conf. The new gtkmain.c
    contains the outer skeleton of pt_main(), handling argv processing and
    one-off startup stuff like setlocale; and the new gtkcomm.c contains
    the pieces of PuTTY infrastructure like timers and uxsel that are
    shared between multiple sessions rather than reinstantiated per
    session, which have been rewritten to use global variables rather than
    fields in 'inst' (since it's now clear to me that they'll have to
    apply to all the insts in existence at once).
    
    There are still some lurking assumptions of one-session-per-process,
    e.g. the use of gtk_main_quit when a session finishes, and the fact
    that the config box insists on running as a separate invocation of
    gtk_main so that one session's preliminary config box can't coexist
    with another session already active. But this should make it possible
    to at least write an OS X app good enough to start testing with, even
    if it doesn't get everything quite right yet.
    
    This change is almost entirely rearranging existing code, so it
    shouldn't be seriously destabilising. But two noticeable actual
    changes have happened, both pleasantly simplifying:
    
    Firstly, the global-variables rewrite of gtkcomm.c has allowed the
    post_main edifice to become a great deal simpler. Most of its
    complexity was about remembering what 'inst' it had to call back to,
    and in fact the right answer is that it shouldn't be calling back to
    one at all. So now the post_main() called by gtkdlg.c has become the
    same function as the old inst_post_main() that actually did the work,
    instead of the two having to be connected by a piece of ugly plumbing.
    
    Secondly, a piece of code that's vanished completely in this
    refactoring is the temporary blocking of SIGCHLD around most of the
    session setup code. This turns out to have been introduced in 2002,
    _before_ I switched to using the intra-process signal pipe strategy
    for SIGCHLD handling in 2003. So I now expect that we should be robust
    in any case against receiving SIGCHLD at an inconvenient moment, and
    hence there's no need to block it.

 Recipe         |    9 +-
 unix/gtkcomm.c |  272 ++++++++++++++++++
 unix/gtkmain.c |  617 ++++++++++++++++++++++++++++++++++++++++
 unix/gtkwin.c  |  852 ++------------------------------------------------------
 unix/unix.h    |   12 +
 unix/uxpty.c   |    8 +-
 6 files changed, 937 insertions(+), 833 deletions(-)



More information about the tartarus-commits mailing list