Example #1
0
static int test_query(void)
{
   x11display_t x11disp;

   // TEST isextxrandr_x11display
   x11disp.xrandr.isSupported = true ;
   TEST(true  == isextxrandr_x11display(&x11disp)) ;
   x11disp.xrandr.isSupported = false ;
   TEST(false == isextxrandr_x11display(&x11disp)) ;

   // TEST isfree_x11display
   memset(&x11disp, 255, sizeof(x11disp));
   TEST(0 == isfree_x11display(&x11disp));
   x11disp.idmap = 0;
   TEST(0 == isfree_x11display(&x11disp));
   x11disp.sys_display = 0;
   TEST(1 == isfree_x11display(&x11disp));

   // TEST sysdisplay_x11display
   for (uintptr_t i = 15; i <= 15; --i) {
      x11disp.sys_display = (void*)i;
      TEST((struct sys_display_t*)i == sysdisplay_x11display(&x11disp));
   }

   // TEST io_x11display
   TEST(0 == init_x11display(&x11disp, ":0.0"));
   TEST(0 == isfree_x11display(&x11disp));
   TEST(0  < io_x11display(&x11disp));
   int fd = io_x11display(&x11disp);
   TEST(0 == free_x11display(&x11disp));
   TEST(1 == isfree_x11display(&x11disp));

   // TEST io_x11display: same fd
   TEST(0 == init_x11display(&x11disp, ":0.0"));
   TEST(fd == io_x11display(&x11disp));
   TEST(0 == free_x11display(&x11disp));

   // TEST errorstring_x11display: last char is set to 0
   char errstr[100] ;
   char errstr2[100] ;
   memset(errstr, 1, sizeof(errstr)) ;
   memset(errstr2, 1, sizeof(errstr2)) ;
   TEST(0 == init_x11display(&x11disp, ":0.0")) ;
   TEST(sizeof(errstr) == strnlen(errstr, sizeof(errstr))) ;
   errorstring_x11display(&x11disp, 1, errstr, sizeof(errstr)) ;
   uint8_t errlen = (uint8_t) strnlen(errstr, sizeof(errstr)) ;
   TEST(2              < errlen) ;
   TEST(sizeof(errstr) > errlen) ;
   errorstring_x11display(&x11disp, 1, errstr2, errlen) ;
   TEST(0 == strncmp(errstr, errstr2, (uint8_t)(errlen-2))) ;
   TEST(0 != errstr[errlen-1]) ;
   TEST(0 == errstr2[errlen-1]) ;
   memset(errstr, 1, sizeof(errstr)) ;
   TEST(0 == memcmp(errstr, errstr2 + errlen, sizeof(errstr2)-errlen)) ;
   TEST(0 == free_x11display(&x11disp)) ;

   return 0 ;
ONERR:
   return EINVAL ;
}
Example #2
0
int set_x11videomode(const x11videomode_t * xvidmode, x11screen_t * x11screen)
{
    int err ;
    XRRScreenConfiguration * screen_config = 0 ;

    if (!isextxrandr_x11display(display_x11screen(x11screen))) {
        err = ENOSYS ;
        goto ONERR;
    }

    Display * sys_display = display_x11screen(x11screen)->sys_display ;
    screen_config = XRRGetScreenInfo(sys_display, RootWindow(sys_display, number_x11screen(x11screen))) ;
    if (!screen_config) {
        err = ENOSYS ;
        goto ONERR;
    }

    Rotation current_rotation ;
    uint16_t current_size = XRRConfigCurrentConfiguration(screen_config, &current_rotation) ;

    int            sizes_count ;
    XRRScreenSize  * sizes = XRRConfigSizes(screen_config, &sizes_count) ;
    if (  !sizes
            || (current_size >= sizes_count)) {
        err = EOVERFLOW ;
        goto ONERR;
    }

    if (  xvidmode->modeid > sizes_count
            || xvidmode->width_in_pixel  != (uint32_t) sizes[xvidmode->modeid].width
            || xvidmode->height_in_pixel != (uint32_t) sizes[xvidmode->modeid].height) {
        err = EINVAL ;
        goto ONERR;
    }

    if (XRRSetScreenConfig( sys_display, screen_config,
                            RootWindow(sys_display, number_x11screen(x11screen)),
                            xvidmode->modeid, current_rotation, CurrentTime)) {
        err = EOPNOTSUPP ;
        goto ONERR;
    }

    XRRFreeScreenConfigInfo(screen_config) ;

    return 0 ;
ONERR:
    if (screen_config) {
        XRRFreeScreenConfigInfo(screen_config) ;
    }
    TRACEEXIT_ERRLOG(err);
    return err ;
}
Example #3
0
int initcurrent_x11videomode(/*out*/x11videomode_t * current_xvidmode, x11screen_t * x11screen)
{
    int err ;
    XRRScreenConfiguration * screen_config = 0 ;

    if (!isextxrandr_x11display(display_x11screen(x11screen))) {
        err = ENOSYS ;
        goto ONERR;
    }

    Display * sys_display = display_x11screen(x11screen)->sys_display ;
    screen_config = XRRGetScreenInfo(sys_display, RootWindow(sys_display, number_x11screen(x11screen))) ;
    if (!screen_config) {
        err = ENOSYS ;
        goto ONERR;
    }

    Rotation current_rotation ;
    uint16_t current_size = XRRConfigCurrentConfiguration(screen_config, &current_rotation) ;

    int           sizes_count ;
    XRRScreenSize * sizes = XRRConfigSizes(screen_config, &sizes_count) ;
    if (  !sizes
            || (current_size >= sizes_count)) {
        err = EOVERFLOW ;
        goto ONERR;
    }

    current_xvidmode->modeid          = current_size ;
    current_xvidmode->width_in_pixel  = (uint32_t) sizes[current_size].width ;
    current_xvidmode->height_in_pixel = (uint32_t) sizes[current_size].height ;

    XRRFreeScreenConfigInfo(screen_config) ;

    return 0 ;
ONERR:
    if (screen_config) {
        XRRFreeScreenConfigInfo(screen_config) ;
    }
    TRACEEXIT_ERRLOG(err);
    return err ;
}
Example #4
0
int init_x11videomodeiterator(/*out*/x11videomode_iterator_t * xvidit, x11screen_t * x11screen)
{
    int err ;
    XRRScreenConfiguration * screen_config = 0 ;

    if (!isextxrandr_x11display(display_x11screen(x11screen))) {
        err = ENOSYS ;
        goto ONERR;
    }

    Display * sys_display = display_x11screen(x11screen)->sys_display ;
    screen_config = XRRGetScreenInfo(sys_display, RootWindow(sys_display, number_x11screen(x11screen))) ;
    if (!screen_config) {
        err = ENOSYS ;
        goto ONERR;
    }

    int           sizes_count ;
    XRRScreenSize * sizes = XRRConfigSizes(screen_config, &sizes_count) ;
    if (  !sizes
            || (UINT16_MAX < (unsigned)sizes_count)) {
        err = EOVERFLOW ;
        goto ONERR;
    }

    xvidit->nextindex = 0 ;
    xvidit->nrmodes   = (uint16_t) sizes_count ;
    xvidit->config    = screen_config ;

    return 0 ;
ONERR:
    if (screen_config) {
        XRRFreeScreenConfigInfo(screen_config) ;
    }
    TRACEEXIT_ERRLOG(err);
    return err ;
}