On Sat, May 21, 2005 at 07:43:43PM +0100, Roger Leigh wrote: > Hi Bill, Yann, > > What does `xdpyinfo | grep RANDR` show? My X server (FBDev) has this > enabled. Perhaps your server doesn't, and gcompris isn't handling > this gracefully?
Attached is a patch (against 6.5.3) that fixes up the code to properly
cope with X servers that don't provide XRANDR. I've tested with both
FBDev and Xnest XFree86-4.3 X servers, with and without -x, and it
now autodetects XRANDR correctly.
I've not checked this with the sarge version. If the code isn't
vastly different, the patch should be equally applicable.
Regards,
Roger
--
Roger Leigh
Printing on GNU/Linux? http://gimp-print.sourceforge.net/
Debian GNU/Linux http://www.debian.org/
GPG Public Key: 0x25BFB848. Please sign and encrypt your mail.
--- gc.orig/gcompris-6.5.3/src/gcompris/gcompris.c 2005-04-19
22:12:30.000000000 +0100
+++ gc/gcompris-6.5.3/src/gcompris/gcompris.c 2005-05-21 22:38:28.183117256
+0100
@@ -151,6 +151,7 @@
static SizeID xr_previous_size;
static XRANDRData *xrandr;
+static void xrandr_init ( XRANDRData *data );
static void xrandr_get_config ( XRANDRData *data );
gboolean xrandr_set_config( XRANDRData *grandr );
#endif
@@ -288,31 +289,33 @@
GtkWidget *vbox;
int i;
+ screen_height = gdk_screen_height();
+ screen_width = gdk_screen_width();
+
#ifdef XRANDR
/* Search the 800x600 Resolution */
if(properties->fullscreen && !properties->noxrandr) {
g_warning("XRANDR Is compiled in. Searching a good resolution");
xrandr = g_new0 (XRANDRData, 1);
- xrandr_get_config ( xrandr );
- xr_previous_size = (SizeID)xrandr->xr_current_size;
+ xrandr_init ( xrandr );
- for (i = 0; i < xrandr->xr_nsize; i++) {
- if(xrandr->xr_sizes[i].width == BOARDWIDTH, xrandr->xr_sizes[i].height
== BOARDHEIGHT+BARHEIGHT) {
- xrandr->xr_current_size = (SizeID)i;
- xrandr_set_config( xrandr );
- break;
+ /* Check if XRANDR is available */
+ if (!properties->noxrandr) {
+ xrandr_get_config ( xrandr );
+ xr_previous_size = (SizeID)xrandr->xr_current_size;
+
+ for (i = 0; i < xrandr->xr_nsize; i++) {
+ if(xrandr->xr_sizes[i].width == BOARDWIDTH, xrandr->xr_sizes[i].height
== BOARDHEIGHT+BARHEIGHT) {
+ xrandr->xr_current_size = (SizeID)i;
+ xrandr_set_config( xrandr );
+ break;
+ }
}
+ screen_height = xrandr->xr_sizes[xrandr->xr_current_size].height;
+ screen_width = xrandr->xr_sizes[xrandr->xr_current_size].width;
}
- screen_height = xrandr->xr_sizes[xrandr->xr_current_size].height;
- screen_width = xrandr->xr_sizes[xrandr->xr_current_size].width;
- } else {
- screen_height = gdk_screen_height();
- screen_width = gdk_screen_width();
}
-#else
- screen_height = gdk_screen_height();
- screen_width = gdk_screen_width();
#endif
yratio=screen_height/(float)(BOARDHEIGHT+BARHEIGHT);
@@ -623,7 +626,7 @@
#ifdef XRANDR
/* Set back the original screen size */
- if(properties->fullscreen) {
+ if(properties->fullscreen && !properties->noxrandr) {
xrandr_get_config ( xrandr ); /* Need to refresh our config or xrandr
api will reject us */
xrandr->xr_current_size = (SizeID)xr_previous_size;
xrandr_set_config( xrandr );
@@ -756,9 +759,22 @@
* ------------
*/
static void
-xrandr_get_config ( XRANDRData *data )
+xrandr_init ( XRANDRData *data )
{
data->xr_screen_conf = XRRGetScreenInfo (GDK_DISPLAY(), GDK_ROOT_WINDOW());
+ if (data->xr_screen_conf == NULL)
+ {
+ g_warning("XRANDR not available");
+ properties->noxrandr = TRUE;
+ }
+ else
+ g_warning("XRANDR support enabled");
+}
+
+static void
+xrandr_get_config ( XRANDRData *data )
+{
+ xrandr_init (data);
data->xr_current_size = XRRConfigCurrentConfiguration (data->xr_screen_conf,
&data->xr_current_rotation);
signature.asc
Description: Digital signature

