rpms/xclip/F-7 xclip-0.10-utf8.patch,NONE,1.1 xclip.spec,1.4,1.5

Tom Callaway (spot) fedora-extras-commits at redhat.com
Mon Jan 14 20:44:57 UTC 2008


Author: spot

Update of /cvs/extras/rpms/xclip/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv21981/F-7

Modified Files:
	xclip.spec 
Added Files:
	xclip-0.10-utf8.patch 
Log Message:

Enable utf8 support by default (-noutf8 as a fallback option), bz 428192


xclip-0.10-utf8.patch:

--- NEW FILE xclip-0.10-utf8.patch ---
diff -up xclip-0.10/xcprint.c.utf8 xclip-0.10/xcprint.c
--- xclip-0.10/xcprint.c.utf8	2007-08-26 11:06:30.000000000 -0400
+++ xclip-0.10/xcprint.c	2008-01-14 15:31:03.000000000 -0500
@@ -45,6 +45,7 @@ prhelp(char *name)
 	    "  -h, -help        usage information\n"
 	    "      -selection   selection to access (\"primary\", "
 	    "\"secondary\", \"clipboard\" or \"buffer-cut\")\n"
+	    "      -noutf8      don't treat text as utf-8, use old unicode\n"
 	    "      -version     version information\n"
 	    "      -silent      errors only, run in background (default)\n"
 	    "      -quiet       run in foreground, show what's happening\n"
diff -up xclip-0.10/xclib.c.utf8 xclip-0.10/xclib.c
--- xclip-0.10/xclib.c.utf8	2007-08-12 09:44:09.000000000 -0400
+++ xclip-0.10/xclib.c	2008-01-14 15:31:03.000000000 -0500
@@ -84,6 +84,8 @@ xcstrdup(const char *string)
  * 
  * The selection to return
  * 
+ * The target(UTF8_STRING or XA_STRING) to return 
+ *
  * A pointer to a char array to put the selection into.
  * 
  * A pointer to a long to record the length of the char array
@@ -96,12 +98,13 @@ xcstrdup(const char *string)
 int
 xcout(Display * dpy,
       Window win,
-      XEvent evt, Atom sel, unsigned char **txt, unsigned long *len, unsigned int *context)
+      XEvent evt, Atom sel, Atom target, unsigned char **txt, unsigned long *len, unsigned int *context)
 {
     /* a property for other windows to put their selection into */
     static Atom pty;
     static Atom inc;
     Atom pty_type;
+    Atom atomUTF8String;
     int pty_format;
 
     /* buffer for XGetWindowProperty to dump data into */
@@ -129,14 +132,21 @@ xcout(Display * dpy,
 	}
 
 	/* send a selection request */
-	XConvertSelection(dpy, sel, XA_STRING, pty, win, CurrentTime);
+	XConvertSelection(dpy, sel, target, pty, win, CurrentTime);
 	*context = XCLIB_XCOUT_SENTCONVSEL;
 	return (0);
 
     case XCLIB_XCOUT_SENTCONVSEL:
+	atomUTF8String = XInternAtom(dpy, "UTF8_STRING", False);
 	if (evt.type != SelectionNotify)
 	    return (0);
 
+	/* fallback to XA_STRING when UTF8_STRING failed */
+	if (target == atomUTF8String && evt.xselection.property == None) {
+		*context = XCLIB_XCOUT_FALLBACK;
+		return(0);
+	}
+
 	/* find the size and format of the data in property */
 	XGetWindowProperty(dpy,
 			   win,
@@ -295,6 +305,8 @@ xcout(Display * dpy,
  * app in it's SelectionRequest. Things are likely to break if you change the
  * value of this yourself.
  * 
+ * The target(UTF8_STRING or XA_STRING) to respond to
+ *
  * A pointer to an array of chars to read selection data from.
  * 
  * The length of the array of chars.
@@ -308,7 +320,7 @@ int
 xcin(Display * dpy,
      Window * win,
      XEvent evt,
-     Atom * pty, unsigned char *txt, unsigned long len, unsigned long *pos, unsigned int *context)
+     Atom * pty, Atom target, unsigned char *txt, unsigned long len, unsigned long *pos, unsigned int *context)
 {
     unsigned long chunk_len;	/* length of current chunk (for incr
 				 * transfers only)
@@ -349,14 +361,14 @@ xcin(Display * dpy,
 
 	/* put the data into an property */
 	if (evt.xselectionrequest.target == targets) {
-	    Atom types[2] = { targets, XA_STRING };
+	    Atom types[2] = { targets, target };
 
 	    /* send data all at once (not using INCR) */
 	    XChangeProperty(dpy,
 			    *win,
 			    *pty,
-			    targets,
-			    8, PropModeReplace, (unsigned char *) types, (int) sizeof(types)
+			    XA_ATOM,
+			    32, PropModeReplace, (unsigned char *) types, (int)(sizeof(types) / sizeof(Atom))
 		);
 	}
 	else if (len > chunk_size) {
@@ -375,7 +387,7 @@ xcin(Display * dpy,
 	    /* send data all at once (not using INCR) */
 	    XChangeProperty(dpy,
 			    *win,
-			    *pty, XA_STRING, 8, PropModeReplace, (unsigned char *) txt, (int) len);
+			    *pty, target, 8, PropModeReplace, (unsigned char *) txt, (int) len);
 	}
 
 	/* Perhaps FIXME: According to ICCCM section 2.5, we should
@@ -440,13 +452,13 @@ xcin(Display * dpy,
 	if (chunk_len) {
 	    /* put the chunk into the property */
 	    XChangeProperty(dpy,
-			    *win, *pty, XA_STRING, 8, PropModeReplace, &txt[*pos], (int) chunk_len);
+			    *win, *pty, target, 8, PropModeReplace, &txt[*pos], (int) chunk_len);
 	}
 	else {
 	    /* make an empty property to show we've
 	     * finished the transfer
 	     */
-	    XChangeProperty(dpy, *win, *pty, XA_STRING, 8, PropModeReplace, 0, 0);
+	    XChangeProperty(dpy, *win, *pty, target, 8, PropModeReplace, 0, 0);
 	}
 	XFlush(dpy);
 
diff -up xclip-0.10/xclip.c.utf8 xclip-0.10/xclip.c
--- xclip-0.10/xclip.c.utf8	2007-08-12 09:44:09.000000000 -0400
+++ xclip-0.10/xclip.c	2008-01-14 15:37:32.000000000 -0500
@@ -30,12 +30,13 @@
 #include "xclib.h"
 
 /* command line option table for XrmParseCommand() */
-XrmOptionDescRec opt_tab[11];
+XrmOptionDescRec opt_tab[12];
 
 /* Options that get set on the command line */
 int sloop = 0;			/* number of loops */
 char *sdisp = NULL;		/* X display to connect to */
 Atom sseln = XA_PRIMARY;	/* X selection to work with */
+Atom target = XA_STRING;
 
 /* Flags for command line options */
 static int fverb = OSILENT;	/* output level */
@@ -171,6 +172,29 @@ doOptSel(void)
     }
 }
 
+/* process noutf8 command line option */
+static void doOptNoUtf8 (void)
+{
+	/* check for -noutf8 */
+	if (
+		XrmGetResource(
+			opt_db,
+			"xclip.noutf8",
+			"Xclip.noutf8",
+			&rec_typ,
+			&rec_val
+		)
+	)
+	{
+		if (fverb == OVERBOSE)  /* print in verbose mode only */
+			fprintf(stderr, "Using old UNICODE instead of UTF8.\n", sloop);
+	} else {
+		target = XA_UTF8_STRING(dpy);
+		if (fverb == OVERBOSE)  /* print in verbose mode only */
+			fprintf(stderr, "Using UTF8_STRING.\n", sloop);
+	}
+}
+
 static void
 doIn(Window win, const char *progname)
 {
@@ -300,7 +324,7 @@ doIn(Window win, const char *progname)
 
 	    XNextEvent(dpy, &evt);
 
-	    finished = xcin(dpy, &cwin, evt, &pty, sel_buf, sel_len, &sel_pos, &context);
+	    finished = xcin(dpy, &cwin, evt, &pty, target, sel_buf, sel_len, &sel_pos, &context);
 
 	    if (evt.type == SelectionClear)
 		clear = 1;
@@ -333,7 +357,15 @@ doOut(Window win)
 		XNextEvent(dpy, &evt);
 
 	    /* fetch the selection, or part of it */
-	    xcout(dpy, win, evt, sseln, &sel_buf, &sel_len, &context);
+	    xcout(dpy, win, evt, sseln, target, &sel_buf, &sel_len, &context);
+
+	    /* fallback is needed. set XA_STRING to target and restart the loop. */
+	    if (context == XCLIB_XCOUT_FALLBACK)
+	    {
+		context = XCLIB_XCOUT_NONE;
+		target = XA_STRING;
+		continue;
+	    }
 
 	    /* only continue if xcout() is doing something */
 	    if (context == XCLIB_XCOUT_NONE)
@@ -433,6 +465,12 @@ main(int argc, char *argv[])
     opt_tab[10].argKind = XrmoptionNoArg;
     opt_tab[10].value = (XPointer) xcstrdup("V");
 
+    /* utf8 option entry */
+    opt_tab[11].option = xcstrdup("-noutf8");
+    opt_tab[11].specifier = xcstrdup(".noutf8");
+    opt_tab[11].argKind = XrmoptionNoArg;
+    opt_tab[11].value = (XPointer) xcstrdup("N");
+
     /* parse command line options */
     doOptMain(argc, argv);
 
@@ -450,6 +488,9 @@ main(int argc, char *argv[])
     /* parse selection command line option */
     doOptSel();
 
+    /* parse noutf8 command line option */
+    doOptNoUtf8();
+
     /* Create a window to trap events */
     win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 1, 1, 0, 0, 0);
 
diff -up xclip-0.10/xclib.h.utf8 xclip-0.10/xclib.h
--- xclip-0.10/xclib.h.utf8	2007-08-12 05:47:26.000000000 -0400
+++ xclip-0.10/xclib.h	2008-01-14 15:31:03.000000000 -0500
@@ -24,6 +24,7 @@
 #define XCLIB_XCOUT_NONE	0	/* no context */
 #define XCLIB_XCOUT_SENTCONVSEL	1	/* sent a request */
 #define XCLIB_XCOUT_INCR	2	/* in an incr loop */
+#define XCLIB_XCOUT_FALLBACK	3	/* UTF8_STRING failed, need fallback to XA_STRING */
 
 /* xcin() contexts */
 #define XCLIB_XCIN_NONE		0
@@ -36,6 +37,7 @@ extern int xcout(
 	Window,
 	XEvent,
 	Atom,
+	Atom,
 	unsigned char**,
 	unsigned long*,
 	unsigned int*
@@ -45,6 +47,7 @@ extern int xcin(
 	Window*,
 	XEvent,
 	Atom*,
+	Atom,
 	unsigned char*,
 	unsigned long,
 	unsigned long*,


Index: xclip.spec
===================================================================
RCS file: /cvs/extras/rpms/xclip/F-7/xclip.spec,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- xclip.spec	16 Oct 2007 14:01:57 -0000	1.4
+++ xclip.spec	14 Jan 2008 20:44:23 -0000	1.5
@@ -1,11 +1,12 @@
 Name:		xclip
 Version:	0.10
-Release:	1%{?dist}
+Release:	2%{?dist}
 License:	GPLv2+
 Group:		Applications/System
 Summary:	Command line clipboard grabber
 URL:		http://sourceforge.net/projects/xclip
 Source0:	http://downloads.sourceforge.net/xclip/%{name}-%{version}.tar.gz
+Patch0:		xclip-0.10-utf8.patch
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  libXmu-devel, libICE-devel, libX11-devel, libXext-devel
 
@@ -19,6 +20,7 @@
 
 %prep
 %setup -q
+%patch0 -p1 -b .utf8
 
 %build
 %configure
@@ -42,6 +44,9 @@
 %{_mandir}/man1/xclip.1*
 
 %changelog
+* Mon Jan 14 2008 Tom "spot" Callaway <tcallawa at redhat.com> 0.10-2
+- enable utf8 support by default
+
 * Tue Oct 16 2007 Tom "spot" Callaway <tcallawa at redhat.com> 0.10-1
 - bump to 0.10
 - new URL




More information about the fedora-extras-commits mailing list