Exemplo n.º 1
0
static XConfigScreenPtr clone_screen(XConfigScreenPtr screen0, int idx)
{
    XConfigScreenPtr screen = nvalloc(sizeof(XConfigScreenRec));
    
    screen->identifier = nvasprintf("%s (%d)", screen0->identifier, idx);
    
    screen->device = clone_device(screen0->device, idx);
    screen->device_name = nvstrdup(screen->device->identifier);
    
    screen->monitor = screen0->monitor;
    screen->monitor_name = nvstrdup(screen0->monitor_name);
    
    screen->defaultdepth = screen0->defaultdepth;
    
    screen->displays = clone_display_list(screen0->displays);
    
    screen->options = xconfigOptionListDup(screen0->options);
    if (screen0->comment) screen->comment = nvstrdup(screen0->comment);

    /* insert the new screen after the original screen */

    screen->next = screen0->next;
    screen0->next = screen;

    return screen;
    
} /* clone_screen() */
Exemplo n.º 2
0
static char *create_display_device_target_string(CtrlTarget *t,
                                                 const ConfigProperties *conf)
{
    char *target_name = NULL;
    char *target_prefix_name = NULL;
    char *display_name = NULL;
    char *s;

    if (t->protoNames[NV_DPY_PROTO_NAME_RANDR]) {
        target_name = t->protoNames[NV_DPY_PROTO_NAME_RANDR];
    }

    /* If we don't have a target name here, use the full name and return. */
    if (!target_name) {
        return nvstrdup(t->name);
    }

    /* Get the display name if the user requested it to be used. */
    if (conf->booleans &
        CONFIG_PROPERTIES_INCLUDE_DISPLAY_NAME_IN_CONFIG_FILE) {
        display_name = NvCtrlGetDisplayName(t);
    }

    /* Get the target type prefix. */
    target_prefix_name = nvstrdup(t->targetTypeInfo->parsed_name);
    nvstrtoupper(target_prefix_name);

    /* Build the string */
    if (display_name && target_prefix_name) {
        s = nvasprintf("%s[%s:%s]", display_name,
                       target_prefix_name, target_name);
    } else if (target_prefix_name) {
        s = nvasprintf("[%s:%s]", target_prefix_name, target_name);
    } else if (display_name) {
        s = nvasprintf("%s[%s]", display_name, target_name);
    } else {
        s = nvasprintf("[%s]", target_name);
    }

    free(target_prefix_name);
    free(display_name);

    return s;
}
Exemplo n.º 3
0
static XConfigDevicePtr clone_device(XConfigDevicePtr device0, int idx)
{
    XConfigDevicePtr device;

    device = nvalloc(sizeof(XConfigDeviceRec));
    
    device->identifier = nvasprintf("%s (%d)", device0->identifier, idx);
    
    if (device0->vendor)  device->vendor  = nvstrdup(device0->vendor);
    if (device0->board)   device->board   = nvstrdup(device0->board);
    if (device0->chipset) device->chipset = nvstrdup(device0->chipset);
    if (device0->busid)   device->busid   = nvstrdup(device0->busid);
    if (device0->card)    device->card    = nvstrdup(device0->card);
    if (device0->driver)  device->driver  = nvstrdup(device0->driver);
    if (device0->ramdac)  device->ramdac  = nvstrdup(device0->ramdac);
    if (device0->comment) device->comment = nvstrdup(device0->comment);

    /* these are needed for multiple X screens on one GPU */

    device->screen = idx;
    device0->screen = 0;

    device->chipid = -1;
    device->chiprev = -1;
    device->irq = -1;

    device->options = xconfigOptionListDup(device0->options);
    
    /* insert the new device after the original device */
    
    device->next = device0->next;
    device0->next = device;

    return device;
    
} /* clone_device() */