grass-dev@grass.itc.it wrote:

> code P item #515, was opened at 2007-10-19 15:02
> Status: Open
> Priority: 3
> Submitted By: M�ris Nartišs (marisn)
> Assigned to: Nobody (None)
> Summary: Close any open gis.m windows on GRASS exit 
> Patch status: None
> Patch type: enhancement
> GRASS component: gis.m
> GRASS version: CVS HEAD
> GRASS CVS checkout date, if applies (YYMMDD): 

Here's the patch:

Index: lib/init/init.sh
===================================================================
RCS file: /home/grass/grassrepository/grass6/lib/init/init.sh,v
retrieving revision 1.120
diff -u -u -r1.120 init.sh
--- lib/init/init.sh    6 Oct 2007 05:04:58 -0000       1.120
+++ lib/init/init.sh    19 Oct 2007 12:01:27 -0000
@@ -947,6 +947,16 @@
     d.mon stop=$MON 
 done
 
+
+if [ $TCLTKGRASSBASE ] ; then
+       # [ $TCLTKGRASSBASE && !$MINGW && !$CGWIN ] - send does NOT work on 
windows.
+       echo "Closing open gis.m sessions....."
+       echo 'foreach gwin [lsearch -all -inline [winfo interps] 
gm_tcl_$env(GIS_LOCK)*] {
+       catch {send -async $gwin exit}
+       }
+       exit' | $GRASS_WISH >/dev/null 2>&1
+fi
+
 echo "Cleaning up temporary files....."
 
 "$ETC/clean_temp" > /dev/null
Index: gui/tcltk/gis.m/gis.m
===================================================================
RCS file: /home/grass/grassrepository/grass6/gui/tcltk/gis.m/gis.m,v
retrieving revision 1.10
diff -u -u -r1.10 gis.m
--- gui/tcltk/gis.m/gis.m       9 May 2007 23:20:50 -0000       1.10
+++ gui/tcltk/gis.m/gis.m       19 Oct 2007 12:01:28 -0000
@@ -12,9 +12,9 @@
 
 if [ $# -eq 0 ] ; then
 #      if [ "$HOSTTYPE" = "macintosh" -o "$HOSTTYPE" = "powermac" -o 
"$HOSTTYPE" = "powerpc" -o "$HOSTTYPE" = "intel-pc" ] ; then
-#              exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name gm_tcl
+#              exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name 
gm_tcl_$GIS_LOCK
 #      else
-               exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name gm_tcl &
+               exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name 
gm_tcl_$GIS_LOCK &
 #      fi
        exit
 fi
@@ -23,4 +23,4 @@
   exec g.parser "$0" "$@"
 fi
 
-exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name gm_tcl "$GIS_OPT_DMRC" sh &
+exec "$GRASS_WISH" "$GISBASE/etc/gm/gm.tcl" -name gm_tcl_$GIS_LOCK 
"$GIS_OPT_DMRC" sh &

> Initial Comment:
> This patch does two things:
> 1) Every gis.m app gets GRASS session ID encoded in it's name;

Encoding the session PID in the application name prevents users from
setting X resources specific to gis.m.

I suggest moving the session check into gis.m itself, e.g. adding the
following to gis.m:

        proc exitif {session_id} {
                global env
                if {$env(GIS_LOCK) == $session_id} exit
        }

and changing the init.sh code to:

        foreach gwin [lsearch -all -inline [winfo interps] gm_tcl*] {
                catch {send -async $gwin exitif $env(GIS_LOCK)}
        }

> 2) On exit, all gis.m windows with current session ID gets closed.
> 
> What needs to be tested:
> what will happen on windows? Somebody with Cygwin and MinGW versions please 
> test it.

+       # [ $TCLTKGRASSBASE && !$MINGW && !$CGWIN ] - send does NOT work on 
windows.

Note that send doesn't work on some current Linux systems either, due
to X security mechanisms.

-- 
Glynn Clements <[EMAIL PROTECTED]>

_______________________________________________
grass-dev mailing list
grass-dev@grass.itc.it
http://grass.itc.it/mailman/listinfo/grass-dev

Reply via email to