home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / tcl / 1288 < prev    next >
Encoding:
Text File  |  1992-09-01  |  3.5 KB  |  119 lines

  1. Newsgroups: comp.lang.tcl
  2. Path: sparky!uunet!newsgate.watson.ibm.com!yktnews!admin!dv2t1!shmdgljd
  3. From: shmdgljd@rchland.vnet.ibm.com (Jay Schmidgall)
  4. Subject: Re: Motif-like message/error/warning dialogs 
  5. Sender: news@rchland.ibm.com
  6. Message-ID: <1992Sep01.140451.19406@rchland.ibm.com>
  7. Date: Tue, 01 Sep 1992 14:04:51 GMT
  8. Reply-To: jay@vnet.ibm.com
  9. Disclaimer: This posting represents the poster's views, not necessarily those of IBM
  10. References:  <1992Aug31.204753.2556@twg.com>
  11. Nntp-Posting-Host: dv2t1.rchland.ibm.com
  12. Organization: IBM Rochester, MN
  13. Lines: 104
  14.  
  15. Here's a quickie patch to the msgdialog script to make the dialog more
  16. like Motif's in that it is transient and grouped with the parent.  This
  17. lets it duplicate Motif's dialog box behavior of iconifying the dialog
  18. when the parent is iconified.  It also causes the parent to be raised
  19. when the dialog box is popped.  (of course, this is all under mwm -- no
  20. idea what other wm's will do).  I've also include a DLG:position proc
  21. which centers the dialog box over the parent.
  22.  
  23. ../src/Tk> diff -c msgdialog.tk.old msgdialog.tk
  24. *** msgdialog.tk.old    Tue Sep  1 08:54:17 1992
  25. --- msgdialog.tk    Tue Sep  1 08:55:10 1992
  26. ***************
  27. *** 66,80 ****
  28.       global $done
  29.       set $done 0
  30.   
  31. -     set px [winfo x $parent]
  32. -     set py [winfo y $parent]
  33. -     set ph [winfo screenheight $parent]
  34. -     set pw [winfo screenwidth  $parent]
  35.       toplevel $w -class Dialog
  36. -     wm geometry $w +[expr $px+($pw/3)]+[expr $py+($ph/3)]
  37. -     wm minsize $w 1 1
  38.   
  39.       # wm raise $parent    -- Motif does this but TK doesn't have the command.
  40.   
  41.       frame $w.msg
  42. --- 66,79 ----
  43.       global $done
  44.       set $done 0
  45.   
  46.       toplevel $w -class Dialog
  47.   
  48. +     # Lets the dialog window be handled like Motif dialogs by the WM
  49. +         wm group $w $parent
  50. +         wm transient $w $parent
  51. +     # This is unnecessary (at least under mwm) since the above
  52. +     # causes parent to be raised when the dialog becomes visible.
  53.       # wm raise $parent    -- Motif does this but TK doesn't have the command.
  54.   
  55.       frame $w.msg
  56. ***************
  57. *** 152,158 ****
  58. --- 151,168 ----
  59.           # DLG:keybindings $w.cmds.f.f.f3.btn3 "[lindex $btn3 1]"
  60.       }
  61.   
  62. +     # The withdraw/update sequence allows $w's width, etc. to be set
  63. +     # without becoming visible.
  64. +     wm withdraw $w
  65.       update
  66. +     # Then we set the position
  67. +     DLG:position $parent $w
  68. +     # Let the new position by updated
  69. +     update
  70. +     # and now make it visible. Viola!  Centered over the parent.
  71. +     # What a kluge, though. :(.
  72. +     wm deiconify $w
  73.       grab $w
  74.       tkwait variable $done
  75.       grab
  76. ***************
  77. *** 159,164 ****
  78. --- 169,200 ----
  79.       destroy $w
  80.   
  81.       return "[set $done]"
  82. + }
  83. + proc DLG:position {parent dialog} {
  84. +     # Tell the WM that we'll do this ourselves.
  85. +         wm sizefrom $dialog user
  86. +         wm positionfrom $dialog user
  87. +     # Where is my parent and what are it's dimensions
  88. +     set pargeo [split [wm geometry $parent] "+x"]
  89. +         set parwidth [lindex $pargeo 0]
  90. +         set parheight [lindex $pargeo 1]
  91. +         set parx [lindex $pargeo 2]
  92. +         set pary [lindex $pargeo 3]
  93. +     # What are my dimensions ?
  94. +     set dialoggeo [split [wm geometry $dialog] "+x"]
  95. +     set dialogwidth [lindex $dialoggeo 0]
  96. +     set dialogheight [lindex $dialoggeo 1]
  97. +     # Build my new position (and dimensions)
  98. +         set geo [ format "%dx%d+%d+%d" $dialogwidth $dialogheight \
  99. +         [expr $parx+($parwidth-$dialogwidth)/2] \
  100. +         [expr $pary+($parheight-$dialogheight)/2] ]
  101. +     # And set it
  102. +     wm geometry $dialog $geo
  103.   }
  104.   
  105.   # Future expansion: For when we are able to do keyboard focus and
  106. ../src/Tk> 
  107.  
  108. -- 
  109. : jay          jay@vnet.ibm.com    My opinions and ideas, not my employer's.
  110.  
  111.