X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fglyphs-x.c;h=04519968dac85a0d5b8682b656d14c933cd65616;hb=f605cb3c49256c49ad76f21deed0f58d111a8571;hp=ed706f9321207e60650271fc884b6b71c053a64e;hpb=1d9bc86590766427e2431876a50d78206a99edd5;p=chise%2Fxemacs-chise.git diff --git a/src/glyphs-x.c b/src/glyphs-x.c index ed706f9..0451996 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" @@ -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)); } } @@ -2140,6 +2148,7 @@ static void x_map_subwindow (Lisp_Image_Instance *p, int x, int y, struct display_glyph_area* dga) { + assert (dga->width > 0 && dga->height > 0); if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) { Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p); @@ -2259,6 +2268,16 @@ x_redisplay_widget (Lisp_Image_Instance *p) (Dimension)IMAGE_INSTANCE_HEIGHT (p)); } + /* Adjust offsets within the frame. */ + if (XFRAME (IMAGE_INSTANCE_FRAME (p))->size_changed) + { + Arg al[2]; + XtSetArg (al [0], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (p)); + XtSetArg (al [1], XtNy, &IMAGE_INSTANCE_X_WIDGET_YOFFSET (p)); + XtGetValues (FRAME_X_TEXT_WIDGET + (XFRAME (IMAGE_INSTANCE_FRAME (p))), al, 2); + } + /* now modify the widget */ lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), wv, True); @@ -2954,6 +2973,17 @@ image_instantiator_format_create_glyphs_x (void) IIFORMAT_HAS_METHOD (autodetect, validate); IIFORMAT_HAS_METHOD (autodetect, normalize); IIFORMAT_HAS_METHOD (autodetect, possible_dest_types); + /* #### autodetect is flawed IMO: + 1. It makes the assumption that you can detect whether the user + wanted a cursor or a string based on the data, since the data is a + string you have to prioritise cursors. Instead we will force users + to pick the appropriate image type, this is what we do under + MS-Windows anyway. + 2. It doesn't fit with the new domain model - you cannot tell which + domain it needs to be instantiated in until you've actually + instantiated it, which mucks up caching. + 3. It only copes with cursors and strings which seems bogus. */ + IIFORMAT_HAS_SHARED_METHOD (autodetect, governing_domain, subwindow); IIFORMAT_HAS_METHOD (autodetect, instantiate); IIFORMAT_VALID_CONSOLE (x, autodetect);