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

Comparing rxvt-unicode/src/rxvtperl.xs (file contents):
Revision 1.248 by sf-exg, Sat May 8 06:16:21 2021 UTC vs.
Revision 1.259 by sf-exg, Sun Mar 5 06:11:32 2023 UTC

30#include "../config.h" 30#include "../config.h"
31 31
32#include <stddef.h> 32#include <stddef.h>
33#include <stdarg.h> 33#include <stdarg.h>
34 34
35#include "unistd.h" 35#include <unistd.h>
36
37#include <X11/extensions/shape.h>
38
39// support old includes (https://bugs.freedesktop.org/show_bug.cgi?id=2799, https://lists.x.org/archives/xorg-arch/2005-March/000004.html)
40#ifndef ShapeInput
41# define ShapeInput 2
42#endif
36 43
37#include "ev_cpp.h" 44#include "ev_cpp.h"
38#include "rxvt.h" 45#include "rxvt.h"
39#include "keyboard.h" 46#include "keyboard.h"
40#include "rxvtutil.h" 47#include "rxvtutil.h"
377/* but therse are not guaranteed anyway... */ 384/* but therse are not guaranteed anyway... */
378rxvt_perl_interp::~rxvt_perl_interp () 385rxvt_perl_interp::~rxvt_perl_interp ()
379{ 386{
380 if (perl) 387 if (perl)
381 { 388 {
389 localise_env set_environ (perl_environ);
382 perl_destruct (perl); 390 perl_destruct (perl);
383 perl_free (perl); 391 perl_free (perl);
384 PERL_SYS_TERM (); 392 PERL_SYS_TERM ();
385 } 393 }
386} 394}
528 THIS->perl.grabtime = 0; 536 THIS->perl.grabtime = 0;
529 } 537 }
530} 538}
531 539
532bool 540bool
533rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) 541rxvt_perl_interp::invoke (rxvt_term *term, int htype, ...)
534{ 542{
535 if (!perl || !term->perl.self) 543 if (!perl || !term->perl.self)
536 return false; 544 return false;
537 545
538 localise_env set_environ (perl_environ); 546 localise_env set_environ (perl_environ);
820 } *civ, const_iv[] = { 828 } *civ, const_iv[] = {
821# define const_iv(name) { # name, (IV)name } 829# define const_iv(name) { # name, (IV)name }
822 const_iv (HOOK_INIT), 830 const_iv (HOOK_INIT),
823 const_iv (HOOK_DESTROY), 831 const_iv (HOOK_DESTROY),
824 const_iv (HOOK_ACTION), 832 const_iv (HOOK_ACTION),
833 const_iv (HOOK_OSC_SEQ),
834 const_iv (HOOK_OSC_SEQ_PERL),
825 835
826 const_iv (NUM_RESOURCES), 836 const_iv (NUM_RESOURCES),
827 const_iv (DEFAULT_RSTYLE), 837 const_iv (DEFAULT_RSTYLE),
828 const_iv (OVERLAY_RSTYLE), 838 const_iv (OVERLAY_RSTYLE),
829 const_iv (Color_Bits), 839 const_iv (Color_Bits),
844 const_iv (RS_Uline), 854 const_iv (RS_Uline),
845 855
846 // TODO: should support all colour constants, create colorinc.h &c 856 // TODO: should support all colour constants, create colorinc.h &c
847 const_iv (Color_fg), 857 const_iv (Color_fg),
848 const_iv (Color_bg), 858 const_iv (Color_bg),
849#if OFF_FOCUS_FADING 859# if OFF_FOCUS_FADING
850 const_iv (Color_fade), 860 const_iv (Color_fade),
851#endif 861# endif
852 const_iv (Color_pointer_fg), 862 const_iv (Color_pointer_fg),
853 const_iv (Color_pointer_bg), 863 const_iv (Color_pointer_bg),
854 const_iv (Color_border), 864 const_iv (Color_border),
855 const_iv (NRS_COLORS), 865 const_iv (NRS_COLORS),
856 const_iv (TOTAL_COLORS), 866 const_iv (TOTAL_COLORS),
857 867
868 const_iv (None),
858 const_iv (CurrentTime), 869 const_iv (CurrentTime),
859 const_iv (ShiftMask), 870 const_iv (ShiftMask),
860 const_iv (LockMask), 871 const_iv (LockMask),
861 const_iv (ControlMask), 872 const_iv (ControlMask),
862 const_iv (Mod1Mask), 873 const_iv (Mod1Mask),
933 const_iv (SelectionRequest), 944 const_iv (SelectionRequest),
934 const_iv (SelectionNotify), 945 const_iv (SelectionNotify),
935 const_iv (ColormapNotify), 946 const_iv (ColormapNotify),
936 const_iv (ClientMessage), 947 const_iv (ClientMessage),
937 const_iv (MappingNotify), 948 const_iv (MappingNotify),
949
950 // shape extension
951 const_iv (ShapeSet),
952 const_iv (ShapeUnion),
953 const_iv (ShapeIntersect),
954 const_iv (ShapeSubtract),
955 const_iv (ShapeInvert),
956
957 const_iv (ShapeBounding),
958 const_iv (ShapeClip),
959 const_iv (ShapeInput),
960
961 // XIM
938# if ENABLE_XIM_ONTHESPOT 962# if ENABLE_XIM_ONTHESPOT
939 const_iv (XIMReverse), 963 const_iv (XIMReverse),
940 const_iv (XIMUnderline), 964 const_iv (XIMUnderline),
941 const_iv (XIMHighlight), 965 const_iv (XIMHighlight),
942 const_iv (XIMPrimary), 966 const_iv (XIMPrimary),
943 const_iv (XIMSecondary), 967 const_iv (XIMSecondary),
944 const_iv (XIMTertiary), 968 const_iv (XIMTertiary),
945 const_iv (XIMVisibleToForward), 969 const_iv (XIMVisibleToForward),
946 const_iv (XIMVisibleToBackword), 970 const_iv (XIMVisibleToBackword),
947 const_iv (XIMVisibleToCenter), 971 const_iv (XIMVisibleToCenter),
972# endif
948#if XRENDER 973# if XRENDER
949 const_iv (PictStandardARGB32), 974 const_iv (PictStandardARGB32),
950 const_iv (PictStandardRGB24), 975 const_iv (PictStandardRGB24),
951 const_iv (PictStandardA8), 976 const_iv (PictStandardA8),
952 const_iv (PictStandardA4), 977 const_iv (PictStandardA4),
953 const_iv (PictStandardA1), 978 const_iv (PictStandardA1),
1009 const_iv (PictOpExclusion), 1034 const_iv (PictOpExclusion),
1010 const_iv (PictOpHSLHue), 1035 const_iv (PictOpHSLHue),
1011 const_iv (PictOpHSLSaturation), 1036 const_iv (PictOpHSLSaturation),
1012 const_iv (PictOpHSLColor), 1037 const_iv (PictOpHSLColor),
1013 const_iv (PictOpHSLLuminosity), 1038 const_iv (PictOpHSLLuminosity),
1014#endif 1039# endif
1015# if 0 1040# if 0
1016 const_iv (XIMForwardChar), 1041 const_iv (XIMForwardChar),
1017 const_iv (XIMBackwardChar), 1042 const_iv (XIMBackwardChar),
1018 const_iv (XIMForwardWord), 1043 const_iv (XIMForwardWord),
1019 const_iv (XIMBackwardWord), 1044 const_iv (XIMBackwardWord),
1023 const_iv (XIMPreviousLine), 1048 const_iv (XIMPreviousLine),
1024 const_iv (XIMLineStart), 1049 const_iv (XIMLineStart),
1025 const_iv (XIMLineEnd), 1050 const_iv (XIMLineEnd),
1026 const_iv (XIMAbsolutePosition), 1051 const_iv (XIMAbsolutePosition),
1027 const_iv (XIMDontChange), 1052 const_iv (XIMDontChange),
1028# endif
1029# endif 1053# endif
1030 1054
1031 /* DEC private modes */ 1055 /* DEC private modes */
1032 const_iv (PrivMode_132), 1056 const_iv (PrivMode_132),
1033 const_iv (PrivMode_132OK), 1057 const_iv (PrivMode_132OK),
1142int 1166int
1143SET_CUSTOM (int rend, int new_value) 1167SET_CUSTOM (int rend, int new_value)
1144 CODE: 1168 CODE:
1145{ 1169{
1146 if (!IN_RANGE_EXC (new_value, 0, RS_customCount)) 1170 if (!IN_RANGE_EXC (new_value, 0, RS_customCount))
1147 croak ("custom value out of range, must be 0..%d", RS_customCount - 1); 1171 croak ("custom value out of range, must be 0..%lu", RS_customCount - 1);
1148 1172
1149 RETVAL = (rend & ~RS_customMask) 1173 RETVAL = (rend & ~RS_customMask)
1150 | ((new_value << RS_customShift) & RS_customMask); 1174 | ((new_value << RS_customShift) & RS_customMask);
1151} 1175}
1152 OUTPUT: 1176 OUTPUT:
1189 av_store (av, i, SvREFCNT_inc (*av_fetch (av, i + 1, 0))); 1213 av_store (av, i, SvREFCNT_inc (*av_fetch (av, i + 1, 0)));
1190 1214
1191 av_pop (av); 1215 av_pop (av);
1192 1216
1193 delete req; 1217 delete req;
1218
1219Region
1220XCreateRegion ()
1221
1222int
1223XUnionRectWithRegion (int x, int y, int w, int h, Region src, Region dst)
1224 CODE:
1225 XRectangle rect;
1226 rect.x = x;
1227 rect.y = y;
1228 rect.width = w;
1229 rect.height = h;
1230 RETVAL = XUnionRectWithRegion (&rect, src, dst);
1231 OUTPUT: RETVAL
1232
1233int
1234XIntersectRegion (Region src1, Region src2, Region res)
1235
1236int
1237XUnionRegion (Region src1, Region src2, Region res)
1238
1239int
1240XSubtractRegion (Region src1, Region src2, Region res)
1241
1242int
1243XXorRegion (Region src1, Region src2, Region res)
1244
1245int
1246XOffsetRegion (Region r, int dx, int dy)
1247
1248int
1249XShrinkRegion (Region r, int dx, int dy)
1250
1251int
1252XDestroyRegion (Region r)
1194 1253
1195MODULE = urxvt PACKAGE = urxvt::term 1254MODULE = urxvt PACKAGE = urxvt::term
1196 1255
1197SV * 1256SV *
1198_new (AV *env, AV *arg) 1257_new (AV *env, AV *arg)
1371 1430
1372SV * 1431SV *
1373rxvt_term::locale_encode (SV *str) 1432rxvt_term::locale_encode (SV *str)
1374 CODE: 1433 CODE:
1375{ 1434{
1435 if (!SvOK (str))
1436 XSRETURN_UNDEF;
1437
1376 wchar_t *wstr = sv2wcs (str); 1438 wchar_t *wstr = sv2wcs (str);
1377 1439
1378 rxvt_push_locale (THIS->locale); 1440 rxvt_push_locale (THIS->locale);
1379 char *mbstr = rxvt_wcstombs (wstr); 1441 char *mbstr = rxvt_wcstombs (wstr);
1380 rxvt_pop_locale (); 1442 rxvt_pop_locale ();
1389 1451
1390SV * 1452SV *
1391rxvt_term::locale_decode (SV *octets) 1453rxvt_term::locale_decode (SV *octets)
1392 CODE: 1454 CODE:
1393{ 1455{
1456 if (!SvOK (octets))
1457 XSRETURN_UNDEF;
1458
1394 STRLEN len; 1459 STRLEN len;
1395 char *data = SvPVbyte (octets, len); 1460 char *data = SvPVbyte (octets, len);
1396 1461
1397 rxvt_push_locale (THIS->locale); 1462 rxvt_push_locale (THIS->locale);
1398 wchar_t *wstr = rxvt_mbstowcs (data, len); 1463 wchar_t *wstr = rxvt_mbstowcs (data, len);
1561 THIS->rstyle = new_rstyle; 1626 THIS->rstyle = new_rstyle;
1562 OUTPUT: 1627 OUTPUT:
1563 RETVAL 1628 RETVAL
1564 1629
1565int 1630int
1566rxvt_term::view_start (int newval = 1) 1631rxvt_term::view_start (int newval = 0)
1567 PROTOTYPE: $;$ 1632 PROTOTYPE: $;$
1568 CODE: 1633 CODE:
1569{ 1634{
1570 RETVAL = THIS->view_start; 1635 RETVAL = THIS->view_start;
1571 1636 if (items > 1)
1572 if (newval <= 0)
1573 THIS->scr_changeview (max (newval, THIS->top_row)); 1637 THIS->scr_changeview (newval);
1574} 1638}
1575 OUTPUT: 1639 OUTPUT:
1576 RETVAL 1640 RETVAL
1577 1641
1578void 1642void
1788 // find length 1852 // find length
1789 for (wchar_t *s = wstr; *s; s++) 1853 for (wchar_t *s = wstr; *s; s++)
1790 if (*s == NOCHAR) 1854 if (*s == NOCHAR)
1791 ; 1855 ;
1792 else if (IS_COMPOSE (*s)) 1856 else if (IS_COMPOSE (*s))
1793 dlen += rxvt_composite.expand (*s, 0); 1857 dlen += rxvt_composite.expand (*s);
1794 else 1858 else
1795 dlen++; 1859 dlen++;
1796 1860
1797 wchar_t *rstr = rxvt_temp_buf<wchar_t> (dlen); 1861 wchar_t *rstr = rxvt_temp_buf<wchar_t> (dlen);
1798 1862
2132 int count; 2196 int count;
2133 Atom *props = XListProperties (THIS->dpy, window, &count); 2197 Atom *props = XListProperties (THIS->dpy, window, &count);
2134 2198
2135 EXTEND (SP, count); 2199 EXTEND (SP, count);
2136 while (count--) 2200 while (count--)
2137 PUSHs (newSVuv ((U32)props [count])); 2201 PUSHs (sv_2mortal (newSVuv ((U32)props [count])));
2138 2202
2139 XFree (props); 2203 XFree (props);
2140} 2204}
2141 2205
2142void 2206void
2158 int elemsize = format == 16 ? sizeof (short) 2222 int elemsize = format == 16 ? sizeof (short)
2159 : format == 32 ? sizeof (long) 2223 : format == 32 ? sizeof (long)
2160 : 1; 2224 : 1;
2161 2225
2162 EXTEND (SP, 3); 2226 EXTEND (SP, 3);
2163 PUSHs (newSVuv ((U32)type)); 2227 PUSHs (sv_2mortal (newSVuv ((U32)type)));
2164 PUSHs (newSViv (format)); 2228 PUSHs (sv_2mortal (newSViv (format)));
2165 PUSHs (newSVpvn ((char *)prop, nitems * elemsize)); 2229 PUSHs (sv_2mortal (newSVpvn ((char *)prop, nitems * elemsize)));
2166 XFree (prop); 2230 XFree (prop);
2167 } 2231 }
2168} 2232}
2169 2233
2170void 2234void
2194 XFree (RETVAL); 2258 XFree (RETVAL);
2195 2259
2196void 2260void
2197XDeleteProperty (rxvt_term *term, Window window, Atom property) 2261XDeleteProperty (rxvt_term *term, Window window, Atom property)
2198 C_ARGS: term->dpy, window, property 2262 C_ARGS: term->dpy, window, property
2263
2264void
2265rxvt_term::XShapeQueryVersion ()
2266 PPCODE:
2267 int major, minor;
2268 EXTEND (SP, 2);
2269 if (XShapeQueryVersion (THIS->display->dpy, &major, &minor))
2270 {
2271 PUSHs (sv_2mortal (newSViv (major)));
2272 PUSHs (sv_2mortal (newSViv (minor)));
2273 }
2274
2275void
2276XShapeCombineRegion (rxvt_term *term, Window dest, int destKind, int xOff, int yOff, Region r, int op)
2277 C_ARGS: term->display->dpy, dest, destKind, xOff, yOff, r, op
2278
2279void
2280XShapeCombineMask (rxvt_term *term, XID dest, int destKind, int xOff, int yOff, Pixmap src, int op)
2281 C_ARGS: term->display->dpy, dest, destKind, xOff, yOff, src, op
2282
2283void
2284XShapeCombineShape (rxvt_term *term, XID dest, int destKind, int xOff, int yOff, Pixmap src, int srcKind, int op)
2285 C_ARGS: term->display->dpy, dest, destKind, xOff, yOff, src, srcKind, op
2199 2286
2200Window 2287Window
2201rxvt_term::DefaultRootWindow () 2288rxvt_term::DefaultRootWindow ()
2202 CODE: 2289 CODE:
2203 RETVAL = THIS->display->root; 2290 RETVAL = THIS->display->root;
2248 Window child; 2335 Window child;
2249 2336
2250 if (XTranslateCoordinates (THIS->dpy, src, dst, x, y, &dx, &dy, &child)) 2337 if (XTranslateCoordinates (THIS->dpy, src, dst, x, y, &dx, &dy, &child))
2251 { 2338 {
2252 EXTEND (SP, 3); 2339 EXTEND (SP, 3);
2253 PUSHs (newSViv (dx)); 2340 PUSHs (sv_2mortal (newSViv (dx)));
2254 PUSHs (newSViv (dy)); 2341 PUSHs (sv_2mortal (newSViv (dy)));
2255 PUSHs (newSVuv (child)); 2342 PUSHs (sv_2mortal (newSVuv (child)));
2256 } 2343 }
2257} 2344}
2258 2345
2259############################################################################# 2346#############################################################################
2260# fancy bg bloatstuff (TODO: should be moved up somewhere) 2347# fancy bg bloatstuff (TODO: should be moved up somewhere)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines