changeset 7602:136819b017fc

(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues. (x_iconify_frame) [USE_X_TOOLKIT]: New code for invisible window case. (XtNinitialState) [USE_X_TOOLKIT]: New #define. (x_make_frame_invisible): Mostly combine toolkit/non-toolkit cases, in the process fixing a dumb bug. (x_iconify_frame): Fix error messages.
author Richard M. Stallman <rms@gnu.org>
date Sat, 21 May 1994 05:36:07 +0000
parents c5927c75b2b5
children 1ddcf94fe9c9
files src/xterm.c
diffstat 1 files changed, 37 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Sat May 21 02:28:15 1994 +0000
+++ b/src/xterm.c	Sat May 21 05:36:07 1994 +0000
@@ -96,6 +96,12 @@
 #define x_top_window_to_frame x_window_to_frame
 #endif
 
+#ifdef USE_X_TOOLKIT
+#ifndef XtNinitialState
+#define XtNinitialState "initialState"
+#endif
+#endif
+
 #ifdef HAVE_X11
 #define XMapWindow XMapRaised		/* Raise them when mapping. */
 #else /* ! defined (HAVE_X11) */
@@ -5505,6 +5511,14 @@
      struct frame *f;
 {
   int mask;
+  Window window;
+
+#ifdef USE_X_TOOLKIT
+  /* Use the frame's outermost window, not the one we normally draw on.  */
+  window = XtWindow (f->display.x->widget);
+#else /* not USE_X_TOOLKIT */
+  window = FRAME_X_WINDOW (f);
+#endif /* not USE_X_TOOLKIT */
 
   /* Don't keep the highlight on an invisible frame.  */
   if (x_highlight_frame == f)
@@ -5526,18 +5540,12 @@
 
 #ifdef HAVE_X11R4
 
-#ifdef USE_X_TOOLKIT
-  if (! XWithdrawWindow (x_current_display, XtWindow (f->display.x->widget),
-			 DefaultScreen (x_current_display)))
-#else /* not USE_X_TOOLKIT */
-  if (! XWithdrawWindow (x_current_display, FRAME_X_WINDOW (f),
+  if (! XWithdrawWindow (x_current_display, window,
 			 DefaultScreen (x_current_display)))
     {
       UNBLOCK_INPUT_RESIGNAL;
-      error ("can't notify window manager of window withdrawal");
+      error ("Can't notify window manager of window withdrawal");
     }
-#endif /* not USE_X_TOOLKIT */
-
 #else /* ! defined (HAVE_X11R4) */
 #ifdef HAVE_X11
 
@@ -5547,11 +5555,7 @@
       XEvent unmap;
 
       unmap.xunmap.type = UnmapNotify;
-#ifdef USE_X_TOOLKIT
-      unmap.xunmap.window = XtWindow (f->display.x->widget);
-#else /* not USE_X_TOOLKIT */
-      unmap.xunmap.window = FRAME_X_WINDOW (f);
-#endif /* not USE_X_TOOLKIT */
+      unmap.xunmap.window = window;
       unmap.xunmap.event = DefaultRootWindow (x_current_display);
       unmap.xunmap.from_configure = False;
       if (! XSendEvent (x_current_display,
@@ -5561,16 +5565,12 @@
 			&unmap))
 	{
 	  UNBLOCK_INPUT_RESIGNAL;
-	  error ("can't notify window manager of withdrawal");
+	  error ("Can't notify window manager of withdrawal");
 	}
     }
 
   /* Unmap the window ourselves.  Cheeky!  */
-#ifdef USE_X_TOOLKIT
-  XUnmapWindow (x_current_display, XtWindow (f->display.x->widget));
-#else /* not USE_X_TOOLKIT */
-  XUnmapWindow (x_current_display, FRAME_X_WINDOW (f));
-#endif /* not USE_X_TOOLKIT */
+  XUnmapWindow (x_current_display, window);
 #else /* ! defined (HAVE_X11) */
 
   XUnmapWindow (FRAME_X_WINDOW (f));
@@ -5612,13 +5612,24 @@
 
 #ifdef USE_X_TOOLKIT
   BLOCK_INPUT;
+
+  if (! FRAME_VISIBLE_P (f))
+    {
+      if (! EQ (Vx_no_window_manager, Qt))
+	x_wm_set_window_state (f, IconicState);
+      /* This was XtPopup, but that did nothing for an iconified frame.  */
+      XtMapWidget (f->display.x->widget);
+      UNBLOCK_INPUT;
+      return;
+    }
+
   result = XIconifyWindow (x_current_display,
 			   XtWindow (f->display.x->widget),
 			   DefaultScreen (x_current_display));
   UNBLOCK_INPUT;
 
   if (!result)
-    error ("Can't notify window manager of iconification.");
+    error ("Can't notify window manager of iconification");
 
   f->async_iconified = 1;
 
@@ -5651,7 +5662,7 @@
 		      &message))
       {
 	UNBLOCK_INPUT_RESIGNAL;
-	error ("Can't notify window manager of iconification.");
+	error ("Can't notify window manager of iconification");
       }
   }
 
@@ -5927,15 +5938,18 @@
      int state;
 {
 #ifdef USE_X_TOOLKIT
-  Window window = XtWindow (f->display.x->widget);
+  Arg al[1];
+
+  XtSetArg (al[0], XtNinitialState, state);
+  XtSetValues (f->display.x->widget, al, 1);
 #else /* not USE_X_TOOLKIT */
   Window window = FRAME_X_WINDOW (f);
-#endif /* not USE_X_TOOLKIT */
 
   f->display.x->wm_hints.flags |= StateHint;
   f->display.x->wm_hints.initial_state = state;
 
   XSetWMHints (x_current_display, window, &f->display.x->wm_hints);
+#endif /* not USE_X_TOOLKIT */
 }
 
 x_wm_set_icon_pixmap (f, icon_pixmap)