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.371 by sf-exg, Wed Feb 9 23:07:18 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 ((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 }
2906{ 2878{
2907 selection_wait = Sel_none; 2879 selection_wait = Sel_none;
2908 2880
2909 incr_buf_size = 0; 2881 incr_buf_size = 0;
2910 free (incr_buf); 2882 free (incr_buf);
2883 incr_buf = 0;
2911 2884
2912 rxvt_warn ("data loss: timeout on INCR selection paste, ignoring.\n"); 2885 rxvt_warn ("data loss: timeout on INCR selection paste, ignoring.\n");
2913} 2886}
2914 2887
2915void 2888void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines