MAGIC Magic Mailing List
 
 

From: R. Timothy Edwards (tim AT stravinsky DOT jhuapl.edu)
Date: Mon Mar 08 2004 - 11:23:12 EST

  • Next message: R. Timothy Edwards: "RE: Tk dialog behavior"

    Dear Calin,
    
    > I just upgraded magic to the latest 7.2 version -- 7.2.62. It fixes
    > an old bug which made my x server crash when trying to display the
    > toolbar.
    
    From which version did you upgrade?  I don't recall making any changes
    in recent revisions which would affect the toolbar.  A while back,
    though, I changed the behavior so that the toolbar doesn't come up
    immediately, but has to be brought up from the "Options" menu.
    If it comes up at the same time as the window, some window managers
    don't give the correct answer for the window size, which the toolbar
    needs to know to adjust its size accordingly.
    
    > This release 7.2.62 has the following features:
    > - on the upper right corner is a "(number1 number2) lambda" text
    > displayed.  If i move the mouse so that the number1 becomes negative
    > the window becomes wider. If i move it again so that the number1
    > becomes >=0 the windows shrinks 
    
    It is entirely possible that the "feature" is in Tcl/Tk, not magic.
    Tk is responsible for the title bar in the Tcl-based version of magic.
    Tk resizes its message windows in response to a change in the text.
    Maybe what's going on is that the name of the edit cell is so long
    that Tk runs out of space for all the text, and consequently resizes
    the whole window to get the space it needs.  If this is really
    annoying, there are ways to force Tk to avoid resizing the title bar.
    I haven't noticed this behavior before, but then I am usually working
    in a layout window of 1400 pixels across.  Does this behavior change
    depending on whether the toolbar is present or not?
    
    > - if i draw something in magic and want to quit using only the
    > keyboard:
    > ;quit
    > The dialog box apperars asking me if i want to looose the magic cell
    > which has been modified. The no button is the default however i press
    > <TAB> the yes button becames default and then i press <ENTER>. The
    > dialog dissapears but the magic doesn't quits but it displays the
    > following in it's tkcon window:
    > ;quit
    > 0
    > %
    
    I ran magic under the debugger and set a breakpoint after the tk_dialog
    function returns.  I was surprised to see that the dialog had returned
    the response "no" even though the "tab" key had clearly changed what
    I assume to be the default setting to "yes".  The function returned 0
    ("no") which is what shows up in the console.  I have concluded that
    the Tk "tk_dialog" function, while apparently responding to the "tab"
    key, is not changing its behavior except to move the little black box
    around.  This "feature" belongs to Tk, not to magic.  It probably
    depends heavily on the window manager.  I notice that my WM (twm)
    doesn't respond to Tk's request for keyboard focus on a widget unless
    the Tk option "focus -force" is used.  You can work around this problem
    by altering the script for tk_dialog, which can be found in (depending on
    the installation and Tk version) /usr/local/lib/tk8.3/dialog.tcl.
    Change the script at around line 124 to:
    
        # 4. Create a binding for <Return> on the dialog if there is a
        # default button.
    
        set tkPriv(default) $default
        if {$default >= 0} {
            bind $w <Return> [subst {
            \[list $w.button\$tkPriv(default)\] configure -state active -relief sunken
            update idletasks
            after 100
            set tkPriv(button) \$tkPriv(default)
            }]
    
            bind $w <Tab> [subst {
            \[list $w.button\$tkPriv(default)\] configure -default normal
            incr tkPriv(default)
            if {\$tkPriv(default) == [llength [grid slaves $w.bot]]} {set tkPriv(default) 0}
            \[list $w.button\$tkPriv(default)\] configure -default active
            focus -force $w.button\$tkPriv(default)
            update idletasks
            }]
        }
    
    You may also want to change item 7 at line 165 so that "focus" becomes
    "focus -force":
    
        # 7. Set a grab and claim the focus too.
    
        set oldFocus [focus]
        set oldGrab [grab current $w]
        if {[string compare $oldGrab ""]} {
            set grabStatus [grab status $oldGrab]
        }
        grab $w
        if {$default >= 0} {
            focus -force $w.button$default
        } else {
            focus -force $w 
        }   
    
    These changes should not otherwise affect the operation of tk_dialog.
    
    					Regards,
    					Tim
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo