[mutter] Monitor: restore correct display name handling



commit 3bb5086173a537fa4c66b2adadcd9c9a1dbe4807
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Fri Aug 16 17:32:50 2013 +0200

    Monitor: restore correct display name handling
    
    Now that we have the right values from the EDID, we can load
    the PNP database and find the proper vendor name, to show in
    the control center UI.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705670

 configure.ac               |    1 +
 src/core/monitor-private.h |    3 +++
 src/core/monitor.c         |   31 ++++++++++++++++++++++++++++---
 3 files changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 49d6e9d..583c0ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,6 +76,7 @@ MUTTER_PC_MODULES="
    $CLUTTER_PACKAGE >= 1.14.3
    cogl-1.0 >= 1.13.3
    upower-glib > 0.9.11
+   gnome-desktop-3.0
 "
 
 GLIB_GSETTINGS
diff --git a/src/core/monitor-private.h b/src/core/monitor-private.h
index c3ef12a..b0fd70c 100644
--- a/src/core/monitor-private.h
+++ b/src/core/monitor-private.h
@@ -38,6 +38,7 @@
 #define META_MONITOR_PRIVATE_H
 
 #include <cogl/cogl.h>
+#include <libgnome-desktop/gnome-pnp-ids.h>
 
 #include "display-private.h"
 #include <meta/screen.h>
@@ -250,6 +251,8 @@ struct _MetaMonitorManager
 
   int persistent_timeout_id;
   MetaMonitorConfig *config;
+
+  GnomePnpIds *pnp_ids;
 };
 
 struct _MetaMonitorManagerClass
diff --git a/src/core/monitor.c b/src/core/monitor.c
index c52740b..d81ff15 100644
--- a/src/core/monitor.c
+++ b/src/core/monitor.c
@@ -703,16 +703,41 @@ diagonal_to_str (double d)
 }
 
 static char *
-make_display_name (MetaOutput *output)
+make_display_name (MetaMonitorManager *manager,
+                   MetaOutput         *output)
 {
+  if (g_str_has_prefix (output->name, "LVDS") ||
+      g_str_has_prefix (output->name, "eDP"))
+    return g_strdup (_("Built-in display"));
+
   if (output->width_mm != -1 && output->height_mm != -1)
     {
       double d = sqrt (output->width_mm * output->width_mm +
                        output->height_mm * output->height_mm);
       char *inches = diagonal_to_str (d / 25.4);
+      char *vendor_name;
       char *ret;
 
-      ret = g_strdup_printf ("%s %s", output->vendor, inches);
+      if (g_strcmp0 (output->vendor, "unknown") != 0)
+        {
+          if (!manager->pnp_ids)
+            manager->pnp_ids = gnome_pnp_ids_new ();
+
+          vendor_name = gnome_pnp_ids_get_pnp_id (manager->pnp_ids,
+                                                  output->vendor);
+
+          ret = g_strdup_printf ("%s %s", vendor_name, inches);
+
+          g_free (vendor_name);
+        }
+      else
+        {
+          /* TRANSLATORS: this is a monitor name (in case we don't know
+             the vendor), it's Unknown followed by a size in inches,
+             like 'Unknown 15"'
+          */
+          ret = g_strdup_printf (_("Unknown %s"), inches);
+        }
 
       g_free (inches);
       return ret;
@@ -789,7 +814,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
       g_variant_builder_add (&properties, "{sv}", "serial",
                              g_variant_new_string (output->serial));
       g_variant_builder_add (&properties, "{sv}", "display-name",
-                             g_variant_new_take_string (make_display_name (output)));
+                             g_variant_new_take_string (make_display_name (manager, output)));
       g_variant_builder_add (&properties, "{sv}", "backlight",
                              g_variant_new_int32 (output->backlight));
       g_variant_builder_add (&properties, "{sv}", "primary",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]