Prima

 view release on metacpan or  search on metacpan

unix/app.c  view on Meta::CPAN

			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 )