Prima
view release on metacpan or search on metacpan
strncat( description, " with native support", len1);
#endif
#ifdef WITH_COCOA
if ( guts. use_quartz)
strncat( description, " + Cocoa", len1);
#endif
}
ret = guiGTK;
}
#endif
if ( description)
description[len1-1] = 0;
if ( language ) {
char * lang = getenv("LANG");
if ( lang ) {
while (len2 > 1 && (*lang == '-' || islower((int)*lang))) {
*(language++) = *(lang++);
}
*language = 0;
} else
*language = 0;
}
return ret;
}
Handle
apc_application_get_widget_from_point( Handle self, Point p)
{
XWindow from, to, child;
from = to = guts. root;
p. y = DisplayHeight( DISP, SCREEN) - p. y - 1;
while (XTranslateCoordinates(DISP, from, to, p.x, p.y, &p.x, &p.y, &child)) {
if (child) {
from = to;
to = child;
} else {
Handle h;
if ( to == from) to = X_WINDOW;
h = (Handle)hash_fetch( guts.windows, (void*)&to, sizeof(to));
return ( h == prima_guts.application) ? NULL_HANDLE : h;
}
}
return NULL_HANDLE;
}
Handle
apc_application_get_handle( Handle self, ApiHandle apiHandle)
{
return prima_xw2h(( XWindow) apiHandle);
}
static Bool
wm_net_get_current_workarea( Rect * r)
{
Bool ret = false;
unsigned long n;
unsigned long *desktop = NULL, *workarea = NULL, *w;
if ( guts. icccm_only) return false;
desktop = ( unsigned long *) prima_get_window_property( guts. root,
NET_CURRENT_DESKTOP, XA_CARDINAL,
NULL, NULL,
&n);
if ( desktop == NULL || n < 1) goto EXIT;
Mdebug("wm: current desktop = %d\n", *desktop);
workarea = ( unsigned long *) prima_get_window_property( guts. root,
NET_WORKAREA, XA_CARDINAL,
NULL, NULL,
&n);
if ( desktop == NULL || n < 1 || n <= *desktop ) goto EXIT;
w = workarea + *desktop * 4; /* XYWH quartets */
r-> left = w[0];
r-> top = w[1];
r-> right = w[2];
r-> bottom = w[3];
ret = true;
Mdebug("wm: current workarea = %d:%d:%d:%d\n", w[0], w[1], w[2], w[3]);
EXIT:
free( workarea);
free( desktop);
return ret;
}
Rect
apc_application_get_indents( Handle self)
{
Point sz;
Rect r;
bzero( &r, sizeof( r));
if ( do_icccm_only) return r;
sz = apc_application_get_size( self);
if ( wm_net_get_current_workarea( &r)) {
r. right = sz. x - r.right - r. left;
r. bottom = sz. y - r. bottom - r. top;
if ( r. left < 0) r. left = 0;
if ( r. top < 0) r. top = 0;
if ( r. right < 0) r. right = 0;
if ( r. bottom < 0) r. bottom = 0;
}
return r;
}
int
apc_application_get_os_info( char *system, int slen,
char *release, int rlen,
char *vendor, int vlen,
char *arch, int alen)
{
static struct utsname name;
static Bool fetched = false;
if (!fetched) {
if ( uname(&name)!=0) {
strlcpy( name. sysname, "Some UNIX", sizeof(name.sysname));
strlcpy( name. release, "Unknown version of UNIX", sizeof(name.release));
strlcpy( name. machine, "Unknown architecture", sizeof(name.machine));
}
fetched = true;
}
if (system)
strlcpy( system, name. sysname, slen);
if (release)
strlcpy( release, name. release, rlen);
if (vendor)
strlcpy( vendor, "Unknown vendor", vlen);
if (arch)
strlcpy( arch, name. machine, alen);
return apcUnix;
}
Point
apc_application_get_size( Handle self)
{
return guts. displaySize;
}
( run in 0.902 second using v1.01-cache-2.11-cpan-39bf76dae61 )