xrandr ? Bug ?

Bernard Siaud alias Troumad liste at siaud.org
Mon Nov 16 00:33:49 PST 2009


Hello

I do i little program in C for my wife :
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> int main()
> {
>  FILE * sortie;
>  char ch[128],mode[16],nom[16];
>  unsigned char i,j;
>  unsigned short xv,yv,xp,yp;
>  
>  struct ecran
>  {
>   char nom[16];
>   char mode[16];
>   unsigned short x;
>   unsigned short y;
>   struct ecran * suiv;
>  } * debut = NULL, *actuelle;
>  
>  
>  system("/usr/bin/xrandr > /tmp/xrandr.sortie");
>  
>  sortie=fopen("/tmp/xrandr.sortie","r");
>  
>  while( fgets(ch,127,sortie)!=NULL)
>  {
>   /* printf("%hu => ",ch[0]);
>   printf("%s",ch); */
>   if (ch[0]!=' ')
>   {
>    sscanf(ch,"%s",nom);
>    if (strcmp(ch,"Screen")!=0)
>    {
>     if (debut==NULL)
>     {
>      actuelle=(struct ecran *)malloc(sizeof(struct ecran));
>      debut=actuelle;
>     }
>     else
>     {
>      actuelle->suiv=(struct ecran *)malloc(sizeof(struct ecran));
>      actuelle=actuelle->suiv;
>     }
>     actuelle->suiv=NULL;
>     actuelle->x=0;
>     strncpy(actuelle->nom,nom,15);
>    }
>   }
>   else
>   {
>    for(i=0;ch[i]==' ';i++);
>    sscanf(ch+i,"%s",mode);
>    /* printf("mode = %s\n",mode); */
>    if (strstr(ch+i,"+")!=NULL)
>    {
>     strncpy(actuelle->mode,mode,15);
>     sscanf(mode,"%hux%hu",&actuelle->x,&actuelle->y);
>     if (strstr(ch+i,"*")==NULL)
>     {
>      sprintf(ch,"xrandr --output %s --mode %s",nom,mode);
>      system(ch);
>     }
>     printf(ch);printf("\n");
>     if (strcmp(nom,"VGA1")!=0)
>     {
>      xv=actuelle->x;
>      yv=actuelle->y;
>     }
>     else if (strcmp(nom,"LVDS1")!=0)
>     {
>      xp=actuelle->x;
>      yp=actuelle->y;
>     }
>    }
>    if (actuelle->x==0)
>     if (strstr(ch+i,"*")!=NULL)
>     {
>      strncpy(actuelle->mode,mode,15);
>      sscanf(mode,"%hux%hu",&actuelle->x,&actuelle->y);
>      if (strcmp(nom,"VGA1")!=0)
>      {
>       xv=actuelle->x;
>       yv=actuelle->y;
>      }
>      else if (strcmp(nom,"LVDS1")!=0)
>      {
>       xp=actuelle->x;
>       yp=actuelle->y;
>      }
>     }
>   }
>  }
>  
>  sprintf(ch,"xrandr --output LVDS1 --scale 
> %fx%f",(float)xp/xv,(float)yp/yv);
>  system("xrandr  --output VGA1 --pos 0x0 --panning 0x0 --scale 1x1 
> --transform 1,0,0,0,1,0,0,0,1 --output LVDS1 --pos 0x0 --panning 0x0 
> --scale 1x1  --transform 1,0,0,0,1,0,0,0,1");
>  //system(ch);
>  system("xrandr --output LVDS1 --scale 1x1"); /* why I need this line ? */
>  system(ch);
>  printf(ch);printf("\n");
>  
>  
> }
I don't know why I need the line command :
> xrandr --output LVDS1 --scale 1x1
If there is not this line the windows don't maximal good.
The configuration of the screen is :
xrandr --output VGA1 --mode 1440x900
xrandr --output LVDS1 --mode 1280x800

The commande line is
xrandr  --output VGA1 --pos 0x0 --panning 0x0 --scale 1x1 --transform
1,0,0,0,1,0,0,0,1 --output LVDS1 --pos 0x0 --panning 0x0 --scale 1x1
--transform 1,0,0,0,1,0,0,0,1
xrandr --output LVDS1 --scale 1.125x1.125
The windows maximalise in the size of 1280x800 ! Why ?

After if I do
xrandr --output LVDS1 --scale 1x1
xrandr --output LVDS1 --scale 1.125x1.125
And it's good !  The windows maximalise in the size of 1440x900 . Why ?????


-- 
Amicalement vOOotre, Troumad Alias Bernard SIAUD, http://troumad.org
N'envoyez que des documents avec des formats ouverts, comme
http://fr.openoffice.org
Adresse electronique speciale liste



More information about the xorg-devel mailing list