diff --git a/ChangeLog b/ChangeLog index 263ed77..bb9a2bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3013,3 +3013,8 @@ Fri Jan 7 20:11:48 PST 2000 Michael Jennings font configuration in the default theme files. ------------------------------------------------------------------------------- +Mon Jan 10 14:47:33 PST 2000 Michael Jennings + + Fixed the problem with menus in auto mode. + +------------------------------------------------------------------------------- diff --git a/src/menus.c b/src/menus.c index 33c7d77..35dab57 100644 --- a/src/menus.c +++ b/src/menus.c @@ -844,7 +844,8 @@ menu_draw(menu_t * menu) menu_set_font(menu, etfonts[def_font_idx]); } gcvalue.foreground = PixColors[menuTextColor]; - XChangeGC(Xdisplay, menu->gc, GCForeground, &gcvalue); + gcvalue.graphics_exposures = False; + XChangeGC(Xdisplay, menu->gc, GCForeground | GCGraphicsExposures, &gcvalue); if (!menu->w) { unsigned short longest; @@ -872,11 +873,19 @@ menu_draw(menu_t * menu) /* Size and render menu window */ XResizeWindow(Xdisplay, menu->win, menu->w, menu->h); - render_simage(images[image_menu].norm, menu->win, menu->w, menu->h, image_menu, 0); - menu->bg = images[image_menu].norm->pmap->pixmap; if (image_mode_is(image_menu, MODE_AUTO)) { + pixmap_t *pmap = images[image_menu].norm->pmap; + + if (pmap->pixmap != None) { + XFreePixmap(Xdisplay, pmap->pixmap); + } + pmap->pixmap = XCreatePixmap(Xdisplay, menu->win, width, height, Xdepth); + paste_simage(images[image_menu].norm, image_menu, pmap->pixmap, 0, 0, width, height); enl_ipc_sync(); + } else { + render_simage(images[image_menu].norm, menu->win, menu->w, menu->h, image_menu, 0); } + menu->bg = images[image_menu].norm->pmap->pixmap; /* Size and render selected item window */ XResizeWindow(Xdisplay, menu->swin, menu->w - 2 * MENU_HGAP, menu->fheight + MENU_VGAP); diff --git a/src/pixmap.c b/src/pixmap.c index 7351b75..5a0ea6d 100644 --- a/src/pixmap.c +++ b/src/pixmap.c @@ -369,13 +369,13 @@ check_image_ipc(unsigned char reset) } void -paste_simage(simage_t *simg, unsigned char which, Window win, unsigned short x, unsigned short y, unsigned short w, unsigned short h) +paste_simage(simage_t *simg, unsigned char which, Drawable d, unsigned short x, unsigned short y, unsigned short w, unsigned short h) { ASSERT(simg != NULL); - REQUIRE(win != None); + REQUIRE(d != None); - D_PIXMAP(("paste_simage(%8p, %s, 0x%08x, %hd, %hd, %hd, %hd) called.\n", simg, get_image_type(which), (int) win, x, y, w, h)); + D_PIXMAP(("paste_simage(%8p, %s, 0x%08x, %hd, %hd, %hd, %hd) called.\n", simg, get_image_type(which), (int) d, x, y, w, h)); if ((images[which].mode & MODE_AUTO) && (images[which].mode & ALLOW_AUTO)) { char buff[255], *reply; @@ -395,7 +395,7 @@ paste_simage(simage_t *simg, unsigned char which, Window win, unsigned short x, D_PIXMAP((" -> iclass == \"%s\", state == \"%s\"\n", NONULL(iclass), NONULL(state))); if (iclass) { - snprintf(buff, sizeof(buff), "imageclass %s apply_copy 0x%x %s %hd %hd", iclass, (int) win, state, w, h); + snprintf(buff, sizeof(buff), "imageclass %s apply_copy 0x%x %s %hd %hd", iclass, (int) d, state, w, h); reply = enl_send_and_wait(buff); if (strstr(reply, "Error")) { print_error("Enlightenment didn't seem to like something about my syntax. Disallowing \"auto\" mode for this image.\n"); @@ -405,7 +405,7 @@ paste_simage(simage_t *simg, unsigned char which, Window win, unsigned short x, GC gc; XGCValues gcvalues; - gc = XCreateGC(Xdisplay, win, 0, &gcvalues); + gc = XCreateGC(Xdisplay, d, 0, &gcvalues); pmap = (Pixmap) strtoul(reply, (char **) NULL, 0); mask = (Pixmap) strtoul(PWord(2, reply), (char **) NULL, 0); FREE(reply); @@ -416,7 +416,7 @@ paste_simage(simage_t *simg, unsigned char which, Window win, unsigned short x, } XSetClipMask(Xdisplay, gc, mask); XSetClipOrigin(Xdisplay, gc, x, y); - XCopyArea(Xdisplay, pmap, win, gc, 0, 0, w, h, x, y); + XCopyArea(Xdisplay, pmap, d, gc, 0, 0, w, h, x, y); snprintf(buff, sizeof(buff), "imageclass %s free_pixmap 0x%08x", iclass, (int) pmap); enl_ipc_send(buff); XFreeGC(Xdisplay, gc); @@ -446,7 +446,7 @@ paste_simage(simage_t *simg, unsigned char which, Window win, unsigned short x, if (simg->iml->bmod) { Imlib_set_image_blue_modifier(imlib_id, simg->iml->im, simg->iml->bmod); } - Imlib_paste_image(imlib_id, simg->iml->im, win, x, y, w, h); + Imlib_paste_image(imlib_id, simg->iml->im, (Window) d, x, y, w, h); } } diff --git a/src/pixmap.h b/src/pixmap.h index b7c61fe..50d2423 100644 --- a/src/pixmap.h +++ b/src/pixmap.h @@ -166,7 +166,7 @@ extern unsigned short parse_pixmap_ops(char *); extern unsigned short set_pixmap_scale(const char *, pixmap_t *); extern unsigned char check_image_ipc(unsigned char); extern void reset_simage(simage_t *, unsigned long); -extern void paste_simage(simage_t *, unsigned char, Window, unsigned short, unsigned short, unsigned short, unsigned short); +extern void paste_simage(simage_t *, unsigned char, Drawable, unsigned short, unsigned short, unsigned short, unsigned short); extern void redraw_image(unsigned char); extern void redraw_images_by_mode(unsigned char); extern void render_simage(simage_t *, Window, unsigned short, unsigned short, unsigned char, renderop_t); diff --git a/src/term.c b/src/term.c index 3bf58f6..831992e 100644 --- a/src/term.c +++ b/src/term.c @@ -1001,6 +1001,7 @@ process_csi_seq(void) #if defined (ENABLE_DISPLAY_ANSWER) case 7: tt_write((unsigned char *) display_name, strlen(display_name)); + tt_write("\n", 1); break; #endif case 8: