[gnome-flashback] monitor: add display name
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] monitor: add display name
- Date: Thu, 18 Jul 2019 17:31:06 +0000 (UTC)
commit 2db90aa8d4748fad18cc460ac30f1ae5f9aa06ad
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Wed Jul 17 00:02:39 2019 +0300
monitor: add display name
Based on mutter commits:
https://gitlab.gnome.org/GNOME/mutter/commit/6541d49fe729f19517c3
https://gitlab.gnome.org/GNOME/mutter/commit/bca08c2c4ed0b9fbe8a5
backends/gf-monitor-manager.c | 116 +-----------------------------------
backends/gf-monitor-normal.c | 2 +
backends/gf-monitor-private.h | 4 ++
backends/gf-monitor-tiled.c | 2 +
backends/gf-monitor.c | 134 ++++++++++++++++++++++++++++++++++++++++++
po/POTFILES.in | 2 +-
6 files changed, 146 insertions(+), 114 deletions(-)
---
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index 0e52525..396152b 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -27,7 +27,6 @@
#include "config.h"
-#include <glib/gi18n-lib.h>
#include <math.h>
#include <string.h>
@@ -944,115 +943,6 @@ is_valid_layout_mode (GfLogicalMonitorLayoutMode layout_mode)
return FALSE;
}
-static const gdouble known_diagonals[] =
- {
- 12.1,
- 13.3,
- 15.6
- };
-
-static gchar *
-diagonal_to_str (gdouble d)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (known_diagonals); i++)
- {
- gdouble delta;
-
- delta = fabs(known_diagonals[i] - d);
-
- if (delta < 0.1)
- return g_strdup_printf ("%0.1lf\"", known_diagonals[i]);
- }
-
- return g_strdup_printf ("%d\"", (int) (d + 0.5));
-}
-
-static gchar *
-make_display_name (GfMonitorManager *manager,
- GfMonitor *monitor)
-{
- gchar *inches;
- gchar *vendor_name;
- const char *vendor;
- const char *product_name;
- int width_mm;
- int height_mm;
-
- if (gf_monitor_is_laptop_panel (monitor))
- return g_strdup (_("Built-in display"));
-
- inches = NULL;
- vendor_name = NULL;
- vendor = gf_monitor_get_vendor (monitor);
- product_name = NULL;
-
- gf_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
-
- if (width_mm > 0 && height_mm > 0)
- {
- if (!gf_monitor_has_aspect_as_size (monitor))
- {
- double d;
-
- d = sqrt (width_mm * width_mm + height_mm * height_mm);
- inches = diagonal_to_str (d / 25.4);
- }
- else
- {
- product_name = gf_monitor_get_product (monitor);
- }
- }
-
- if (g_strcmp0 (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, vendor);
-
- if (!vendor_name)
- vendor_name = g_strdup (vendor);
- }
- else
- {
- if (inches != NULL)
- vendor_name = g_strdup (_("Unknown"));
- else
- vendor_name = g_strdup (_("Unknown Display"));
- }
-
- if (inches != NULL)
- {
- gchar *display_name;
-
- display_name = g_strdup_printf (C_("This is a monitor vendor name, followed by a "
- "size in inches, like 'Dell 15\"'",
- "%s %s"), vendor_name, inches);
-
- g_free (vendor_name);
- g_free (inches);
-
- return display_name;
- }
- else if (product_name != NULL)
- {
- gchar *display_name;
-
- display_name = g_strdup_printf (C_("This is a monitor vendor name followed by "
- "product/model name where size in inches "
- "could not be calculated, e.g. Dell U2414H",
- "%s %s"), vendor_name, product_name);
-
- g_free (vendor_name);
-
- return display_name;
- }
-
- return vendor_name;
-}
-
static const gchar *
get_connector_type_name (GfConnectorType connector_type)
{
@@ -1588,7 +1478,7 @@ gf_monitor_manager_handle_get_current_state (GfDBusDisplayConfig *skeleton,
GVariantBuilder monitor_properties_builder;
GList *k;
gboolean is_builtin;
- gchar *display_name;
+ const char *display_name;
gint i;
current_mode = gf_monitor_get_current_mode (monitor);
@@ -1674,10 +1564,10 @@ gf_monitor_manager_handle_get_current_state (GfDBusDisplayConfig *skeleton,
"is-builtin",
g_variant_new_boolean (is_builtin));
- display_name = make_display_name (manager, monitor);
+ display_name = gf_monitor_get_display_name (monitor);
g_variant_builder_add (&monitor_properties_builder, "{sv}",
"display-name",
- g_variant_new_take_string (display_name));
+ g_variant_new_string (display_name));
g_variant_builder_add (&monitors_builder, MONITOR_FORMAT,
monitor_spec->connector,
diff --git a/backends/gf-monitor-normal.c b/backends/gf-monitor-normal.c
index 68920a5..aeefbd9 100644
--- a/backends/gf-monitor-normal.c
+++ b/backends/gf-monitor-normal.c
@@ -182,5 +182,7 @@ gf_monitor_normal_new (GfGpu *gpu,
gf_monitor_generate_spec (monitor);
generate_modes (normal);
+ gf_monitor_make_display_name (monitor);
+
return normal;
}
diff --git a/backends/gf-monitor-private.h b/backends/gf-monitor-private.h
index c7f8d23..cba5728 100644
--- a/backends/gf-monitor-private.h
+++ b/backends/gf-monitor-private.h
@@ -90,6 +90,10 @@ struct _GfMonitorClass
GfGpu *gf_monitor_get_gpu (GfMonitor *monitor);
+void gf_monitor_make_display_name (GfMonitor *monitor);
+
+const char *gf_monitor_get_display_name (GfMonitor *monitor);
+
gboolean gf_monitor_is_mode_assigned (GfMonitor *monitor,
GfMonitorMode *mode);
diff --git a/backends/gf-monitor-tiled.c b/backends/gf-monitor-tiled.c
index cecb088..9efc606 100644
--- a/backends/gf-monitor-tiled.c
+++ b/backends/gf-monitor-tiled.c
@@ -739,6 +739,8 @@ gf_monitor_tiled_new (GfGpu *gpu,
gf_monitor_manager_tiled_monitor_added (monitor_manager, monitor);
generate_modes (tiled);
+ gf_monitor_make_display_name (monitor);
+
return tiled;
}
diff --git a/backends/gf-monitor.c b/backends/gf-monitor.c
index 2afe0d3..a0dac56 100644
--- a/backends/gf-monitor.c
+++ b/backends/gf-monitor.c
@@ -21,6 +21,7 @@
#include "config.h"
+#include <glib/gi18n-lib.h>
#include <math.h>
#include <string.h>
@@ -74,6 +75,8 @@ typedef struct
* the primary one).
*/
glong winsys_id;
+
+ char *display_name;
} GfMonitorPrivate;
enum
@@ -89,6 +92,112 @@ static GParamSpec *monitor_properties[LAST_PROP] = { NULL };
G_DEFINE_TYPE_WITH_PRIVATE (GfMonitor, gf_monitor, G_TYPE_OBJECT)
+static const gdouble known_diagonals[] =
+ {
+ 12.1,
+ 13.3,
+ 15.6
+ };
+
+static gchar *
+diagonal_to_str (gdouble d)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (known_diagonals); i++)
+ {
+ gdouble delta;
+
+ delta = fabs(known_diagonals[i] - d);
+
+ if (delta < 0.1)
+ return g_strdup_printf ("%0.1lf\"", known_diagonals[i]);
+ }
+
+ return g_strdup_printf ("%d\"", (int) (d + 0.5));
+}
+
+static gchar *
+make_display_name (GfMonitor *monitor,
+ GfMonitorManager *manager)
+{
+ gchar *inches;
+ gchar *vendor_name;
+ const char *vendor;
+ const char *product_name;
+ int width_mm;
+ int height_mm;
+
+ if (gf_monitor_is_laptop_panel (monitor))
+ return g_strdup (_("Built-in display"));
+
+ inches = NULL;
+ vendor_name = NULL;
+ vendor = gf_monitor_get_vendor (monitor);
+ product_name = NULL;
+
+ gf_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
+
+ if (width_mm > 0 && height_mm > 0)
+ {
+ if (!gf_monitor_has_aspect_as_size (monitor))
+ {
+ double d;
+
+ d = sqrt (width_mm * width_mm + height_mm * height_mm);
+ inches = diagonal_to_str (d / 25.4);
+ }
+ else
+ {
+ product_name = gf_monitor_get_product (monitor);
+ }
+ }
+
+ if (g_strcmp0 (vendor, "unknown") != 0)
+ {
+ vendor_name = gf_monitor_manager_get_vendor_name (manager, vendor);
+
+ if (!vendor_name)
+ vendor_name = g_strdup (vendor);
+ }
+ else
+ {
+ if (inches != NULL)
+ vendor_name = g_strdup (_("Unknown"));
+ else
+ vendor_name = g_strdup (_("Unknown Display"));
+ }
+
+ if (inches != NULL)
+ {
+ gchar *display_name;
+
+ display_name = g_strdup_printf (C_("This is a monitor vendor name, followed by a "
+ "size in inches, like 'Dell 15\"'",
+ "%s %s"), vendor_name, inches);
+
+ g_free (vendor_name);
+ g_free (inches);
+
+ return display_name;
+ }
+ else if (product_name != NULL)
+ {
+ gchar *display_name;
+
+ display_name = g_strdup_printf (C_("This is a monitor vendor name followed by "
+ "product/model name where size in inches "
+ "could not be calculated, e.g. Dell U2414H",
+ "%s %s"), vendor_name, product_name);
+
+ g_free (vendor_name);
+
+ return display_name;
+ }
+
+ return vendor_name;
+}
+
static gboolean
is_current_mode_known (GfMonitor *monitor)
{
@@ -287,6 +396,7 @@ gf_monitor_finalize (GObject *object)
g_hash_table_destroy (priv->mode_ids);
g_list_free_full (priv->modes, (GDestroyNotify) gf_monitor_mode_free);
gf_monitor_spec_free (priv->spec);
+ g_free (priv->display_name);
G_OBJECT_CLASS (gf_monitor_parent_class)->finalize (object);
}
@@ -390,6 +500,30 @@ gf_monitor_get_gpu (GfMonitor *monitor)
return priv->gpu;
}
+void
+gf_monitor_make_display_name (GfMonitor *monitor)
+{
+ GfMonitorPrivate *priv;
+ GfMonitorManager *manager;
+
+ priv = gf_monitor_get_instance_private (monitor);
+
+ manager = gf_gpu_get_monitor_manager (priv->gpu);
+
+ g_free (priv->display_name);
+ priv->display_name = make_display_name (monitor, manager);
+}
+
+const char *
+gf_monitor_get_display_name (GfMonitor *monitor)
+{
+ GfMonitorPrivate *priv;
+
+ priv = gf_monitor_get_instance_private (monitor);
+
+ return priv->display_name;
+}
+
gboolean
gf_monitor_is_mode_assigned (GfMonitor *monitor,
GfMonitorMode *mode)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 19c8f4d..54aebbd 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,6 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
-backends/gf-monitor-manager.c
+backends/gf-monitor.c
data/applications/gnome-flashback.desktop.in
data/applications/gnome-flashback-init.desktop.in
data/autostart/gnome-flashback-nm-applet.desktop.in
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]