diff --git a/Common/Context.h b/Common/Context.h
index aba69c94fa0169876b94ad07a2712a7067ab6d30..64c86636cbb75cd9d8e3f233e554874b5881172d 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -75,6 +75,7 @@ public :
   int vis_position[2];        // position of the visibility window on the screen
   int stat_position[2];       // position of the statistics window on the screen
   int center_windows;         // center popup windows on the menu window
+  int apple_menu_bar;         // Apple-style menubar?
 
   int default_plugins;        // do we load default plugins on startup?
 
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 63aecabc8f50db3aebcef1db4b5c43e9ec7a6b28..b0ddace736841683b3a94632b35a53aaabaf30b1 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -346,6 +346,8 @@ StringXString PrintOptions_String[] = {
 StringXNumber GeneralOptions_Number[] = {
   { F|O, "AlphaBlending" , opt_general_alpha_blending , 1. ,
     "Enable alpha blending (transparency) in post-processing views" },
+  { F|S, "AppleMenuBar" , opt_general_apple_menu_bar , 0. , 
+    "Use Apple-style menu bar?" }, 
   { F|O, "Axes" , opt_general_axes , 1. ,
     "Display the axes linked to the model" },
 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index b126014846ac04e9b1e4cb53b3da1933c6dd4c81..eb2ae451115bfb64064eebe7862ab21be792d354 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.113 2003-08-11 16:23:20 geuzaine Exp $
+// $Id: Options.cpp,v 1.114 2003-09-01 23:50:19 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -1742,6 +1742,13 @@ double opt_general_menu_position1(OPT_ARGS_NUM)
   return CTX.position[1];
 }
 
+double opt_general_apple_menu_bar(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.apple_menu_bar = (int)val;
+  return CTX.apple_menu_bar;
+}
+
 double opt_general_message_position0(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 15e723a4c5ef256ef34d817995ee428b2aa710a5..2383a3dbc95ba9d494a1343e47a0bc2ace82a8e2 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -195,6 +195,7 @@ double opt_general_viewport2(OPT_ARGS_NUM);
 double opt_general_viewport3(OPT_ARGS_NUM);
 double opt_general_menu_position0(OPT_ARGS_NUM);
 double opt_general_menu_position1(OPT_ARGS_NUM);
+double opt_general_apple_menu_bar(OPT_ARGS_NUM);
 double opt_general_message_position0(OPT_ARGS_NUM);
 double opt_general_message_position1(OPT_ARGS_NUM);
 double opt_general_message_size0(OPT_ARGS_NUM);
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index 1228b6a89ec26db5b977119b5d8f816d37bbf04a..510647fa4121ebc4f4a9d12b8fbd105403d7076f 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.42 2003-04-02 05:53:23 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.43 2003-09-01 23:50:20 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -48,9 +48,9 @@ void FillBuffer(void)
 void CreateOutputFile(char *name, int format)
 {
   FILE *fp;
-  GLint size3d;
+  GLint size3d, viewport[4];
   char ext[256];
-  int res, i, oldformat, psformat, pssort, psoptions;
+  int res, oldformat, psformat, pssort, psoptions;
 
   if(!name || !strlen(name))
     return;
@@ -58,10 +58,12 @@ void CreateOutputFile(char *name, int format)
   oldformat = CTX.print.format;
   CTX.print.format = format;
 
+  for(int i = 0; i < 4; i++) viewport[i] = CTX.viewport[i];
+
   switch (format) {
 
   case FORMAT_AUTO:
-    for(i = strlen(name) - 1; i >= 0; i--) {
+    for(int i = strlen(name) - 1; i >= 0; i--) {
       if(name[i] == '.') {
         strcpy(ext, &name[i]);
         break;
@@ -142,13 +144,11 @@ void CreateOutputFile(char *name, int format)
     FillBuffer();
     CTX.print.gl_fonts = 1;
     if(format == FORMAT_JPEG || format == FORMAT_JPEGTEX){
-      create_jpeg(fp, CTX.viewport[2] - CTX.viewport[0],
-		  CTX.viewport[3] - CTX.viewport[1], CTX.print.jpeg_quality);
+      create_jpeg(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], CTX.print.jpeg_quality);
       Msg(INFO, "JPEG creation complete '%s'", name);
     }
     else{
-      create_png(fp, CTX.viewport[2] - CTX.viewport[0],
-		 CTX.viewport[3] - CTX.viewport[1], 100);
+      create_png(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], 100);
       Msg(INFO, "PNG creation complete '%s'", name);
     }
     Msg(STATUS2, "Wrote '%s'", name);
@@ -164,18 +164,15 @@ void CreateOutputFile(char *name, int format)
     }
     FillBuffer();
     if(format == FORMAT_PPM){
-      create_ppm(fp, CTX.viewport[2] - CTX.viewport[0],
-		 CTX.viewport[3] - CTX.viewport[1]);
+      create_ppm(fp, viewport[2]-viewport[0], viewport[3]-viewport[1]);
       Msg(INFO, "PPM creation complete '%s'", name);
     }
     else if (format == FORMAT_YUV){
-      create_yuv(fp, CTX.viewport[2] - CTX.viewport[0],
-		 CTX.viewport[3] - CTX.viewport[1]);
+      create_yuv(fp, viewport[2]-viewport[0], viewport[3]-viewport[1]);
       Msg(INFO, "YUV creation complete '%s'", name);
     }
     else{
-      create_gif(fp, CTX.viewport[2] - CTX.viewport[0],
-		 CTX.viewport[3] - CTX.viewport[1],
+      create_gif(fp, viewport[2]-viewport[0], viewport[3]-viewport[1],
 		 CTX.print.gif_dither,
 		 CTX.print.gif_sort,
 		 CTX.print.gif_interlace,
@@ -210,7 +207,7 @@ void CreateOutputFile(char *name, int format)
     res = GL2PS_OVERFLOW;
     while(res == GL2PS_OVERFLOW) {
       size3d += 2048 * 2048;
-      gl2psBeginPage(CTX.base_filename, "Gmsh", CTX.viewport, 
+      gl2psBeginPage(CTX.base_filename, "Gmsh", viewport, 
 		     psformat, pssort, psoptions, GL_RGBA, 0, NULL, 
 		     0, 0, 0, size3d, fp, name);
       CTX.print.gl_fonts = 0;
@@ -228,7 +225,7 @@ void CreateOutputFile(char *name, int format)
       Msg(GERROR, "Unable to open file '%s'", name);
       return;
     }
-    gl2psBeginPage(CTX.base_filename, "Gmsh", CTX.viewport,
+    gl2psBeginPage(CTX.base_filename, "Gmsh", viewport,
                    GL2PS_TEX, GL2PS_NO_SORT, GL2PS_NONE, GL_RGBA, 0, NULL, 
 		   0, 0, 0, 1, fp, name);
     CTX.print.gl_fonts = 0;