Bläddra i källkod

wxGUI: Allow MONITOR=wx* and GRASS_RENDER_IMMEDIATE at the same time to avoid calling display commands without MONITOR while the wx monitor is rendering. Fixes ticket https://trac.osgeo.org/grass/ticket/2285 (trunk, https://trac.osgeo.org/grass/changeset/60215)

git-svn-id: https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0@61369 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Neteler 10 år sedan
förälder
incheckning
253e9c3f51
2 ändrade filer med 13 tillägg och 25 borttagningar
  1. 0 16
      gui/wxpython/mapdisp/main.py
  2. 13 9
      lib/display/r_raster.c

+ 0 - 16
gui/wxpython/mapdisp/main.py

@@ -194,16 +194,8 @@ class DMonMap(Map):
 
         For input params and returned data see overridden method in Map class.
         """
-        currMon = grass.gisenv()['MONITOR']
-
-        RunCommand('g.gisenv',
-                   unset = 'MONITOR') # GRASS_RENDER_IMMEDIATE doesn't like monitors
-
         ret = Map.Render(self, *args, **kwargs)
 
-        RunCommand('g.gisenv',
-                    set = 'MONITOR=%s' % currMon)
-        
         return ret
     
     def AddLayer(self, *args, **kwargs):
@@ -211,11 +203,6 @@ class DMonMap(Map):
 
         For input params and returned data see overridden method in Map class.
         """
-        currMon = grass.gisenv()['MONITOR']
-
-        RunCommand('g.gisenv',
-                   unset = 'MONITOR') # GRASS_RENDER_IMMEDIATE doesn't like monitors
-
         driver = UserSettings.Get(group = 'display', key = 'driver', subkey = 'type')
     
         if driver == 'png':
@@ -227,9 +214,6 @@ class DMonMap(Map):
 
         del os.environ["GRASS_RENDER_IMMEDIATE"]
 
-        RunCommand('g.gisenv',
-                   set='MONITOR=%s' % currMon)
-
         return layer
 
 

+ 13 - 9
lib/display/r_raster.c

@@ -105,7 +105,11 @@ int D_open_driver(void)
     G_debug(1, "D_open_driver():");
     p = getenv("GRASS_RENDER_IMMEDIATE");
     m = G__getenv("MONITOR");
-    if (m) {
+    
+    if (m && G_strncasecmp(m, "wx", 2) == 0) {
+	/* wx monitors always use GRASS_RENDER_IMMEDIATE. */
+	p = NULL; /* use default display driver */
+    } else if (m) {
 	char *env;
 	const char *v;
 	
@@ -115,13 +119,10 @@ int D_open_driver(void)
 	env = NULL;
 	G_asprintf(&env, "MONITOR_%s_MAPFILE", m);
 	v = G__getenv(env);
-	if (G_strncasecmp(m, "wx", 2) == 0) 
-	    p = NULL; /* use default display driver */
-	else
-	    p = m;
-	
+	p = m;
+
 	if (v) {
-	    if (p && G_strcasecmp(p, "ps") == 0)
+	    if (G_strcasecmp(p, "ps") == 0)
 		G_putenv("GRASS_PSFILE", v);
 	    else
 		G_putenv("GRASS_PNGFILE", v);
@@ -196,9 +197,12 @@ int D_save_command(const char *cmd)
     G_debug(1, "D_save_command(): %s", cmd);
 
     mon_name = G__getenv("MONITOR");
-    if (!mon_name)
+    if (!mon_name || /* if no monitor selected */
+	/* or wx monitor selected and display commands called by the monitor */
+	(G_strncasecmp(mon_name, "wx", 2) == 0 &&
+	 getenv("GRASS_RENDER_IMMEDIATE")))
 	return 0;
-    
+
     env = NULL;
     G_asprintf(&env, "MONITOR_%s_CMDFILE", mon_name);
     mon_cmd = G__getenv(env);