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

Comparing rxvt-unicode/src/screen.C (file contents):
Revision 1.364 by sf-exg, Thu Jan 20 17:39:29 2011 UTC vs.
Revision 1.370 by sf-exg, Sun Feb 6 11:42:28 2011 UTC

38 while (len--) 38 while (len--)
39 *start++ = value; 39 *start++ = value;
40} 40}
41 41
42/* ------------------------------------------------------------------------- */ 42/* ------------------------------------------------------------------------- */
43#define PROP_SIZE 256*1024
44#define PASTE_SIZE 32768
45#define TABSIZE 8 /* default tab size */ 43#define TABSIZE 8 /* default tab size */
46 44
47/* ------------------------------------------------------------------------- * 45/* ------------------------------------------------------------------------- *
48 * GENERAL SCREEN AND SELECTION UPDATE ROUTINES * 46 * GENERAL SCREEN AND SELECTION UPDATE ROUTINES *
49 * ------------------------------------------------------------------------- */ 47 * ------------------------------------------------------------------------- */
1685 { 1683 {
1686 rvideo_state = on; 1684 rvideo_state = on;
1687 1685
1688 ::swap (pix_colors[Color_fg], pix_colors[Color_bg]); 1686 ::swap (pix_colors[Color_fg], pix_colors[Color_bg]);
1689#ifdef HAVE_BG_PIXMAP 1687#ifdef HAVE_BG_PIXMAP
1690 if (bgPixmap.pixmap == None) 1688 if (bg_pixmap == None)
1691#endif 1689#endif
1692 XSetWindowBackground (dpy, vt, pix_colors[Color_bg]); 1690 XSetWindowBackground (dpy, vt, pix_colors[Color_bg]);
1693 1691
1694 XGCValues gcvalue; 1692 XGCValues gcvalue;
1695 gcvalue.foreground = pix_colors[Color_fg]; 1693 gcvalue.foreground = pix_colors[Color_fg];
2031 refresh_count = 0; 2029 refresh_count = 0;
2032 2030
2033 unsigned int old_screen_flags = screen.flags; 2031 unsigned int old_screen_flags = screen.flags;
2034 char have_bg = 0; 2032 char have_bg = 0;
2035#ifdef HAVE_BG_PIXMAP 2033#ifdef HAVE_BG_PIXMAP
2036 have_bg = bgPixmap.pixmap != None; 2034 have_bg = bg_pixmap != None;
2037#endif 2035#endif
2038 ocrow = oldcursor.row; /* is there an old outline cursor on screen? */ 2036 ocrow = oldcursor.row; /* is there an old outline cursor on screen? */
2039 2037
2040 /* 2038 /*
2041 * B: reverse any characters which are selected 2039 * B: reverse any characters which are selected
2513rxvt_term::scr_recolour (bool refresh) NOTHROW 2511rxvt_term::scr_recolour (bool refresh) NOTHROW
2514{ 2512{
2515 bool transparent = false; 2513 bool transparent = false;
2516 2514
2517#ifdef HAVE_BG_PIXMAP 2515#ifdef HAVE_BG_PIXMAP
2518 if (bgPixmap.pixmap != None) 2516 if (bg_pixmap != None)
2519 { 2517 {
2520# ifdef ENABLE_TRANSPARENCY 2518# ifdef ENABLE_TRANSPARENCY
2521 if (bgPixmap.flags & bgPixmap_t::isTransparent) 2519 if (bg_flags & BG_IS_TRANSPARENT)
2522 { 2520 {
2523 XSetWindowBackgroundPixmap (dpy, parent[0], bgPixmap.pixmap); 2521 XSetWindowBackgroundPixmap (dpy, parent[0], bg_pixmap);
2524 XSetWindowBackgroundPixmap (dpy, vt, ParentRelative); 2522 XSetWindowBackgroundPixmap (dpy, vt, ParentRelative);
2525 2523
2526 transparent = true; 2524 transparent = true;
2527 } 2525 }
2528 else 2526 else
2529# endif 2527# endif
2530 { 2528 {
2531 XSetWindowBackground (dpy, parent[0], pix_colors[Color_border]); 2529 XSetWindowBackground (dpy, parent[0], pix_colors[Color_border]);
2532 XSetWindowBackgroundPixmap (dpy, vt, bgPixmap.pixmap); 2530 XSetWindowBackgroundPixmap (dpy, vt, bg_pixmap);
2533 } 2531 }
2534 } 2532 }
2535 else 2533 else
2536#endif 2534#endif
2537 { 2535 {
2742void 2740void
2743rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW 2741rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop) NOTHROW
2744{ 2742{
2745 if (prop == None) /* check for failed XConvertSelection */ 2743 if (prop == None) /* check for failed XConvertSelection */
2746 { 2744 {
2745 int selnum = selection_type & Sel_whereMask;
2746
2747 if ((selection_type & Sel_CompoundText)) 2747 if ((selection_type & Sel_CompoundText))
2748 { 2748 {
2749 int selnum = selection_type & Sel_whereMask;
2750
2751 selection_type = 0; 2749 selection_type = 0;
2752 if (selnum != Sel_direct)
2753 selection_request_other (XA_STRING, selnum); 2750 selection_request_other (XA_STRING, selnum);
2754 } 2751 }
2755 2752
2756 if ((selection_type & Sel_UTF8String)) 2753 if ((selection_type & Sel_UTF8String))
2757 { 2754 {
2758 int selnum = selection_type & Sel_whereMask;
2759
2760 selection_type = Sel_CompoundText; 2755 selection_type = Sel_CompoundText;
2761 if (selnum != Sel_direct)
2762 selection_request_other (xa[XA_COMPOUND_TEXT], selnum); 2756 selection_request_other (xa[XA_COMPOUND_TEXT], selnum);
2763 else
2764 selection_type = 0;
2765 } 2757 }
2766 2758
2767 return; 2759 return;
2768 } 2760 }
2769 2761
2770 unsigned long bytes_after; 2762 unsigned long bytes_after;
2771 XTextProperty ct; 2763 XTextProperty ct;
2772 2764
2765 // length == (2^31 - 1) / 4, as gdk
2773 if (XGetWindowProperty (dpy, win, prop, 2766 if (XGetWindowProperty (dpy, win, prop,
2774 0, PROP_SIZE / 4, 2767 0, 0x1fffffff,
2775 delete_prop, AnyPropertyType, 2768 delete_prop, AnyPropertyType,
2776 &ct.encoding, &ct.format, 2769 &ct.encoding, &ct.format,
2777 &ct.nitems, &bytes_after, 2770 &ct.nitems, &bytes_after,
2778 &ct.value) != Success) 2771 &ct.value) != Success)
2779 { 2772 {
2781 goto bailout; 2774 goto bailout;
2782 } 2775 }
2783 2776
2784 if (ct.encoding == None) 2777 if (ct.encoding == None)
2785 goto bailout; 2778 goto bailout;
2786
2787 if (bytes_after)
2788 {
2789 // fetch and append remaining data
2790 XTextProperty ct2;
2791
2792 if (XGetWindowProperty (dpy, win, prop,
2793 ct.nitems / 4, (bytes_after + 3) / 4,
2794 delete_prop, AnyPropertyType,
2795 &ct2.encoding, &ct2.format,
2796 &ct2.nitems, &bytes_after,
2797 &ct2.value) != Success)
2798 goto bailout;
2799
2800 // realloc should be compatible to XFree, here, and elsewhere, too
2801 ct.value = (unsigned char *)rxvt_realloc (ct.value, ct.nitems + ct2.nitems + 1);
2802 memcpy (ct.value + ct.nitems, ct2.value, ct2.nitems + 1);
2803 ct.nitems += ct2.nitems;
2804
2805 XFree (ct2.value);
2806 }
2807 2779
2808 if (ct.value == 0) 2780 if (ct.value == 0)
2809 goto bailout; 2781 goto bailout;
2810 2782
2811 if (ct.encoding == xa[XA_INCR]) 2783 if (ct.encoding == xa[XA_INCR])
2842 { 2814 {
2843 /* 2815 /*
2844 * pass through again trying CUT_BUFFER0 if we've come from 2816 * pass through again trying CUT_BUFFER0 if we've come from
2845 * XConvertSelection () but nothing was presented 2817 * XConvertSelection () but nothing was presented
2846 */ 2818 */
2847 selection_paste (display->root, XA_CUT_BUFFER0, False); 2819 selection_paste (display->root, XA_CUT_BUFFER0, false);
2848 } 2820 }
2849 2821
2850 goto bailout; 2822 goto bailout;
2851 } 2823 }
2852 } 2824 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines