X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fglyphs-x.c;h=8c298398c14e99ae3725070a9e15a76c8745990b;hb=112b4eb6a71cd613a534b4246b4cc024ed9bf22e;hp=e0fa2d29abf6d0edb78da2cb4fc4801a2c242b23;hpb=e641a992060dabef4609a39a7025a4712c680d5a;p=chise%2Fxemacs-chise.git- diff --git a/src/glyphs-x.c b/src/glyphs-x.c index e0fa2d2..8c29839 100644 --- a/src/glyphs-x.c +++ b/src/glyphs-x.c @@ -156,6 +156,8 @@ static void update_tab_widget_face (widget_value* wv, Lisp_Image_Instance* ii, Lisp_Object domain); #endif +void +emacs_Xt_handle_widget_losing_focus (struct frame* f, Widget losing_widget); #include "bitmaps.h" @@ -796,7 +798,7 @@ generate_cursor_fg_bg (Lisp_Object device, Lisp_Object *foreground, else { xbg->pixel = 0; - xbg->red = xbg->green = xbg->blue = ~0; + xbg->red = xbg->green = xbg->blue = USHRT_MAX; } } @@ -2130,6 +2132,12 @@ x_unmap_subwindow (Lisp_Image_Instance *p) } else /* must be a widget */ { + /* Since we are being unmapped we want the enclosing frame to + get focus. The losing with simple scrolling but is the safest + thing to do. */ + emacs_Xt_handle_widget_losing_focus + ( XFRAME (IMAGE_INSTANCE_FRAME (p)), + IMAGE_INSTANCE_X_WIDGET_ID (p)); XtUnmapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p)); } } @@ -2220,8 +2228,14 @@ x_redisplay_widget (Lisp_Image_Instance *p) /* Possibly update the colors and font */ if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p) || + /* #### This is not sufficient because it will not cope with widgets + that are not currently visible. Once redisplay has done the + visible ones it will clear this flag so that when new ones + become visible they will not be updated. */ XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed || + XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed + || IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)) { update_widget_face (wv, p, IMAGE_INSTANCE_FRAME (p)); @@ -2261,7 +2275,7 @@ x_redisplay_widget (Lisp_Image_Instance *p) } /* Adjust offsets within the frame. */ - if (XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed) + if (XFRAME (IMAGE_INSTANCE_FRAME (p))->size_changed) { Arg al[2]; XtSetArg (al [0], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (p));