[gnome-color-manager] Add a colorimeter-kind property to GcmCalibrate



commit d796b9acdb8b061aca43a955b47bb7d6abaa12c7
Author: Richard Hughes <richard hughsie com>
Date:   Sun Feb 14 19:32:45 2010 +0000

    Add a colorimeter-kind property to GcmCalibrate

 src/gcm-calibrate.c   |   40 ++++++++++++---
 src/gcm-colorimeter.c |  132 +++++++++++++++++++++++++++++++------------------
 src/gcm-colorimeter.h |   12 +++-
 src/gcm-prefs.c       |   18 +++----
 4 files changed, 133 insertions(+), 69 deletions(-)
---
diff --git a/src/gcm-calibrate.c b/src/gcm-calibrate.c
index a2089de..d6da786 100644
--- a/src/gcm-calibrate.c
+++ b/src/gcm-calibrate.c
@@ -51,9 +51,10 @@ static void     gcm_calibrate_finalize	(GObject     *object);
  **/
 struct _GcmCalibratePrivate
 {
-	GcmColorimeter			*color_device;
+	GcmColorimeter			*colorimeter;
 	GcmCalibrateReferenceKind	 reference_kind;
 	GcmCalibrateDeviceKind		 device_kind;
+	GcmColorimeterKind		 colorimeter_kind;
 	gchar				*output_name;
 	gchar				*filename_source;
 	gchar				*filename_reference;
@@ -77,6 +78,7 @@ enum {
 	PROP_MANUFACTURER,
 	PROP_REFERENCE_KIND,
 	PROP_DEVICE_KIND,
+	PROP_COLORIMETER_KIND,
 	PROP_OUTPUT_NAME,
 	PROP_FILENAME_SOURCE,
 	PROP_FILENAME_REFERENCE,
@@ -438,7 +440,7 @@ gcm_calibrate_display (GcmCalibrate *calibrate, GtkWindow *window, GError **erro
 {
 	GcmCalibrateClass *klass = GCM_CALIBRATE_GET_CLASS (calibrate);
 	gboolean ret = TRUE;
-	gchar *hardware_device = NULL;
+	const gchar *hardware_device;
 	gboolean ret_tmp;
 	GtkWidget *dialog;
 	GString *string = NULL;
@@ -463,9 +465,7 @@ gcm_calibrate_display (GcmCalibrate *calibrate, GtkWindow *window, GError **erro
 	}
 
 	/* get calibration device model */
-	g_object_get (priv->color_device,
-		      "model", &hardware_device,
-		      NULL);
+	hardware_device = gcm_colorimeter_get_model (priv->colorimeter);
 
 	/* get device, harder */
 	if (hardware_device == NULL) {
@@ -574,7 +574,6 @@ out:
 		g_object_unref (brightness);
 	if (string != NULL)
 		g_string_free (string, TRUE);
-	g_free (hardware_device);
 	return ret;
 }
 
@@ -1038,6 +1037,9 @@ gcm_calibrate_get_property (GObject *object, guint prop_id, GValue *value, GPara
 	case PROP_DEVICE_KIND:
 		g_value_set_boolean (value, priv->device_kind);
 		break;
+	case PROP_COLORIMETER_KIND:
+		g_value_set_boolean (value, priv->colorimeter_kind);
+		break;
 	case PROP_OUTPUT_NAME:
 		g_value_set_string (value, priv->output_name);
 		break;
@@ -1090,6 +1092,16 @@ gcm_calibrate_guess_type (GcmCalibrate *calibrate)
 }
 
 /**
+ * gcm_prefs_colorimeter_changed_cb:
+ **/
+static void
+gcm_prefs_colorimeter_changed_cb (GcmColorimeter *_colorimeter, GcmCalibrate *calibrate)
+{
+	calibrate->priv->colorimeter_kind = gcm_colorimeter_get_kind (_colorimeter);
+	g_object_notify (G_OBJECT (calibrate), "colorimeter-kind");
+}
+
+/**
  * gcm_calibrate_set_property:
  **/
 static void
@@ -1176,6 +1188,14 @@ gcm_calibrate_class_init (GcmCalibrateClass *klass)
 	g_object_class_install_property (object_class, PROP_DEVICE_KIND, pspec);
 
 	/**
+	 * GcmCalibrate:colorimeter-kind:
+	 */
+	pspec = g_param_spec_uint ("colorimeter-kind", NULL, NULL,
+				   0, G_MAXUINT, 0,
+				   G_PARAM_READABLE);
+	g_object_class_install_property (object_class, PROP_COLORIMETER_KIND, pspec);
+
+	/**
 	 * GcmCalibrate:output-name:
 	 */
 	pspec = g_param_spec_string ("output-name", NULL, NULL,
@@ -1277,7 +1297,11 @@ gcm_calibrate_init (GcmCalibrate *calibrate)
 	calibrate->priv->serial = NULL;
 	calibrate->priv->device_kind = GCM_CALIBRATE_DEVICE_KIND_UNKNOWN;
 	calibrate->priv->reference_kind = GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN;
-	calibrate->priv->color_device = gcm_color_device_new ();
+	calibrate->priv->colorimeter = gcm_colorimeter_new ();
+
+	/* coldplug, and watch for changes */
+	calibrate->priv->colorimeter_kind = gcm_colorimeter_get_kind (calibrate->priv->colorimeter);
+	g_signal_connect (calibrate->priv->colorimeter, "changed", G_CALLBACK (gcm_prefs_colorimeter_changed_cb), calibrate);
 }
 
 /**
@@ -1299,7 +1323,7 @@ gcm_calibrate_finalize (GObject *object)
 	g_free (priv->description);
 	g_free (priv->device);
 	g_free (priv->serial);
-	g_object_unref (priv->color_device);
+	g_object_unref (priv->colorimeter);
 
 	G_OBJECT_CLASS (gcm_calibrate_parent_class)->finalize (object);
 }
diff --git a/src/gcm-colorimeter.c b/src/gcm-colorimeter.c
index fa1411c..f246d00 100644
--- a/src/gcm-colorimeter.c
+++ b/src/gcm-colorimeter.c
@@ -35,7 +35,7 @@
 
 #include "egg-debug.h"
 
-static void     gcm_color_device_finalize	(GObject     *object);
+static void     gcm_colorimeter_finalize	(GObject     *object);
 
 #define GCM_COLORIMETER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GCM_TYPE_COLORIMETER, GcmColorimeterPrivate))
 
@@ -69,16 +69,52 @@ enum {
 
 static guint signals[SIGNAL_LAST] = { 0 };
 
-G_DEFINE_TYPE (GcmColorimeter, gcm_color_device, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GcmColorimeter, gcm_colorimeter, G_TYPE_OBJECT)
 
 /**
- * gcm_color_device_get_property:
+ * gcm_colorimeter_get_model:
+ **/
+const gchar *
+gcm_colorimeter_get_model (GcmColorimeter *colorimeter)
+{
+	return colorimeter->priv->model;
+}
+
+/**
+ * gcm_colorimeter_get_vendor:
+ **/
+const gchar *
+gcm_colorimeter_get_vendor (GcmColorimeter *colorimeter)
+{
+	return colorimeter->priv->vendor;
+}
+
+/**
+ * gcm_colorimeter_get_present:
+ **/
+gboolean
+gcm_colorimeter_get_present (GcmColorimeter *colorimeter)
+{
+	return colorimeter->priv->present;
+}
+
+/**
+ * gcm_colorimeter_get_kind:
+ **/
+GcmColorimeterKind
+gcm_colorimeter_get_kind (GcmColorimeter *colorimeter)
+{
+	return colorimeter->priv->colorimeter_kind;
+}
+
+/**
+ * gcm_colorimeter_get_property:
  **/
 static void
-gcm_color_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+gcm_colorimeter_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
-	GcmColorimeter *color_device = GCM_COLORIMETER (object);
-	GcmColorimeterPrivate *priv = color_device->priv;
+	GcmColorimeter *colorimeter = GCM_COLORIMETER (object);
+	GcmColorimeterPrivate *priv = colorimeter->priv;
 
 	switch (prop_id) {
 	case PROP_PRESENT:
@@ -100,10 +136,10 @@ gcm_color_device_get_property (GObject *object, guint prop_id, GValue *value, GP
 }
 
 /**
- * gcm_color_device_set_property:
+ * gcm_colorimeter_set_property:
  **/
 static void
-gcm_color_device_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+gcm_colorimeter_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
 	switch (prop_id) {
 	default:
@@ -113,16 +149,16 @@ gcm_color_device_set_property (GObject *object, guint prop_id, const GValue *val
 }
 
 /**
- * gcm_color_device_class_init:
+ * gcm_colorimeter_class_init:
  **/
 static void
-gcm_color_device_class_init (GcmColorimeterClass *klass)
+gcm_colorimeter_class_init (GcmColorimeterClass *klass)
 {
 	GParamSpec *pspec;
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	object_class->finalize = gcm_color_device_finalize;
-	object_class->get_property = gcm_color_device_get_property;
-	object_class->set_property = gcm_color_device_set_property;
+	object_class->finalize = gcm_colorimeter_finalize;
+	object_class->get_property = gcm_colorimeter_get_property;
+	object_class->set_property = gcm_colorimeter_set_property;
 
 	/**
 	 * GcmColorimeter:present:
@@ -171,13 +207,13 @@ gcm_color_device_class_init (GcmColorimeterClass *klass)
 
 
 /**
- * gcm_color_device_device_add:
+ * gcm_colorimeter_device_add:
  **/
 static gboolean
-gcm_color_device_device_add (GcmColorimeter *color_device, GUdevDevice *device)
+gcm_colorimeter_device_add (GcmColorimeter *colorimeter, GUdevDevice *device)
 {
 	gboolean ret;
-	GcmColorimeterPrivate *priv = color_device->priv;
+	GcmColorimeterPrivate *priv = colorimeter->priv;
 
 	/* interesting device? */
 	ret = g_udev_device_get_property_as_boolean (device, "COLOR_MEASUREMENT_DEVICE");
@@ -208,19 +244,19 @@ gcm_color_device_device_add (GcmColorimeter *color_device, GUdevDevice *device)
 
 	/* signal the addition */
 	egg_debug ("emit: changed");
-	g_signal_emit (color_device, signals[SIGNAL_CHANGED], 0);
+	g_signal_emit (colorimeter, signals[SIGNAL_CHANGED], 0);
 out:
 	return ret;
 }
 
 /**
- * gcm_color_device_device_remove:
+ * gcm_colorimeter_device_remove:
  **/
 static gboolean
-gcm_color_device_device_remove (GcmColorimeter *color_device, GUdevDevice *device)
+gcm_colorimeter_device_remove (GcmColorimeter *colorimeter, GUdevDevice *device)
 {
 	gboolean ret;
-	GcmColorimeterPrivate *priv = color_device->priv;
+	GcmColorimeterPrivate *priv = colorimeter->priv;
 
 	/* interesting device? */
 	ret = g_udev_device_get_property_as_boolean (device, "COLOR_MEASUREMENT_DEVICE");
@@ -241,26 +277,26 @@ gcm_color_device_device_remove (GcmColorimeter *color_device, GUdevDevice *devic
 
 	/* signal the removal */
 	egg_debug ("emit: changed");
-	g_signal_emit (color_device, signals[SIGNAL_CHANGED], 0);
+	g_signal_emit (colorimeter, signals[SIGNAL_CHANGED], 0);
 out:
 	return ret;
 }
 
 /**
- * gcm_color_device_coldplug:
+ * gcm_colorimeter_coldplug:
  **/
 static gboolean
-gcm_color_device_coldplug (GcmColorimeter *color_device)
+gcm_colorimeter_coldplug (GcmColorimeter *colorimeter)
 {
 	GList *devices;
 	GList *l;
 	gboolean ret = FALSE;
-	GcmColorimeterPrivate *priv = color_device->priv;
+	GcmColorimeterPrivate *priv = colorimeter->priv;
 
 	/* get all USB devices */
 	devices = g_udev_client_query_by_subsystem (priv->client, "usb");
 	for (l = devices; l != NULL; l = l->next) {
-		ret = gcm_color_device_device_add (color_device, l->data);
+		ret = gcm_colorimeter_device_add (colorimeter, l->data);
 		if (ret) {
 			egg_debug ("found color management device");
 			break;
@@ -276,64 +312,64 @@ gcm_color_device_coldplug (GcmColorimeter *color_device)
  * gcm_prefs_uevent_cb:
  **/
 static void
-gcm_prefs_uevent_cb (GUdevClient *client, const gchar *action, GUdevDevice *device, GcmColorimeter *color_device)
+gcm_prefs_uevent_cb (GUdevClient *client, const gchar *action, GUdevDevice *device, GcmColorimeter *colorimeter)
 {
 	egg_debug ("uevent %s", action);
 	if (g_strcmp0 (action, "add") == 0) {
-		gcm_color_device_device_add (color_device, device);
+		gcm_colorimeter_device_add (colorimeter, device);
 	} else if (g_strcmp0 (action, "remove") == 0) {
-		gcm_color_device_device_remove (color_device, device);
+		gcm_colorimeter_device_remove (colorimeter, device);
 	}
 }
 
 /**
- * gcm_color_device_init:
+ * gcm_colorimeter_init:
  **/
 static void
-gcm_color_device_init (GcmColorimeter *color_device)
+gcm_colorimeter_init (GcmColorimeter *colorimeter)
 {
 	const gchar *subsystems[] = {"usb", NULL};
 
-	color_device->priv = GCM_COLORIMETER_GET_PRIVATE (color_device);
-	color_device->priv->vendor = NULL;
-	color_device->priv->model = NULL;
-	color_device->priv->colorimeter_kind = GCM_COLORIMETER_KIND_UNKNOWN;
+	colorimeter->priv = GCM_COLORIMETER_GET_PRIVATE (colorimeter);
+	colorimeter->priv->vendor = NULL;
+	colorimeter->priv->model = NULL;
+	colorimeter->priv->colorimeter_kind = GCM_COLORIMETER_KIND_UNKNOWN;
 
 	/* use GUdev to find the calibration device */
-	color_device->priv->client = g_udev_client_new (subsystems);
-	g_signal_connect (color_device->priv->client, "uevent",
-			  G_CALLBACK (gcm_prefs_uevent_cb), color_device);
+	colorimeter->priv->client = g_udev_client_new (subsystems);
+	g_signal_connect (colorimeter->priv->client, "uevent",
+			  G_CALLBACK (gcm_prefs_uevent_cb), colorimeter);
 
 	/* coldplug */
-	gcm_color_device_coldplug (color_device);
+	gcm_colorimeter_coldplug (colorimeter);
 }
 
 /**
- * gcm_color_device_finalize:
+ * gcm_colorimeter_finalize:
  **/
 static void
-gcm_color_device_finalize (GObject *object)
+gcm_colorimeter_finalize (GObject *object)
 {
-	GcmColorimeter *color_device = GCM_COLORIMETER (object);
-	GcmColorimeterPrivate *priv = color_device->priv;
+	GcmColorimeter *colorimeter = GCM_COLORIMETER (object);
+	GcmColorimeterPrivate *priv = colorimeter->priv;
 
 	g_object_unref (priv->client);
 	g_free (priv->vendor);
 	g_free (priv->model);
 
-	G_OBJECT_CLASS (gcm_color_device_parent_class)->finalize (object);
+	G_OBJECT_CLASS (gcm_colorimeter_parent_class)->finalize (object);
 }
 
 /**
- * gcm_color_device_new:
+ * gcm_colorimeter_new:
  *
  * Return value: a new GcmColorimeter object.
  **/
 GcmColorimeter *
-gcm_color_device_new (void)
+gcm_colorimeter_new (void)
 {
-	GcmColorimeter *color_device;
-	color_device = g_object_new (GCM_TYPE_COLORIMETER, NULL);
-	return GCM_COLORIMETER (color_device);
+	GcmColorimeter *colorimeter;
+	colorimeter = g_object_new (GCM_TYPE_COLORIMETER, NULL);
+	return GCM_COLORIMETER (colorimeter);
 }
 
diff --git a/src/gcm-colorimeter.h b/src/gcm-colorimeter.h
index becf65b..f1ded7a 100644
--- a/src/gcm-colorimeter.h
+++ b/src/gcm-colorimeter.h
@@ -26,7 +26,7 @@
 
 G_BEGIN_DECLS
 
-#define GCM_TYPE_COLORIMETER		(gcm_color_device_get_type ())
+#define GCM_TYPE_COLORIMETER		(gcm_colorimeter_get_type ())
 #define GCM_COLORIMETER(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), GCM_TYPE_COLORIMETER, GcmColorimeter))
 #define GCM_COLORIMETER_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), GCM_TYPE_COLORIMETER, GcmColorimeterClass))
 #define GCM_IS_COLORIMETER(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), GCM_TYPE_COLORIMETER))
@@ -61,8 +61,14 @@ typedef enum {
 	GCM_COLORIMETER_KIND_UNKNOWN
 } GcmColorimeterKind;
 
-GType		 gcm_color_device_get_type		(void);
-GcmColorimeter	*gcm_color_device_new			(void);
+GType			 gcm_colorimeter_get_type		(void);
+GcmColorimeter		*gcm_colorimeter_new			(void);
+
+/* accessors */
+const gchar		*gcm_colorimeter_get_model		(GcmColorimeter	*colorimeter);
+const gchar		*gcm_colorimeter_get_vendor		(GcmColorimeter	*colorimeter);
+gboolean		 gcm_colorimeter_get_present		(GcmColorimeter	*colorimeter);
+GcmColorimeterKind	 gcm_colorimeter_get_kind		(GcmColorimeter	*colorimeter);
 
 G_END_DECLS
 
diff --git a/src/gcm-prefs.c b/src/gcm-prefs.c
index d3722b1..07a9ec6 100644
--- a/src/gcm-prefs.c
+++ b/src/gcm-prefs.c
@@ -50,7 +50,7 @@ static GtkListStore *list_store_profiles = NULL;
 static GcmDevice *current_device = NULL;
 static GcmProfileStore *profile_store = NULL;
 static GcmClient *gcm_client = NULL;
-static GcmColorimeter *color_device = NULL;
+static GcmColorimeter *colorimeter = NULL;
 static gboolean setting_up_device = FALSE;
 static GtkWidget *info_bar = NULL;
 static GtkWidget *cie_widget = NULL;
@@ -945,9 +945,7 @@ gcm_prefs_set_calibrate_button_sensitivity (void)
 			goto out;
 
 		/* find whether we have hardware installed */
-		g_object_get (color_device,
-			      "present", &ret,
-			      NULL);
+		ret = gcm_colorimeter_get_present (colorimeter);
 #ifndef GCM_HARDWARE_DETECTION
 		egg_debug ("overriding device presence %i with TRUE", ret);
 		ret = TRUE;
@@ -1764,10 +1762,10 @@ out:
 }
 
 /**
- * gcm_prefs_color_device_changed_cb:
+ * gcm_prefs_colorimeter_changed_cb:
  **/
 static void
-gcm_prefs_color_device_changed_cb (GcmColorimeter *_color_device, gpointer user_data)
+gcm_prefs_colorimeter_changed_cb (GcmColorimeter *_colorimeter, gpointer user_data)
 {
 	gcm_prefs_set_calibrate_button_sensitivity ();
 }
@@ -2585,8 +2583,8 @@ main (int argc, char **argv)
 			  G_CALLBACK (gcm_prefs_client_notify_loading_cb), NULL);
 
 	/* use the color device */
-	color_device = gcm_color_device_new ();
-	g_signal_connect (color_device, "changed", G_CALLBACK (gcm_prefs_color_device_changed_cb), NULL);
+	colorimeter = gcm_colorimeter_new ();
+	g_signal_connect (colorimeter, "changed", G_CALLBACK (gcm_prefs_colorimeter_changed_cb), NULL);
 
 	/* set the parent window if it is specified */
 	if (xid != 0) {
@@ -2674,8 +2672,8 @@ out:
 		g_object_unref (size_group2);
 	if (current_device != NULL)
 		g_object_unref (current_device);
-	if (color_device != NULL)
-		g_object_unref (color_device);
+	if (colorimeter != NULL)
+		g_object_unref (colorimeter);
 	if (gconf_client != NULL)
 		g_object_unref (gconf_client);
 	if (builder != NULL)



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