Index: xrandr-1.5.2/xrandr.c =================================================================== --- xrandr-1.5.2.orig/xrandr.c +++ xrandr-1.5.2/xrandr.c @@ -2584,6 +2584,53 @@ get_monitors(Bool get_active) monitors->monitors = m; } +static void +print_providers (Bool current) +{ + int k; + + if (!has_1_4) { + printf ("RandR 1.4 not supported\n"); + exit (0); + } + + get_screen (current); + get_crtcs (); + get_outputs (); + get_providers (); + + if (providers) { + int j; + int i; + + printf("Providers: number : %d\n", num_providers); + + for (j = 0; j < num_providers; j++) { + provider_t *provider = &providers[j]; + XRRProviderInfo *info = provider->info; + + printf("Provider %d: id: 0x%x; cap: 0x%x (", j, (int)provider->provider.xid, info->capabilities); + for (k = 0; k < 4; k++) + if (info->capabilities & (1 << k)) { + printf("%s", capability_name(1<capabilities & (0xff << (k + 1))) != 0) + printf (", "); + } + printf (");"); + + printf(" crtcs: %d; outputs: %d; associated providers: %d; name: %s\n", info->ncrtcs, info->noutputs, info->nassociatedproviders, info->name); + + for (i = 0; i < info->noutputs; i++) { + output_t *output = find_output_by_xid (info->outputs[i]); + if (output) + printf (" output %s\n", output->output.string); + else + printf (" output 0x%x\n", (int)info->outputs[i]); + } + } + } +} + int main (int argc, char **argv) { @@ -3906,31 +3953,8 @@ main (int argc, char **argv) } exit (0); } - if (list_providers) { - if (!has_1_4) { - printf ("RandR 1.4 not supported\n"); - exit (0); - } - - get_screen (current); - get_providers (); - - if (providers) { - printf("Providers: number : %d\n", num_providers); - - for (int j = 0; j < num_providers; j++) { - provider_t *provider = &providers[j]; - XRRProviderInfo *info = provider->info; - - printf("Provider %d: id: 0x%x cap: 0x%x", j, (int)provider->provider.xid, info->capabilities); - for (int k = 0; k < 4; k++) - if (info->capabilities & (1 << k)) - printf(", %s", capability_name(1<ncrtcs, info->noutputs, info->nassociatedproviders, info->name); - } - } - } + if (list_providers) + print_providers (current); if (list_monitors || list_active_monitors) { if (!has_1_5) {