Hi list.
I wrote a test program to list available screen resolutions and maybe switch to 
one of them. Apparently, my program is incomplete and I have to restore the 
resolution using my DE settings, but after I restore it and run my program 
again, that mode disappears from the output of `XF86VidModeGetAllModeLines()`. 
Originally it contained `1400x1050`, `1600x900`, and `1440x900`, but each time 
I repeat my actions, the function returns fewer results. Why is that?

    $ gcc -o test test.c -lX11 -lXxf86vm
    $ ./test
        1920x1080
        1680x1050
        1920x1080
        1920x1080
        1280x1024
        1280x1024
        1280x800
        1280x720
        1152x864
        1024x768
        1024x768
        800x600
        800x600
        800x600
        640x480
        640x480
        1366x768

_

        #include <stdio.h>
        #include <sys/types.h>
        #include <string.h>
        #include <X11/Xlib.h>
        #include <X11/extensions/xf86vmode.h>

        static Bool b;
        static Display* display = NULL;


        void dostuff(int screen)
        {
                int flag = 0;
                int modeCount;
                XF86VidModeModeInfo** modes;
        
                if (XF86VidModeGetAllModeLines(display, screen, &modeCount, 
&modes))
                {
                        for(int i = 0; i < modeCount; i ++)
                        {
                                printf("%hdx%hd\n", modes[i]->hdisplay, 
modes[i]->vdisplay);
                                //continue;
                                if (!flag && 1600 == modes[i]->hdisplay && 900 
== modes[i]->vdisplay) {
                                        flag = 1;
                                        b = XF86VidModeSwitchToMode(display, 
screen, modes[i]);
                                        printf("%d\n", b);
                                        b = XF86VidModeSetViewPort(display, 
screen, 0, 0);
                                        printf("%d\n", b);
                                        XFlush(display);
                                }
                        }
                        XFree(modes);

                }
        }

        int main(int argc, char *argv[]) {
                if (display == NULL) {
                        display = XOpenDisplay(NULL);
                }
                if (display == NULL) {
                        return 1;
                }               
                dostuff(0);
                XCloseDisplay(display);

                return 0;
        }

My card is GeForce 9600, driver version: 340.101.
_______________________________________________
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: https://lists.x.org/mailman/listinfo/xorg
Your subscription address: %(user_address)s

Reply via email to