瀏覽代碼

Allow MONITOR=wx* and GRASS_RENDER_IMMEDIATE at the same time to avoid calling
display commands without MONITOR while the wx monitor is rendering.

Fix ticket https://trac.osgeo.org/grass/ticket/2285.


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@60215 15284696-431f-4ddb-bdfa-cd5b030d7da7

Huidae Cho 11 年之前
父節點
當前提交
8c1d7d4506
共有 2 個文件被更改,包括 13 次插入25 次删除
  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;
 	char *u_m;
@@ -119,13 +123,10 @@ int D_open_driver(void)
 	env = NULL;
 	G_asprintf(&env, "MONITOR_%s_MAPFILE", u_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);
@@ -201,9 +202,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;
-    
+
     /* GRASS variable names should be upper case. */
     u_mon_name = G_store_upper(mon_name);