|
|
825b56f |
diff -up gnome-desktop-2.27.4/libgnome-desktop/edid.h.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/edid.h
|
|
|
825b56f |
--- gnome-desktop-2.27.4/libgnome-desktop/edid.h.concatenate-edid-descriptors 2009-04-19 13:39:06.000000000 -0400
|
|
|
825b56f |
+++ gnome-desktop-2.27.4/libgnome-desktop/edid.h 2009-07-15 12:49:00.883963393 -0400
|
|
|
825b56f |
@@ -183,12 +183,13 @@ struct MonitorInfo
|
|
|
825b56f |
*/
|
|
|
825b56f |
|
|
|
825b56f |
/* Optional product description */
|
|
|
825b56f |
- char dsc_serial_number[14];
|
|
|
825b56f |
- char dsc_product_name[14];
|
|
|
825b56f |
- char dsc_string[14]; /* Unspecified ASCII data */
|
|
|
825b56f |
+ char *dsc_serial_number;
|
|
|
825b56f |
+ char *dsc_product_name;
|
|
|
825b56f |
+ char *dsc_string; /* Unspecified ASCII data */
|
|
|
825b56f |
};
|
|
|
825b56f |
|
|
|
825b56f |
MonitorInfo *decode_edid (const uchar *data);
|
|
|
825b56f |
+void free_edid (MonitorInfo *);
|
|
|
825b56f |
char * make_display_name (const char *output_name,
|
|
|
825b56f |
const MonitorInfo *info);
|
|
|
825b56f |
|
|
|
825b56f |
diff -up gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c
|
|
|
825b56f |
--- gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c.concatenate-edid-descriptors 2009-04-19 13:39:06.000000000 -0400
|
|
|
825b56f |
+++ gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c 2009-07-15 12:53:51.648990812 -0400
|
|
|
825b56f |
@@ -349,27 +349,44 @@ decode_standard_timings (const uchar *ed
|
|
|
825b56f |
return TRUE;
|
|
|
825b56f |
}
|
|
|
825b56f |
|
|
|
825b56f |
-static void
|
|
|
825b56f |
-decode_lf_string (const uchar *s, int n_chars, char *result)
|
|
|
825b56f |
+static char *
|
|
|
825b56f |
+decode_lf_string (const uchar *s, int n_chars, char *prev)
|
|
|
825b56f |
{
|
|
|
825b56f |
int i;
|
|
|
825b56f |
+ char *ret, *tmp;
|
|
|
825b56f |
+
|
|
|
825b56f |
+ tmp = g_malloc0 (n_chars);
|
|
|
825b56f |
+
|
|
|
825b56f |
for (i = 0; i < n_chars; ++i)
|
|
|
825b56f |
{
|
|
|
825b56f |
if (s[i] == 0x0a)
|
|
|
825b56f |
{
|
|
|
825b56f |
- *result++ = '\0';
|
|
|
825b56f |
+ tmp[i] = '\0';
|
|
|
825b56f |
break;
|
|
|
825b56f |
}
|
|
|
825b56f |
else if (s[i] == 0x00)
|
|
|
825b56f |
{
|
|
|
825b56f |
/* Convert embedded 0's to spaces */
|
|
|
825b56f |
- *result++ = ' ';
|
|
|
825b56f |
+ tmp[i] = ' ';
|
|
|
825b56f |
}
|
|
|
825b56f |
else
|
|
|
825b56f |
{
|
|
|
825b56f |
- *result++ = s[i];
|
|
|
825b56f |
+ tmp[i] = s[i];
|
|
|
825b56f |
}
|
|
|
825b56f |
}
|
|
|
825b56f |
+
|
|
|
825b56f |
+ if (prev)
|
|
|
825b56f |
+ {
|
|
|
825b56f |
+ ret = g_strjoin(NULL, prev, tmp, NULL);
|
|
|
825b56f |
+ g_free(prev);
|
|
|
825b56f |
+ g_free(tmp);
|
|
|
825b56f |
+ }
|
|
|
825b56f |
+ else
|
|
|
825b56f |
+ {
|
|
|
825b56f |
+ ret = tmp;
|
|
|
825b56f |
+ }
|
|
|
825b56f |
+
|
|
|
825b56f |
+ return ret;
|
|
|
825b56f |
}
|
|
|
825b56f |
|
|
|
825b56f |
static void
|
|
|
825b56f |
@@ -379,13 +396,16 @@ decode_display_descriptor (const uchar *
|
|
|
825b56f |
switch (desc[0x03])
|
|
|
825b56f |
{
|
|
|
825b56f |
case 0xFC:
|
|
|
825b56f |
- decode_lf_string (desc + 5, 13, info->dsc_product_name);
|
|
|
825b56f |
+ info->dsc_product_name = decode_lf_string (desc + 5, 13,
|
|
|
825b56f |
+ info->dsc_product_name);
|
|
|
825b56f |
break;
|
|
|
825b56f |
case 0xFF:
|
|
|
825b56f |
- decode_lf_string (desc + 5, 13, info->dsc_serial_number);
|
|
|
825b56f |
+ info->dsc_serial_number = decode_lf_string (desc + 5, 13,
|
|
|
825b56f |
+ info->dsc_serial_number);
|
|
|
825b56f |
break;
|
|
|
825b56f |
case 0xFE:
|
|
|
825b56f |
- decode_lf_string (desc + 5, 13, info->dsc_string);
|
|
|
825b56f |
+ info->dsc_string = decode_lf_string (desc + 5, 13,
|
|
|
825b56f |
+ info->dsc_string);
|
|
|
825b56f |
break;
|
|
|
825b56f |
case 0xFD:
|
|
|
825b56f |
/* Range Limits */
|
|
|
825b56f |
@@ -514,6 +534,18 @@ decode_check_sum (const uchar *edid,
|
|
|
825b56f |
info->checksum = check;
|
|
|
825b56f |
}
|
|
|
825b56f |
|
|
|
825b56f |
+void
|
|
|
825b56f |
+free_edid (MonitorInfo *info)
|
|
|
825b56f |
+{
|
|
|
825b56f |
+ if (info)
|
|
|
825b56f |
+ {
|
|
|
825b56f |
+ g_free (info->dsc_product_name);
|
|
|
825b56f |
+ g_free (info->dsc_serial_number);
|
|
|
825b56f |
+ g_free (info->dsc_string);
|
|
|
825b56f |
+ }
|
|
|
825b56f |
+ g_free (info);
|
|
|
825b56f |
+}
|
|
|
825b56f |
+
|
|
|
825b56f |
MonitorInfo *
|
|
|
825b56f |
decode_edid (const uchar *edid)
|
|
|
825b56f |
{
|
|
|
825b56f |
diff -up gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c
|
|
|
825b56f |
--- gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c.concatenate-edid-descriptors 2009-06-29 19:35:54.000000000 -0400
|
|
|
825b56f |
+++ gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c 2009-07-15 12:47:57.734218844 -0400
|
|
|
825b56f |
@@ -491,7 +491,7 @@ gnome_rr_config_new_current (GnomeRRScre
|
|
|
825b56f |
output->display_name = make_display_name (
|
|
|
825b56f |
gnome_rr_output_get_name (rr_output), info);
|
|
|
825b56f |
|
|
|
825b56f |
- g_free (info);
|
|
|
825b56f |
+ free_edid (info);
|
|
|
825b56f |
|
|
|
825b56f |
crtc = gnome_rr_output_get_crtc (rr_output);
|
|
|
825b56f |
mode = crtc? gnome_rr_crtc_get_current_mode (crtc) : NULL;
|