示例#1
0
/**
 * main:
 **/
int
main (int argc, char *argv[])
{
	Atom edid_atom;
	Display *display;
	GError *error = NULL;
	GnomeRROutput **outputs;
	GnomeRRScreen *screen;
	gsize len = 0;
	guint8 *result = NULL;
	guint i;

	gtk_init (&argc, &argv);
	screen = gnome_rr_screen_new (gdk_screen_get_default (), &error);
	if (screen == NULL) {
		g_warning ("failed to get screen: %s", error->message);
		g_error_free (error);
		goto out;
	}
	display = GDK_SCREEN_XDISPLAY (gdk_screen_get_default ());
	outputs = gnome_rr_screen_list_outputs (screen);
	for (i = 0; outputs[i] != NULL; i++) {
		g_print ("[%s]\n", gnome_rr_output_get_name (outputs[i]));
		g_print ("\tconnected: %i\n", gnome_rr_output_is_connected (outputs[i]));
		g_print ("\tbuilt-in: %i\n", gnome_rr_output_is_builtin_display (outputs[i]));
		g_print ("\tprimary: %i\n", gnome_rr_output_get_is_primary (outputs[i]));
		g_print ("\tid: %i\n", gnome_rr_output_get_id (outputs[i]));

		/* get EDID (first try) */
		edid_atom = XInternAtom (display, "EDID", FALSE);
		result = get_property (display,
				       gnome_rr_output_get_id (outputs[i]),
				       edid_atom,
				       &len);
		if (result != NULL) {
			g_print ("\tedid: %" G_GSIZE_FORMAT " bytes [%i:%i:%i:%i]\n",
				 len, result[0], result[1],
				 result[2], result[3]);
			g_free (result);
		}

		/* get EDID (second try) */
		edid_atom = XInternAtom (display, "EDID_DATA", FALSE);
		result = get_property (display,
				       gnome_rr_output_get_id (outputs[i]),
				       edid_atom,
				       &len);
		if (result != NULL) {
			g_print ("\tedid2: %" G_GSIZE_FORMAT " bytes [%i:%i:%i:%i]\n",
				 len, result[0], result[1],
				 result[2], result[3]);
			g_free (result);
		}
	}
out:
	g_object_unref (screen);
	return 0;
}
示例#2
0
gboolean
external_monitor_is_connected (GnomeRRScreen *screen)
{
        GnomeRROutput **outputs;
        guint i;

        if (get_mock_external_monitor_file ())
                return mock_external_monitor_is_connected (screen);

	g_assert (screen != NULL);

        /* see if we have more than one screen plugged in */
        outputs = gnome_rr_screen_list_outputs (screen);
        for (i = 0; outputs[i] != NULL; i++) {
                if (randr_output_is_on (outputs[i]) &&
                    !gnome_rr_output_is_builtin_display (outputs[i]))
                        return TRUE;
        }

        return FALSE;
}