diff options
Diffstat (limited to 'randr/rrlease.c')
-rw-r--r-- | randr/rrlease.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/randr/rrlease.c b/randr/rrlease.c index 11ba96f24..cb366e767 100644 --- a/randr/rrlease.c +++ b/randr/rrlease.c @@ -239,9 +239,19 @@ ProcRRCreateLease(ClientPtr client) if (!scr_priv) return BadMatch; - if (!scr_priv->rrCreateLease) + if (!scr_priv->rrCreateLease && !scr_priv->rrRequestLease) return BadMatch; + if (scr_priv->rrGetLease) { + scr_priv->rrGetLease(client, screen, &lease, &fd); + if (lease) { + if (fd >= 0) + goto leaseReturned; + else + goto bail_lease; + } + } + /* Allocate a structure to hold all of the lease information */ lease = RRLeaseAlloc(screen, stuff->lid, stuff->nCrtcs, stuff->nOutputs); @@ -291,10 +301,19 @@ ProcRRCreateLease(ClientPtr client) lease->outputs[o] = output; } - rc = scr_priv->rrCreateLease(screen, lease, &fd); - if (rc != Success) - goto bail_lease; + if (scr_priv->rrRequestLease) { + rc = scr_priv->rrRequestLease(client, screen, lease); + if (rc == Success) + return Success; + else + goto bail_lease; + } else { + rc = scr_priv->rrCreateLease(screen, lease, &fd); + if (rc != Success) + goto bail_lease; + } +leaseReturned: xorg_list_add(&lease->list, &scr_priv->leases); if (!AddResource(stuff->lid, RRLeaseType, lease)) { |