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