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.365 by sf-exg, Thu Jan 27 17:37:19 2011 UTC vs.
Revision 1.369 by sf-exg, Sun Feb 6 11:42:03 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 * ------------------------------------------------------------------------- */
2516 2514
2517#ifdef HAVE_BG_PIXMAP 2515#ifdef HAVE_BG_PIXMAP
2518 if (bg_pixmap != None) 2516 if (bg_pixmap != None)
2519 { 2517 {
2520# ifdef ENABLE_TRANSPARENCY 2518# ifdef ENABLE_TRANSPARENCY
2521 if (bg_flags & isTransparent) 2519 if (bg_flags & BG_IS_TRANSPARENT)
2522 { 2520 {
2523 XSetWindowBackgroundPixmap (dpy, parent[0], bg_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;
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 (selnum == Sel_direct)
2748 selection_type = 0;
2749
2747 if ((selection_type & Sel_CompoundText)) 2750 if ((selection_type & Sel_CompoundText))
2748 { 2751 {
2749 int selnum = selection_type & Sel_whereMask;
2750
2751 selection_type = 0; 2752 selection_type = 0;
2752 if (selnum != Sel_direct)
2753 selection_request_other (XA_STRING, selnum); 2753 selection_request_other (XA_STRING, selnum);
2754 } 2754 }
2755 2755
2756 if ((selection_type & Sel_UTF8String)) 2756 if ((selection_type & Sel_UTF8String))
2757 { 2757 {
2758 int selnum = selection_type & Sel_whereMask;
2759
2760 selection_type = Sel_CompoundText; 2758 selection_type = Sel_CompoundText;
2761 if (selnum != Sel_direct)
2762 selection_request_other (xa[XA_COMPOUND_TEXT], selnum); 2759 selection_request_other (xa[XA_COMPOUND_TEXT], selnum);
2763 else
2764 selection_type = 0;
2765 } 2760 }
2766 2761
2767 return; 2762 return;
2768 } 2763 }
2769 2764
2770 unsigned long bytes_after; 2765 unsigned long bytes_after;
2771 XTextProperty ct; 2766 XTextProperty ct;
2772 2767
2768 // length == (2^31 - 1) / 4, as gdk
2773 if (XGetWindowProperty (dpy, win, prop, 2769 if (XGetWindowProperty (dpy, win, prop,
2774 0, PROP_SIZE / 4, 2770 0, 0x1fffffff,
2775 delete_prop, AnyPropertyType, 2771 delete_prop, AnyPropertyType,
2776 &ct.encoding, &ct.format, 2772 &ct.encoding, &ct.format,
2777 &ct.nitems, &bytes_after, 2773 &ct.nitems, &bytes_after,
2778 &ct.value) != Success) 2774 &ct.value) != Success)
2779 { 2775 {
2781 goto bailout; 2777 goto bailout;
2782 } 2778 }
2783 2779
2784 if (ct.encoding == None) 2780 if (ct.encoding == None)
2785 goto bailout; 2781 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 2782
2808 if (ct.value == 0) 2783 if (ct.value == 0)
2809 goto bailout; 2784 goto bailout;
2810 2785
2811 if (ct.encoding == xa[XA_INCR]) 2786 if (ct.encoding == xa[XA_INCR])
2842 { 2817 {
2843 /* 2818 /*
2844 * pass through again trying CUT_BUFFER0 if we've come from 2819 * pass through again trying CUT_BUFFER0 if we've come from
2845 * XConvertSelection () but nothing was presented 2820 * XConvertSelection () but nothing was presented
2846 */ 2821 */
2847 selection_paste (display->root, XA_CUT_BUFFER0, False); 2822 selection_paste (display->root, XA_CUT_BUFFER0, false);
2848 } 2823 }
2849 2824
2850 goto bailout; 2825 goto bailout;
2851 } 2826 }
2852 } 2827 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines