Introduction
Introduction Statistics Contact Development Disclaimer Help
Encode selections using the X multibyte functions. - sam - An updated version o…
git clone git://vernunftzentrum.de/sam.git
Log
Files
Refs
LICENSE
---
commit c27bc210c40768c6ff027b7fe505cec34bcdbb13
parent f50f2310f82b0664d2797e3240d075f350ecf45d
Author: Rob King <[email protected]>
Date: Wed, 7 Dec 2016 15:43:23 -0600
Encode selections using the X multibyte functions.
Diffstat:
libXg/gwin.c | 55 +++++++++++++++++--------------
1 file changed, 30 insertions(+), 25 deletions(-)
---
diff --git a/libXg/gwin.c b/libXg/gwin.c
@@ -521,22 +521,24 @@ static void
SelCallback(Widget w, XtPointer cldata, Atom *sel, Atom *seltype,
XtPointer val, uint64_t *len, int *fmt)
{
- String s;
- int n;
GwinWidget gw = (GwinWidget)w;
+ XTextProperty p = {0};
+ char *ls[2] = {(char *)val, NULL};
- if(gw->gwin.selection)
+ if(gw->gwin.selection){
XtFree(gw->gwin.selection);
- if(*seltype != XA_STRING)
- n = 0;
- else
- n = (*len) * (*fmt/8);
- s = (String)XtMalloc(n+1);
- if(n > 0)
- memcpy(s, (char *)val, n);
- s[n] = 0;
- gw->gwin.selection = s;
+ gw->gwin.selection = NULL;
+ }
+
+ if(*seltype != XInternAtom(_dpy, "UTF8_STRING", 0))
+ return;
+
+ if (XmbTextListToTextProperty(_dpy, ls, 1, XUTF8StringStyle, &p) != Succes…
+ return;
+
+ gw->gwin.selection = strdup(p.value);
XtFree(val);
+ XFree(p.value);
}
static Boolean
@@ -544,16 +546,19 @@ SendSel(Widget w, Atom *sel, Atom *target, Atom *rtype, X…
uint64_t *anslen, int *ansfmt)
{
GwinWidget gw = (GwinWidget)w;
- char *s;
-
- if(*target == XA_STRING){
- s = gw->gwin.selection;
- if(!s)
- s = "";
- *rtype = XA_STRING;
- *ans = (XtPointer) XtNewString(s);
- *anslen = strlen(*ans);
- *ansfmt = 8;
+ XTextProperty p = {0};
+ char *ls[2] = {NULL, NULL};
+
+ if (*target == XA_STRING){
+ ls[0] = gw->gwin.selection? gw->gwin.selection : "";
+ if (XmbTextListToTextProperty(_dpy, ls, 1, XUTF8StringStyle, &p) != Su…
+ return false;
+
+ *rtype = p.encoding;
+ *ans = (XtPointer) XtNewString(p.value);
+ *anslen = p.nitems;
+ *ansfmt = p.format;
+ XFree(p.value);
return true;
}
@@ -569,12 +574,12 @@ SelectSwap(Widget w, String s)
gw = (GwinWidget)w;
if(gw->gwin.selection){
XtFree(gw->gwin.selection);
- gw->gwin.selection = 0;
+ gw->gwin.selection = NULL;
}
- XtGetSelectionValue(w, XA_PRIMARY, XA_STRING, SelCallback, 0,
+ XtGetSelectionValue(w, XA_PRIMARY, XInternAtom(_dpy, "UTF8_STRING", 0), Se…
XtLastTimestampProcessed(XtDisplay(w)));
- while(gw->gwin.selection == 0)
+ while(gw->gwin.selection == NULL)
XtAppProcessEvent(XtWidgetToApplicationContext(w) , XtIMAll);
ans = gw->gwin.selection;
gw->gwin.selection = XtMalloc(strlen(s)+1);
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.