ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/background.C
(Generate patch)

Comparing rxvt-unicode/src/background.C (file contents):
Revision 1.22 by sasha, Fri Jan 4 21:25:57 2008 UTC vs.
Revision 1.28 by ayin, Tue Jan 29 13:57:23 2008 UTC

87 */ 87 */
88 88
89#ifdef HAVE_BG_PIXMAP 89#ifdef HAVE_BG_PIXMAP
90bgPixmap_t::bgPixmap_t () 90bgPixmap_t::bgPixmap_t ()
91{ 91{
92 // this is basically redundant as bgPixmap_t is only used in
93 // zero_initialised-derived structs
92#ifdef HAVE_AFTERIMAGE 94#ifdef HAVE_AFTERIMAGE
93 original_asim = NULL; 95 original_asim = NULL;
94#endif 96#endif
95#ifdef BG_IMAGE_FROM_FILE 97#ifdef BG_IMAGE_FROM_FILE
96 h_scale = v_scale = 0; 98 h_scale = v_scale = 0;
97 h_align = v_align = 0; 99 h_align = v_align = 0;
98#endif 100#endif
99 flags = 0; 101 flags = 0;
100 pixmap = None; 102 pixmap = None;
101 valid_since = invalid_since = 0; 103 valid_since = invalid_since = 0;
104 target = 0;
102} 105}
103 106
104void 107void
105bgPixmap_t::destroy () 108bgPixmap_t::destroy ()
106{ 109{
121 return true; 124 return true;
122# endif 125# endif
123 126
124# ifdef BG_IMAGE_FROM_FILE 127# ifdef BG_IMAGE_FROM_FILE
125# ifdef HAVE_AFTERIMAGE 128# ifdef HAVE_AFTERIMAGE
126 if (original_asim != NULL) 129 if (original_asim)
127# endif 130# endif
128 { 131 {
129 if (h_scale != 0 || v_scale != 0 132 if (h_scale != 0 || v_scale != 0
130 || h_align != 0 || v_align != 0) 133 || h_align != 0 || v_align != 0)
131 return true; 134 return true;
143 return true; 146 return true;
144# endif 147# endif
145 148
146# ifdef BG_IMAGE_FROM_FILE 149# ifdef BG_IMAGE_FROM_FILE
147# ifdef HAVE_AFTERIMAGE 150# ifdef HAVE_AFTERIMAGE
148 if (original_asim != NULL) 151 if (original_asim)
149# endif 152# endif
150 { 153 {
151 if (h_align == rootAlign || v_align == rootAlign) 154 if (h_align == rootAlign || v_align == rootAlign)
152 return true; 155 return true;
153 } 156 }
157}; 160};
158 161
159bool bgPixmap_t::need_client_side_rendering () 162bool bgPixmap_t::need_client_side_rendering ()
160{ 163{
161# ifdef HAVE_AFTERIMAGE 164# ifdef HAVE_AFTERIMAGE
162 if (original_asim != NULL) 165 if (original_asim)
163 return true; 166 return true;
164# endif 167# endif
165# ifdef ENABLE_TRANSPARENCY 168# ifdef ENABLE_TRANSPARENCY
166 if (flags & isTransparent) 169 if (flags & isTransparent)
167 { 170 {
257 int x = 0, y = 0; 260 int x = 0, y = 0;
258 unsigned int w = 0, h = 0; 261 unsigned int w = 0, h = 0;
259 unsigned int n; 262 unsigned int n;
260 unsigned long new_flags = (flags & (~geometryFlags)); 263 unsigned long new_flags = (flags & (~geometryFlags));
261 char *p; 264 char *p;
262# define MAXLEN_GEOM 256 /* could be longer then regular geometry string */ 265# define MAXLEN_GEOM 256 /* could be longer than regular geometry string */
263 266
264 if (geom == NULL) 267 if (geom == NULL)
265 return false; 268 return false;
266 269
267 char str[MAXLEN_GEOM]; 270 char str[MAXLEN_GEOM];
274 if (n < MAXLEN_GEOM) 277 if (n < MAXLEN_GEOM)
275 { 278 {
276 char *ops; 279 char *ops;
277 new_flags |= geometrySet; 280 new_flags |= geometrySet;
278 281
279 strncpy (str, geom, n); 282 memcpy (str, geom, n);
280 str[n] = '\0'; 283 str[n] = '\0';
281 if (str[0] == ':') 284 if (str[0] == ':')
282 ops = &str[0]; 285 ops = &str[0];
283 else if (str[0] != 'x' && str[0] != 'X' && isalpha(str[0])) 286 else if (str[0] != 'x' && str[0] != 'X' && isalpha(str[0]))
284 ops = &str[0]; 287 ops = &str[0];
367 if (ops) 370 if (ops)
368 { 371 {
369 while (*ops) 372 while (*ops)
370 { 373 {
371 while (*ops == ':' || isspace(*ops)) ++ops; 374 while (*ops == ':' || isspace(*ops)) ++ops;
375
372# define CHECK_GEOM_OPS(op_str) (strncasecmp (ops, (op_str), sizeof(op_str)-1) == 0) 376# define CHECK_GEOM_OPS(op_str) (strncasecmp (ops, (op_str), sizeof (op_str) - 1) == 0)
373 if (CHECK_GEOM_OPS("tile")) 377 if (CHECK_GEOM_OPS ("tile"))
374 { 378 {
375 w = h = noScale; 379 w = h = noScale;
376 geom_flags |= WidthValue|HeightValue; 380 geom_flags |= WidthValue|HeightValue;
377 } 381 }
378 else if (CHECK_GEOM_OPS("propscale")) 382 else if (CHECK_GEOM_OPS ("propscale"))
379 { 383 {
380 if (w == 0 && h == 0) 384 if (w == 0 && h == 0)
381 { 385 {
382 w = windowScale; 386 w = windowScale;
383 geom_flags |= WidthValue; 387 geom_flags |= WidthValue;
384 } 388 }
385 new_flags |= propScale; 389 new_flags |= propScale;
386 } 390 }
387 else if (CHECK_GEOM_OPS("hscale")) 391 else if (CHECK_GEOM_OPS ("hscale"))
388 { 392 {
389 if (w == 0)
390 w = windowScale; 393 if (w == 0) w = windowScale;
394
391 h = noScale; 395 h = noScale;
392 geom_flags |= WidthValue|HeightValue; 396 geom_flags |= WidthValue|HeightValue;
393 } 397 }
394 else if (CHECK_GEOM_OPS("vscale")) 398 else if (CHECK_GEOM_OPS ("vscale"))
395 { 399 {
396 if (h == 0)
397 h = windowScale; 400 if (h == 0) h = windowScale;
401
398 w = noScale; 402 w = noScale;
399 geom_flags |= WidthValue|HeightValue; 403 geom_flags |= WidthValue|HeightValue;
400 } 404 }
401 else if (CHECK_GEOM_OPS("scale")) 405 else if (CHECK_GEOM_OPS ("scale"))
402 { 406 {
403 if (h == 0)
404 h = windowScale; 407 if (h == 0) h = windowScale;
405 if (w == 0)
406 w = windowScale; 408 if (w == 0) w = windowScale;
409
407 geom_flags |= WidthValue|HeightValue; 410 geom_flags |= WidthValue|HeightValue;
408 } 411 }
409 else if (CHECK_GEOM_OPS("auto")) 412 else if (CHECK_GEOM_OPS ("auto"))
410 { 413 {
411 w = h = windowScale; 414 w = h = windowScale;
412 x = y = centerAlign; 415 x = y = centerAlign;
413 geom_flags |= WidthValue|HeightValue|XValue|YValue; 416 geom_flags |= WidthValue|HeightValue|XValue|YValue;
414 } 417 }
415 else if (CHECK_GEOM_OPS("root")) 418 else if (CHECK_GEOM_OPS ("root"))
416 { 419 {
417 w = h = noScale; 420 w = h = noScale;
418 x = y = rootAlign; 421 x = y = rootAlign;
419 geom_flags |= WidthValue|HeightValue|XValue|YValue; 422 geom_flags |= WidthValue|HeightValue|XValue|YValue;
420 } 423 }
421# undef CHECK_GEOM_OPS 424# undef CHECK_GEOM_OPS
425
422 while (*ops != ':' && *ops != '\0') ++ops; 426 while (*ops != ':' && *ops != '\0') ++ops;
423 } /* done parsing ops */ 427 } /* done parsing ops */
424 } 428 }
425 429
426 if (check_set_scale_value (geom_flags, WidthValue, h_scale, w)) 430 if (check_set_scale_value (geom_flags, WidthValue, h_scale, w)) ++changed;
427 ++changed;
428 if (check_set_scale_value (geom_flags, HeightValue, v_scale, h)) 431 if (check_set_scale_value (geom_flags, HeightValue, v_scale, h)) ++changed;
429 ++changed;
430 if (check_set_align_value (geom_flags, XValue, h_align, x)) 432 if (check_set_align_value (geom_flags, XValue, h_align, x)) ++changed;
431 ++changed;
432 if (check_set_align_value (geom_flags, YValue, v_align, y)) 433 if (check_set_align_value (geom_flags, YValue, v_align, y)) ++changed;
433 ++changed;
434 } 434 }
435 435
436 if (new_flags != flags) 436 if (new_flags != flags)
437 { 437 {
438 flags = new_flags; 438 flags = new_flags;
439 changed++; 439 changed++;
440 } 440 }
441
441//fprintf (stderr, "flags = %lX, scale = %ux%u, align=%+d%+d\n", 442//fprintf (stderr, "flags = %lX, scale = %ux%u, align=%+d%+d\n",
442// flags, h_scale, v_scale, h_align, v_align); 443// flags, h_scale, v_scale, h_align, v_align);
443 return (changed > 0); 444 return (changed > 0);
444} 445}
445 446
468 { 469 {
469 target->get_window_origin(x, y); 470 target->get_window_origin(x, y);
470 x = -x; 471 x = -x;
471 y = -y; 472 y = -y;
472 } 473 }
474
473 if (h_align != rootAlign) 475 if (h_align != rootAlign)
474 x = make_align_position (h_align, target_width, w > 0 ? w : (int)original_asim->width); 476 x = make_align_position (h_align, target_width, w > 0 ? w : (int)original_asim->width);
477
475 if (v_align != rootAlign) 478 if (v_align != rootAlign)
476 y = make_align_position (v_align, target_height, h > 0 ? h : (int)original_asim->height); 479 y = make_align_position (v_align, target_height, h > 0 ? h : (int)original_asim->height);
477 } 480 }
478 481
479 if (original_asim == NULL 482 if (!original_asim
480 || x >= target_width 483 || x >= target_width
481 || y >= target_height 484 || y >= target_height
482 || (w > 0 && x + w <= 0) 485 || (w > 0 && x + w <= 0)
483 || (h > 0 && y + h <= 0)) 486 || (h > 0 && y + h <= 0))
484 { 487 {
485 if (background) 488 if (background)
486 { 489 {
487 new_pmap_width = background->width; 490 new_pmap_width = background->width;
488 new_pmap_height = background->height; 491 new_pmap_height = background->height;
489 result = background; 492 result = background;
493
490 if (background_tint != TINT_LEAVE_SAME) 494 if (background_tint != TINT_LEAVE_SAME)
491 { 495 {
492 ASImage* tmp = tile_asimage (target->asv, background, 0, 0, 496 ASImage* tmp = tile_asimage (target->asv, background, 0, 0,
493 target_width, target_height, background_tint, 497 target_width, target_height, background_tint,
494 ASA_XImage, 100, ASIMAGE_QUALITY_DEFAULT); 498 ASA_XImage, 100, ASIMAGE_QUALITY_DEFAULT);
500 new_pmap_width = new_pmap_height = 0; 504 new_pmap_width = new_pmap_height = 0;
501 } 505 }
502 else 506 else
503 { 507 {
504 result = original_asim; 508 result = original_asim;
509
505 if ((w > 0 && w != original_asim->width) 510 if ((w > 0 && w != original_asim->width)
506 || (h > 0 && h != original_asim->height)) 511 || (h > 0 && h != original_asim->height))
507 { 512 {
508 result = scale_asimage (target->asv, original_asim, 513 result = scale_asimage (target->asv, original_asim,
509 w > 0 ? w : original_asim->width, 514 w > 0 ? w : original_asim->width,
510 h > 0 ? h : original_asim->height, 515 h > 0 ? h : original_asim->height,
511 background ? ASA_ASImage : ASA_XImage, 516 background ? ASA_ASImage : ASA_XImage,
512 100, ASIMAGE_QUALITY_DEFAULT); 517 100, ASIMAGE_QUALITY_DEFAULT);
513 } 518 }
519
514 if (background == NULL) 520 if (background == NULL)
515 { 521 {
516 /* if tiling - pixmap has to be sized exactly as the image, 522 /* if tiling - pixmap has to be sized exactly as the image,
517 but there is no need to make it bigger then the window! */ 523 but there is no need to make it bigger than the window! */
518 if (h_scale == 0) 524 if (h_scale == 0)
519 new_pmap_width = min (result->width, target_width); 525 new_pmap_width = min (result->width, target_width);
520 if (v_scale == 0) 526 if (v_scale == 0)
521 new_pmap_height = min (result->height, target_height); 527 new_pmap_height = min (result->height, target_height);
522 /* we also need to tile our image in one or both directions */ 528 /* we also need to tile our image in one or both directions */
523 if (h_scale == 0 || v_scale == 0) 529 if (h_scale == 0 || v_scale == 0)
524 { 530 {
525 ASImage *tmp = tile_asimage (target->asv, result, 531 ASImage *tmp = tile_asimage (target->asv, result,
526 (h_scale > 0) ? 0 : (int)result->width - x, 532 (h_scale > 0) ? 0 : (int)result->width - x,
527 (v_scale > 0) ? 0 : (int)result->height - y, 533 (v_scale > 0) ? 0 : (int)result->height - y,
528 new_pmap_width, 534 new_pmap_width,
529 new_pmap_height, 535 new_pmap_height,
530 TINT_LEAVE_SAME, ASA_XImage, 536 TINT_LEAVE_SAME, ASA_XImage,
531 100, ASIMAGE_QUALITY_DEFAULT); 537 100, ASIMAGE_QUALITY_DEFAULT);
532 if (tmp) 538 if (tmp)
533 { 539 {
534 if (result != original_asim) 540 if (result != original_asim)
535 destroy_asimage (&result); 541 destroy_asimage (&result);
542
536 result = tmp; 543 result = tmp;
537 } 544 }
538 } 545 }
539 } 546 }
540 else 547 else
546 layers[0].im = background; 553 layers[0].im = background;
547 layers[0].clip_width = target_width; 554 layers[0].clip_width = target_width;
548 layers[0].clip_height = target_height; 555 layers[0].clip_height = target_height;
549 layers[0].tint = background_tint; 556 layers[0].tint = background_tint;
550 layers[1].im = result; 557 layers[1].im = result;
558
551 if (w <= 0) 559 if (w <= 0)
552 { 560 {
553 /* tile horizontally */ 561 /* tile horizontally */
554 while (x > 0) x -= (int)result->width; 562 while (x > 0) x -= (int)result->width;
555 layers[1].dst_x = x; 563 layers[1].dst_x = x;
559 { 567 {
560 /* clip horizontally */ 568 /* clip horizontally */
561 layers[1].dst_x = x; 569 layers[1].dst_x = x;
562 layers[1].clip_width = result->width; 570 layers[1].clip_width = result->width;
563 } 571 }
572
564 if (h <= 0) 573 if (h <= 0)
565 { 574 {
566 while (y > 0) y -= (int)result->height; 575 while (y > 0) y -= (int)result->height;
567 layers[1].dst_y = y; 576 layers[1].dst_y = y;
568 layers[1].clip_height = result->height + target_height; 577 layers[1].clip_height = result->height + target_height;
570 else 579 else
571 { 580 {
572 layers[1].dst_y = y; 581 layers[1].dst_y = y;
573 layers[1].clip_height = result->height; 582 layers[1].clip_height = result->height;
574 } 583 }
584
575 if (target->rs[Rs_blendtype]) 585 if (target->rs[Rs_blendtype])
576 { 586 {
577 layers[1].merge_scanlines = blend_scanlines_name2func (target->rs[Rs_blendtype]); 587 layers[1].merge_scanlines = blend_scanlines_name2func (target->rs[Rs_blendtype]);
578 if (layers[1].merge_scanlines == NULL) 588 if (layers[1].merge_scanlines == NULL)
579 layers[1].merge_scanlines = alphablend_scanlines; 589 layers[1].merge_scanlines = alphablend_scanlines;
580 } 590 }
591
581 ASImage *tmp = merge_layers (target->asv, layers, 2, target_width, target_height, 592 ASImage *tmp = merge_layers (target->asv, layers, 2, target_width, target_height,
582 ASA_XImage, 0, ASIMAGE_QUALITY_DEFAULT); 593 ASA_XImage, 0, ASIMAGE_QUALITY_DEFAULT);
594
583 if (tmp) 595 if (tmp)
584 { 596 {
585 if (result != original_asim) 597 if (result != original_asim)
586 destroy_asimage (&result); 598 destroy_asimage (&result);
599
587 result = tmp; 600 result = tmp;
588 } 601 }
602
589 free (layers); 603 free (layers);
590 } 604 }
591 } 605 }
592 TIMING_TEST_PRINT_RESULT (asim); 606 TIMING_TEST_PRINT_RESULT (asim);
593 607
622 636
623 int src_x = 0, src_y = 0, dst_x = 0, dst_y = 0; 637 int src_x = 0, src_y = 0, dst_x = 0, dst_y = 0;
624 int dst_width = result->width, dst_height = result->height; 638 int dst_width = result->width, dst_height = result->height;
625 if (background == NULL) 639 if (background == NULL)
626 { 640 {
627 if (h_scale > 0)
628 src_x = make_clip_rectangle (x, result->width, new_pmap_width, dst_x, dst_width); 641 if (h_scale > 0) src_x = make_clip_rectangle (x, result->width , new_pmap_width , dst_x, dst_width );
629 if (v_scale > 0)
630 src_y = make_clip_rectangle (y, result->height, new_pmap_height, dst_y, dst_height); 642 if (v_scale > 0) src_y = make_clip_rectangle (y, result->height, new_pmap_height, dst_y, dst_height);
631 643
632 if (dst_x > 0 || dst_y > 0 644 if (dst_x > 0 || dst_y > 0
633 || dst_x + dst_width < new_pmap_width 645 || dst_x + dst_width < new_pmap_width
634 || dst_y + dst_height < new_pmap_height) 646 || dst_y + dst_height < new_pmap_height)
635 {
636 XFillRectangle (target->dpy, pixmap, gc, 0, 0, new_pmap_width, new_pmap_height); 647 XFillRectangle (target->dpy, pixmap, gc, 0, 0, new_pmap_width, new_pmap_height);
637 }
638 } 648 }
639 649
640 /* put result on pixmap */ 650 /* put result on pixmap */
641 if (dst_x < new_pmap_width && dst_y < new_pmap_height) 651 if (dst_x < new_pmap_width && dst_y < new_pmap_height)
642 asimage2drawable (target->asv, pixmap, result, gc, src_x, src_y, dst_x, dst_y, dst_width, dst_height, True); 652 asimage2drawable (target->asv, pixmap, result, gc, src_x, src_y, dst_x, dst_y, dst_width, dst_height, True);
655bool 665bool
656bgPixmap_t::set_file (const char *file) 666bgPixmap_t::set_file (const char *file)
657{ 667{
658 char *f; 668 char *f;
659 669
660 assert (file != NULL); 670 assert (file);
661 671
662 if (*file != '\0') 672 if (*file)
663 { 673 {
664# ifdef HAVE_AFTERIMAGE 674# ifdef HAVE_AFTERIMAGE
665 if (target->asimman == NULL) 675 if (target->asimman == NULL)
666 target->asimman = create_generic_imageman (target->rs[Rs_path]); 676 target->asimman = create_generic_imageman (target->rs[Rs_path]);
677
667 if ((f = strchr (file, ';')) == NULL) 678 if ((f = strchr (file, ';')) == NULL)
668 original_asim = get_asimage (target->asimman, file, 0xFFFFFFFF, 100); 679 original_asim = get_asimage (target->asimman, file, 0xFFFFFFFF, 100);
669 else 680 else
670 { 681 {
671 size_t len = f - file; 682 size_t len = f - file;
672 f = (char *)malloc (len + 1); 683 f = (char *)malloc (len + 1);
673 strncpy (f, file, len); 684 memcpy (f, file, len);
674 f[len] = '\0'; 685 f[len] = '\0';
675 original_asim = get_asimage (target->asimman, f, 0xFFFFFFFF, 100); 686 original_asim = get_asimage (target->asimman, f, 0xFFFFFFFF, 100);
676 free (f); 687 free (f);
677 } 688 }
689
678 return (original_asim != NULL); 690 return original_asim;
679# endif 691# endif
680 } 692 }
693
681 return false; 694 return false;
682} 695}
683 696
684# endif /* BG_IMAGE_FROM_FILE */ 697# endif /* BG_IMAGE_FROM_FILE */
685 698
690 if (!(flags & isTransparent)) 703 if (!(flags & isTransparent))
691 { 704 {
692 flags |= isTransparent; 705 flags |= isTransparent;
693 return true; 706 return true;
694 } 707 }
708
695 return false; 709 return false;
696} 710}
697 711
698bool 712bool
699bgPixmap_t::set_blur_radius (const char *geom) 713bgPixmap_t::set_blur_radius (const char *geom)
1276# ifdef ENABLE_TRANSPARENCY 1290# ifdef ENABLE_TRANSPARENCY
1277 if (flags & isTransparent) 1291 if (flags & isTransparent)
1278 { 1292 {
1279 XSetWindowBackgroundPixmap (target->dpy, target->parent[0], pixmap); 1293 XSetWindowBackgroundPixmap (target->dpy, target->parent[0], pixmap);
1280 XSetWindowBackgroundPixmap (target->dpy, target->vt, ParentRelative); 1294 XSetWindowBackgroundPixmap (target->dpy, target->vt, ParentRelative);
1281# if HAVE_SCROLLBARS
1282 if (target->scrollBar.win) 1295 if (target->scrollBar.win)
1283 XSetWindowBackgroundPixmap (target->dpy, target->scrollBar.win, ParentRelative); 1296 XSetWindowBackgroundPixmap (target->dpy, target->scrollBar.win, ParentRelative);
1284# endif
1285 } 1297 }
1286 else 1298 else
1287# endif 1299# endif
1288 { 1300 {
1289 flags |= isVtOrigin; 1301 flags |= isVtOrigin;
1290 /* force old pixmap dereference in case it was transparent before :*/ 1302 /* force old pixmap dereference in case it was transparent before :*/
1291 XSetWindowBackground (target->dpy, target->parent[0], target->pix_colors[Color_border]); 1303 XSetWindowBackground (target->dpy, target->parent[0], target->pix_colors[Color_border]);
1292 XSetWindowBackgroundPixmap (target->dpy, target->vt, pixmap); 1304 XSetWindowBackgroundPixmap (target->dpy, target->vt, pixmap);
1293 /* do we also need to set scrollbar's background here ? */ 1305 /* do we also need to set scrollbar's background here ? */
1294# if HAVE_SCROLLBARS
1295 if (target->scrollBar.win) 1306 if (target->scrollBar.win)
1296 XSetWindowBackground (target->dpy, target->scrollBar.win, target->pix_colors[Color_border]); 1307 XSetWindowBackground (target->dpy, target->scrollBar.win, target->pix_colors[Color_border]);
1297# endif
1298 } 1308 }
1299 } 1309 }
1300 else 1310 else
1301 { 1311 {
1302 /* set target background to a pixel */ 1312 /* set target background to a pixel */
1303 XSetWindowBackground (target->dpy, target->parent[0], target->pix_colors[Color_border]); 1313 XSetWindowBackground (target->dpy, target->parent[0], target->pix_colors[Color_border]);
1304 XSetWindowBackground (target->dpy, target->vt, target->pix_colors[Color_bg]); 1314 XSetWindowBackground (target->dpy, target->vt, target->pix_colors[Color_bg]);
1305 /* do we also need to set scrollbar's background here ? */ 1315 /* do we also need to set scrollbar's background here ? */
1306# if HAVE_SCROLLBARS
1307 if (target->scrollBar.win) 1316 if (target->scrollBar.win)
1308 XSetWindowBackground (target->dpy, target->scrollBar.win, target->pix_colors[Color_border]); 1317 XSetWindowBackground (target->dpy, target->scrollBar.win, target->pix_colors[Color_border]);
1309# endif
1310 } 1318 }
1311 /* don't want Expose on the parent or vt. It is better to use 1319 /* don't want Expose on the parent or vt. It is better to use
1312 scr_touch or we get a great deal of flicker otherwise: */ 1320 scr_touch or we get a great deal of flicker otherwise: */
1313 XClearWindow (target->dpy, target->parent[0]); 1321 XClearWindow (target->dpy, target->parent[0]);
1314 1322
1315# if HAVE_SCROLLBARS
1316 if (target->scrollBar.win) 1323 if (target->scrollBar.win)
1317 { 1324 {
1318 target->scrollBar.setIdle (); 1325 target->scrollBar.state = STATE_IDLE;
1319 target->scrollbar_show (0); 1326 target->scrollbar_show (0);
1320 } 1327 }
1321# endif
1322 1328
1323 target->want_refresh = 1; 1329 target->want_refresh = 1;
1324 flags |= hasChanged; 1330 flags |= hasChanged;
1325 } 1331 }
1326} 1332}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines