[gtk/wip/otte/monitors] inspector: Use the monitor list to list monitors
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/monitors] inspector: Use the monitor list to list monitors
- Date: Wed, 13 May 2020 05:51:01 +0000 (UTC)
commit d9c0d9887184c43565e09aec583b6002b55c41f3
Author: Benjamin Otte <otte redhat com>
Date: Wed May 13 07:49:56 2020 +0200
inspector: Use the monitor list to list monitors
gtk/inspector/general.c | 141 ++++++++++++++++++++++++-----------------------
gtk/inspector/general.ui | 10 ++++
2 files changed, 83 insertions(+), 68 deletions(-)
---
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index 09afdbb271..7f7f4dcfca 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -68,6 +68,7 @@ struct _GtkInspectorGeneralPrivate
GtkWidget *version_box;
GtkWidget *env_box;
GtkWidget *display_box;
+ GtkWidget *monitor_box;
GtkWidget *gl_box;
GtkWidget *vulkan_box;
GtkWidget *device_box;
@@ -515,10 +516,8 @@ translate_subpixel_layout (GdkSubpixelLayout subpixel)
static void
populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
{
- gint i;
GList *children, *l;
GtkWidget *child;
- int n_monitors;
GtkListBox *list;
gtk_widget_show (gen->priv->display_composited);
@@ -549,63 +548,69 @@ populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
gdk_display_is_rgba (display));
gtk_widget_set_visible (gen->priv->display_composited,
gdk_display_is_composited (display));
+}
- n_monitors = gdk_display_get_n_monitors (display);
- for (i = 0; i < n_monitors; i++)
- {
- gchar *name;
- gchar *value;
- GdkRectangle rect;
- gint scale;
- char *scale_str = NULL;
- const char *manufacturer;
- const char *model;
- GdkMonitor *monitor;
-
- monitor = gdk_display_get_monitor (display, i);
-
- name = g_strdup_printf ("Monitor %d", i);
- manufacturer = gdk_monitor_get_manufacturer (monitor);
- model = gdk_monitor_get_model (monitor);
- value = g_strdup_printf ("%s%s%s",
- manufacturer ? manufacturer : "",
- manufacturer || model ? " " : "",
- model ? model : "");
- add_label_row (gen, list, name, value, 0);
- g_free (name);
- g_free (value);
-
- gdk_monitor_get_geometry (monitor, &rect);
- scale = gdk_monitor_get_scale_factor (monitor);
- if (scale != 1)
- scale_str = g_strdup_printf (" @ %d", scale);
-
- value = g_strdup_printf ("%d × %d%s at %d, %d",
- rect.width, rect.height,
- scale_str ? scale_str : "",
- rect.x, rect.y);
- add_label_row (gen, list, "Geometry", value, 10);
- g_free (value);
- g_free (scale_str);
-
- value = g_strdup_printf ("%d × %d mm²",
- gdk_monitor_get_width_mm (monitor),
- gdk_monitor_get_height_mm (monitor));
- add_label_row (gen, list, "Size", value, 10);
- g_free (value);
-
- if (gdk_monitor_get_refresh_rate (monitor) != 0)
- value = g_strdup_printf ("%.2f Hz",
- 0.001 * gdk_monitor_get_refresh_rate (monitor));
- else
- value = g_strdup ("unknown");
- add_label_row (gen, list, "Refresh rate", value, 10);
- g_free (value);
-
- value = g_strdup (translate_subpixel_layout (gdk_monitor_get_subpixel_layout (monitor)));
- add_label_row (gen, list, "Subpixel layout", value, 10);
- g_free (value);
- }
+static GtkWidget *
+populate_monitor (gpointer item,
+ gpointer gen)
+{
+ GtkListBox *list;
+ GdkMonitor *monitor = item;
+ gchar *name;
+ gchar *value;
+ GdkRectangle rect;
+ gint scale;
+ char *scale_str = NULL;
+ const char *manufacturer;
+ const char *model;
+
+ list = GTK_LIST_BOX (gtk_list_box_new ());
+ gtk_list_box_set_selection_mode (list, GTK_SELECTION_NONE);
+
+ /* XXX: add monitor # here when porting to listview */
+ name = g_strdup_printf ("Monitor %d", 1);
+ manufacturer = gdk_monitor_get_manufacturer (monitor);
+ model = gdk_monitor_get_model (monitor);
+ value = g_strdup_printf ("%s%s%s",
+ manufacturer ? manufacturer : "",
+ manufacturer || model ? " " : "",
+ model ? model : "");
+ add_label_row (gen, list, name, value, 0);
+ g_free (name);
+ g_free (value);
+
+ gdk_monitor_get_geometry (monitor, &rect);
+ scale = gdk_monitor_get_scale_factor (monitor);
+ if (scale != 1)
+ scale_str = g_strdup_printf (" @ %d", scale);
+
+ value = g_strdup_printf ("%d × %d%s at %d, %d",
+ rect.width, rect.height,
+ scale_str ? scale_str : "",
+ rect.x, rect.y);
+ add_label_row (gen, list, "Geometry", value, 10);
+ g_free (value);
+ g_free (scale_str);
+
+ value = g_strdup_printf ("%d × %d mm²",
+ gdk_monitor_get_width_mm (monitor),
+ gdk_monitor_get_height_mm (monitor));
+ add_label_row (gen, list, "Size", value, 10);
+ g_free (value);
+
+ if (gdk_monitor_get_refresh_rate (monitor) != 0)
+ value = g_strdup_printf ("%.2f Hz",
+ 0.001 * gdk_monitor_get_refresh_rate (monitor));
+ else
+ value = g_strdup ("unknown");
+ add_label_row (gen, list, "Refresh rate", value, 10);
+ g_free (value);
+
+ value = g_strdup (translate_subpixel_layout (gdk_monitor_get_subpixel_layout (monitor)));
+ add_label_row (gen, list, "Subpixel layout", value, 10);
+ g_free (value);
+
+ return GTK_WIDGET (list);
}
static void
@@ -616,20 +621,14 @@ populate_display_notify_cb (GdkDisplay *display,
populate_display (display, gen);
}
-static void
-populate_display_monitor_cb (GdkDisplay *display,
- GdkMonitor *monitor,
- GtkInspectorGeneral *gen)
-{
- populate_display (display, gen);
-}
-
static void
init_display (GtkInspectorGeneral *gen)
{
g_signal_connect (gen->priv->display, "notify", G_CALLBACK (populate_display_notify_cb), gen);
- g_signal_connect (gen->priv->display, "monitor-added", G_CALLBACK (populate_display_monitor_cb), gen);
- g_signal_connect (gen->priv->display, "monitor-removed", G_CALLBACK (populate_display_monitor_cb), gen);
+ gtk_list_box_bind_model (GTK_LIST_BOX (gen->priv->monitor_box),
+ gdk_display_get_monitors (gen->priv->display),
+ populate_monitor,
+ gen, NULL);
populate_display (gen->priv->display, gen);
}
@@ -840,6 +839,8 @@ keynav_failed (GtkWidget *widget, GtkDirectionType direction, GtkInspectorGenera
else if (direction == GTK_DIR_DOWN && widget == gen->priv->env_box)
next = gen->priv->display_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->display_box)
+ next = gen->priv->monitor_box;
+ else if (direction == GTK_DIR_DOWN && widget == gen->priv->monitor_box)
next = gen->priv->gl_box;
else if (direction == GTK_DIR_DOWN && widget == gen->priv->gl_box)
next = gen->priv->vulkan_box;
@@ -850,6 +851,8 @@ keynav_failed (GtkWidget *widget, GtkDirectionType direction, GtkInspectorGenera
else if (direction == GTK_DIR_UP && widget == gen->priv->vulkan_box)
next = gen->priv->gl_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->gl_box)
+ next = gen->priv->monitor_box;
+ else if (direction == GTK_DIR_UP && widget == gen->priv->monitor_box)
next = gen->priv->display_box;
else if (direction == GTK_DIR_UP && widget == gen->priv->display_box)
next = gen->priv->env_box;
@@ -877,6 +880,7 @@ gtk_inspector_general_constructed (GObject *object)
g_signal_connect (gen->priv->version_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->env_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->display_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
+ g_signal_connect (gen->priv->monitor_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->gl_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->vulkan_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
g_signal_connect (gen->priv->device_box, "keynav-failed", G_CALLBACK (keynav_failed), gen);
@@ -907,6 +911,7 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, version_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, env_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, monitor_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gl_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, vulkan_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_version);
diff --git a/gtk/inspector/general.ui b/gtk/inspector/general.ui
index 5b363955da..5c489484ed 100644
--- a/gtk/inspector/general.ui
+++ b/gtk/inspector/general.ui
@@ -500,6 +500,16 @@
</child>
</object>
</child>
+ <child>
+ <object class="GtkFrame" id="monitor_frame">
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkListBox" id="monitor_box">
+ <property name="selection-mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
<child>
<object class="GtkFrame" id="gl_frame">
<property name="halign">center</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]