# HG changeset patch # User Jim Blandy # Date 715058725 0 # Node ID 133bad38bde16ad170994c0aa8c78a1d04f25048 # Parent 25046e48ce9a8e5616350e752a7b9de90c396c68 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user hasn't specified the icon position. Let the window manager put the icon where it likes. * xfns.c (x_set_name): Use XSetWM{Name,IconName} when available [HAVE_X11R4], or XSetIconName and XStoreName otherwise. * xfns.c: Use the FRAME_X_WINDOW for readability. * xfns.c (x_set_mouse_color): Use x_catch_errors, x_check_errors, and x_uncatch errors to avoid crashing if the user selects an odd cursor. * xfns.c (select_visual): Use XVisualIDFromVisual when available [HAVE_X11R4]. diff -r 25046e48ce9a -r 133bad38bde1 src/xfns.c --- a/src/xfns.c Sat Aug 29 03:14:44 1992 +0000 +++ b/src/xfns.c Sat Aug 29 03:25:25 1992 +0000 @@ -280,7 +280,7 @@ if (XTYPE (frame) != Lisp_Frame) continue; f = XFRAME (frame); - if (f->display.x->window_desc == wdesc + if (FRAME_X_WINDOW (f) == wdesc || f->display.x->icon_desc == wdesc) return f; } @@ -548,7 +548,7 @@ make_number (f->display.x->border_width)); store_in_alist (alistptr, Qinternal_border_width, make_number (f->display.x->internal_border_width)); - sprintf (buf, "%d", f->display.x->window_desc); + sprintf (buf, "%d", FRAME_X_WINDOW (f)); store_in_alist (alistptr, Qwindow_id, build_string (buf)); } @@ -618,7 +618,7 @@ /* Functions called only from `x_set_frame_param' to set individual parameters. - If f->display.x->window_desc is 0, + If FRAME_X_WINDOW (f) is 0, the frame is being created and its X-window does not exist yet. In that case, just record the parameter's new value in the standard place; do not attempt to change the window. */ @@ -629,7 +629,7 @@ Lisp_Object arg, oldval; { f->display.x->foreground_pixel = x_decode_color (arg, BLACK_PIX_DEFAULT); - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { #ifdef HAVE_X11 BLOCK_INPUT; @@ -645,21 +645,21 @@ f->display.x->foreground_pixel); slider_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); up_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), up_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); down_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), down_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -689,7 +689,7 @@ f->display.x->foreground_pixel); slider_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -697,14 +697,14 @@ XDefaultScreen (x_current_display))); left_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), up_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); right_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), down_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -743,7 +743,7 @@ f->display.x->background_pixel = x_decode_color (arg, WHITE_PIX_DEFAULT); - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { BLOCK_INPUT; #ifdef HAVE_X11 @@ -752,7 +752,7 @@ f->display.x->background_pixel); XSetForeground (x_current_display, f->display.x->reverse_gc, f->display.x->background_pixel); - XSetWindowBackground (x_current_display, f->display.x->window_desc, + XSetWindowBackground (x_current_display, FRAME_X_WINDOW (f), f->display.x->background_pixel); /* Scroll bars. */ @@ -764,21 +764,21 @@ f->display.x->background_pixel); slider_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); up_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), up_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); down_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), down_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -808,7 +808,7 @@ f->display.x->background_pixel); slider_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -816,14 +816,14 @@ XDefaultScreen (x_current_display))); left_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), up_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display))); right_arrow_pixmap = - XCreatePixmapFromBitmapData (XDISPLAY f->display.x->window_desc, + XCreatePixmapFromBitmapData (XDISPLAY FRAME_X_WINDOW (f), down_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -847,7 +847,7 @@ } #else temp = XMakeTile (f->display.x->background_pixel); - XChangeBackground (f->display.x->window_desc, temp); + XChangeBackground (FRAME_X_WINDOW (f), temp); XFreePixmap (temp); #endif /* not HAVE_X11 */ UNBLOCK_INPUT; @@ -875,6 +875,10 @@ BLOCK_INPUT; #ifdef HAVE_X11 + + /* It's not okay to crash if the user selects a screwey cursor. */ + x_catch_errors (); + if (!EQ (Qnil, Vx_pointer_shape)) { CHECK_NUMBER (Vx_pointer_shape, 0); @@ -901,6 +905,10 @@ else mode_cursor = XCreateFontCursor (x_current_display, XC_xterm); + /* Check and report errors with the above calls. */ + x_check_errors ("can't set cursor shape: %s"); + x_uncatch_errors (); + { XColor fore_color, back_color; @@ -929,9 +937,9 @@ GXcopy); #endif /* X10 */ - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { - XDefineCursor (XDISPLAY f->display.x->window_desc, cursor); + XDefineCursor (XDISPLAY FRAME_X_WINDOW (f), cursor); } if (cursor != f->display.x->text_cursor && f->display.x->text_cursor != 0) @@ -974,7 +982,7 @@ fore_pixel = f->display.x->background_pixel; } - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { #ifdef HAVE_X11 BLOCK_INPUT; @@ -1037,14 +1045,14 @@ { f->display.x->border_pixel = pix; - if (f->display.x->window_desc != 0 && f->display.x->border_width > 0) + if (FRAME_X_WINDOW (f) != 0 && f->display.x->border_width > 0) { Pixmap temp; int mask; BLOCK_INPUT; #ifdef HAVE_X11 - XSetWindowBorder (x_current_display, f->display.x->window_desc, + XSetWindowBorder (x_current_display, FRAME_X_WINDOW (f), pix); if (f->display.x->h_scrollbar) XSetWindowBorder (x_current_display, f->display.x->h_slider, @@ -1058,7 +1066,7 @@ BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT); else temp = XMakeTile (pix); - XChangeBorder (f->display.x->window_desc, temp); + XChangeBorder (FRAME_X_WINDOW (f), temp); XFreePixmap (XDISPLAY temp); #endif /* not HAVE_X11 */ UNBLOCK_INPUT; @@ -1094,7 +1102,7 @@ /* If the window was unmapped (and its icon was mapped), the new icon is not mapped, so map the window in its stead. */ if (f->visible) - XMapWindow (XDISPLAY f->display.x->window_desc); + XMapWindow (XDISPLAY FRAME_X_WINDOW (f)); XFlushQueue (); UNBLOCK_INPUT; @@ -1129,7 +1137,7 @@ if (XINT (arg) == f->display.x->border_width) return; - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) error ("Cannot change the border width of a window"); f->display.x->border_width = XINT (arg); @@ -1151,7 +1159,7 @@ if (f->display.x->internal_border_width == old) return; - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { BLOCK_INPUT; x_set_window_size (f, f->width, f->height); @@ -1211,11 +1219,27 @@ if (! NILP (Fstring_equal (name, f->name))) return; - if (f->display.x->window_desc) + if (FRAME_X_WINDOW (f)) { BLOCK_INPUT; - x_set_text_property (f, XA_WM_NAME, name); - x_set_text_property (f, XA_WM_ICON_NAME, name); + +#ifdef HAVE_X11R4 + { + XTextProperty text; + text.value = XSTRING (name)->data; + text.encoding = XA_STRING; + text.format = 8; + text.nitems = XSTRING (name)->size; + XSetWMName (x_current_display, FRAME_X_WINDOW (f), &text); + XSetWMIconName (x_current_display, FRAME_X_WINDOW (f), &text); + } +#else + XSetIconName (XDISPLAY FRAME_X_WINDOW (f), + XSTRING (name)->data); + XStoreName (XDISPLAY FRAME_X_WINDOW (f), + XSTRING (name)->data); +#endif + UNBLOCK_INPUT; } @@ -1292,7 +1316,7 @@ gc_mask |= GCStipple; } - temp_gc = XCreateGC (x_current_display, scr->display.x->window_desc, + temp_gc = XCreateGC (x_current_display, FRAME_X_WINDOW (scr), gc_mask, &gc_values); if (!temp_gc) return 1; @@ -1337,7 +1361,7 @@ XGCValues gc_values; /* Need to do something about this. */ - Drawable drawable = selected_frame->display.x->window_desc; + Drawable drawable = FRAME_X_WINDOW (selected_frame); CHECK_NUMBER (face_code, 1); CHECK_STRING (font_name, 2); @@ -1836,7 +1860,7 @@ | CWEventMask); BLOCK_INPUT; - f->display.x->window_desc + FRAME_X_WINDOW (f) = XCreateWindow (x_current_display, ROOT_WINDOW, f->display.x->left_pos, f->display.x->top_pos, @@ -1849,7 +1873,7 @@ class_hints.res_name = (char *) XSTRING (f->name)->data; class_hints.res_class = EMACS_CLASS; - XSetClassHint (x_current_display, f->display.x->window_desc, &class_hints); + XSetClassHint (x_current_display, FRAME_X_WINDOW (f), &class_hints); /* x_set_name normally ignores requests to set the name if the requested name is the same as the current name. This is the one @@ -1862,11 +1886,11 @@ x_implicitly_set_name (f, name, Qnil); } - XDefineCursor (XDISPLAY f->display.x->window_desc, + XDefineCursor (XDISPLAY FRAME_X_WINDOW (f), f->display.x->text_cursor); UNBLOCK_INPUT; - if (f->display.x->window_desc == 0) + if (FRAME_X_WINDOW (f) == 0) error ("Unable to create window."); } @@ -1892,15 +1916,11 @@ } else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound)) error ("Both left and top icon corners of icon must be specified"); - else - { - XSET (icon_x, Lisp_Int, f->display.x->left_pos); - XSET (icon_y, Lisp_Int, f->display.x->top_pos); - } BLOCK_INPUT; - x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y)); + if (! EQ (icon_x, Qunbound)) + x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y)); /* Start up iconic or window? */ x_wm_set_window_state (f, @@ -1941,7 +1961,7 @@ gc_values.background = f->display.x->background_pixel; gc_values.line_width = 0; /* Means 1 using fast algorithm. */ f->display.x->normal_gc = XCreateGC (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), GCLineWidth | GCFont | GCForeground | GCBackground, &gc_values); @@ -1950,7 +1970,7 @@ gc_values.foreground = f->display.x->background_pixel; gc_values.background = f->display.x->foreground_pixel; f->display.x->reverse_gc = XCreateGC (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), GCFont | GCForeground | GCBackground | GCLineWidth, &gc_values); @@ -1963,7 +1983,7 @@ = XCreateBitmapFromData (x_current_display, ROOT_WINDOW, cursor_bits, 16, 16); f->display.x->cursor_gc - = XCreateGC (x_current_display, f->display.x->window_desc, + = XCreateGC (x_current_display, FRAME_X_WINDOW (f), (GCFont | GCForeground | GCBackground | GCFillStyle | GCStipple | GCLineWidth), &gc_values); @@ -2220,11 +2240,11 @@ Window *children, root; CHECK_NUMBER (tem, 0); - f->display.x->window_desc = (Window) XINT (tem); + FRAME_X_WINDOW (f) = (Window) XINT (tem); BLOCK_INPUT; - XGetWindowInfo (f->display.x->window_desc, &wininfo); - XQueryTree (f->display.x->window_desc, &parent, &nchildren, &children); + XGetWindowInfo (FRAME_X_WINDOW (f), &wininfo); + XQueryTree (FRAME_X_WINDOW (f), &parent, &nchildren, &children); free (children); UNBLOCK_INPUT; @@ -2308,7 +2328,7 @@ + (!NILP (hscroll) ? HSCROLL_HEIGHT : 0)); BLOCK_INPUT; - f->display.x->window_desc + FRAME_X_WINDOW (f) = XCreateWindow (parent, f->display.x->left_pos, /* Absolute horizontal offset */ f->display.x->top_pos, /* Absolute Vertical offset */ @@ -2316,20 +2336,20 @@ f->display.x->border_width, BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT); UNBLOCK_INPUT; - if (f->display.x->window_desc == 0) + if (FRAME_X_WINDOW (f) == 0) error ("Unable to create window."); } /* Install the now determined height and width in the windows and in phys_lines and desired_lines. */ change_frame_size (f, height, width, 1, 0); - XSelectInput (f->display.x->window_desc, KeyPressed | ExposeWindow + XSelectInput (FRAME_X_WINDOW (f), KeyPressed | ExposeWindow | ButtonPressed | ButtonReleased | ExposeRegion | ExposeCopy | EnterWindow | LeaveWindow | UnmapWindow ); x_set_resize_hint (f); /* Tell the server the window's default name. */ - XStoreName (XDISPLAY f->display.x->window_desc, XSTRING (f->name)->data); + XStoreName (XDISPLAY FRAME_X_WINDOW (f), XSTRING (f->name)->data); /* Now override the defaults with all the rest of the specified parms. */ @@ -2349,7 +2369,7 @@ background, border and mouse colors; also create the mouse cursor. */ BLOCK_INPUT; temp = XMakeTile (f->display.x->background_pixel); - XChangeBackground (f->display.x->window_desc, temp); + XChangeBackground (FRAME_X_WINDOW (f), temp); XFreePixmap (temp); UNBLOCK_INPUT; x_set_border_pixel (f, f->display.x->border_pixel); @@ -2495,7 +2515,7 @@ { if (!NILP (val)) { - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { BLOCK_INPUT; f->display.x->h_scrollbar_height = HSCROLL_HEIGHT; @@ -2529,7 +2549,7 @@ { if (!NILP (val)) { - if (f->display.x->window_desc != 0) + if (FRAME_X_WINDOW (f) != 0) { BLOCK_INPUT; f->display.x->v_scrollbar_width = VSCROLL_WIDTH; @@ -2573,7 +2593,7 @@ #ifdef HAVE_X11 up_arrow_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), up_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2581,7 +2601,7 @@ XDefaultScreen (x_current_display))); down_arrow_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), down_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2589,7 +2609,7 @@ XDefaultScreen (x_current_display))); slider_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2604,7 +2624,7 @@ v_double_arrow_cursor = XCreateFontCursor (x_current_display, XC_sb_v_double_arrow); f->display.x->v_scrollbar = - XCreateSimpleWindow (x_current_display, f->display.x->window_desc, + XCreateSimpleWindow (x_current_display, FRAME_X_WINDOW (f), pix_x, pix_y, width, height, border, f->display.x->foreground_pixel, f->display.x->background_pixel); @@ -2719,7 +2739,7 @@ ibw = f->display.x->internal_border_width; - f->display.x->v_scrollbar = XCreateWindow (f->display.x->window_desc, + f->display.x->v_scrollbar = XCreateWindow (FRAME_X_WINDOW (f), width - VSCROLL_WIDTH - ibw/2, ibw/2, VSCROLL_WIDTH - 2, @@ -2787,7 +2807,7 @@ #ifdef HAVE_X11 left_arrow_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), left_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2795,7 +2815,7 @@ XDefaultScreen (x_current_display))); right_arrow_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), right_arrow_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2803,7 +2823,7 @@ XDefaultScreen (x_current_display))); slider_pixmap = - XCreatePixmapFromBitmapData (x_current_display, f->display.x->window_desc, + XCreatePixmapFromBitmapData (x_current_display, FRAME_X_WINDOW (f), gray_bits, 16, 16, f->display.x->foreground_pixel, f->display.x->background_pixel, @@ -2815,7 +2835,7 @@ h_double_arrow_cursor = XCreateFontCursor (x_current_display, XC_sb_h_double_arrow); f->display.x->h_scrollbar = - XCreateSimpleWindow (x_current_display, f->display.x->window_desc, + XCreateSimpleWindow (x_current_display, FRAME_X_WINDOW (f), pix_x, pix_y, width - ibw - 2, HSCROLL_HEIGHT - 2, 1, f->display.x->foreground_pixel, @@ -3121,7 +3141,7 @@ else height = FONT_HEIGHT (f->display.x->font) * lines; - XDrawRectangle (x_current_display, f->display.x->window_desc, + XDrawRectangle (x_current_display, FRAME_X_WINDOW (f), gc, left, top, width, height); } @@ -3302,7 +3322,7 @@ this_point->x = pixel_points->x; this_point->y = pixel_points->y; - XDrawLines (x_current_display, f->display.x->window_desc, + XDrawLines (x_current_display, FRAME_X_WINDOW (f), gc, pixel_points, (this_point - pixel_points + 1), CoordModeOrigin); } @@ -3592,14 +3612,14 @@ gc_values.cap_style = CapRound; gc_values.join_style = JoinRound; - line_gc = XCreateGC (x_current_display, f->display.x->window_desc, + line_gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), GCLineStyle | GCJoinStyle | GCCapStyle | GCLineWidth | GCForeground | GCBackground, &gc_values); XSetDashes (x_current_display, line_gc, 0, dash_list, dashes); gc_values.foreground = f->display.x->background_pixel; gc_values.background = f->display.x->foreground_pixel; - erase_gc = XCreateGC (x_current_display, f->display.x->window_desc, + erase_gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), GCLineStyle | GCJoinStyle | GCCapStyle | GCLineWidth | GCForeground | GCBackground, &gc_values); @@ -3615,7 +3635,7 @@ previous_y = x_mouse_y; line = (x_mouse_y + 1) * FONT_HEIGHT (f->display.x->font) + f->display.x->internal_border_width; - XDrawLine (x_current_display, f->display.x->window_desc, + XDrawLine (x_current_display, FRAME_X_WINDOW (f), line_gc, left, line, right, line); } XFlushQueue (); @@ -3630,7 +3650,7 @@ || x_mouse_grabbed) { BLOCK_INPUT; - XDrawLine (x_current_display, f->display.x->window_desc, + XDrawLine (x_current_display, FRAME_X_WINDOW (f), erase_gc, left, line, right, line); UNBLOCK_INPUT; unread_command_char = obj; @@ -3644,7 +3664,7 @@ while (x_mouse_y == previous_y); BLOCK_INPUT; - XDrawLine (x_current_display, f->display.x->window_desc, + XDrawLine (x_current_display, FRAME_X_WINDOW (f), erase_gc, left, line, right, line); UNBLOCK_INPUT; } @@ -3674,7 +3694,7 @@ current_pointer_shape = f->display.x->nontext_cursor; XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), current_pointer_shape); buf = XBUFFER (XWINDOW (Vmouse_window)->buffer); @@ -3685,7 +3705,7 @@ { current_pointer_shape = f->display.x->modeline_cursor; XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), current_pointer_shape); } @@ -3820,7 +3840,7 @@ if (mouse_track_width) /* Over text; use text pointer shape. */ { XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), f->display.x->text_cursor); x_rectangle (f, f->display.x->cursor_gc, mouse_track_left, mouse_track_top, @@ -3828,11 +3848,11 @@ } else if (in_mode_line) XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), f->display.x->modeline_cursor); else XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), f->display.x->nontext_cursor); } @@ -3864,7 +3884,7 @@ } } XDefineCursor (x_current_display, - f->display.x->window_desc, + FRAME_X_WINDOW (f), f->display.x->nontext_cursor); XFlush (x_current_display); UNBLOCK_INPUT; @@ -3887,9 +3907,9 @@ Pixmap image; image = XCreateBitmapFromData (x_current_display, - f->display.x->window_desc, image_data, + FRAME_X_WINDOW (f), image_data, width, height); - XCopyPlane (x_current_display, image, f->display.x->window_desc, + XCopyPlane (x_current_display, image, FRAME_X_WINDOW (f), f->display.x->normal_gc, 0, 0, width, height, x, y); } #endif @@ -4318,10 +4338,13 @@ int n_visuals; v = DefaultVisualOfScreen (screen); - /* It may be a bad idea to fetch the visualid directly from the structure, - rather than using XVisualIDFromVisual, but I'll bet this is pretty - portable for the revisions of X we care about. */ - vinfo_template.visualid = v->visualid; + +#ifdef HAVE_X11R4 + vinfo_template.visualid = XVisualIDFromVisual (v); +#else + vinfo_template.visualid = x->visualid; +#endif + vinfo = XGetVisualInfo (x_current_display, VisualIDMask, &vinfo_template, &n_visuals); if (n_visuals != 1)