[gnome-control-center] wacom: Update for new calibrator API



commit 9ba2c986e7b815d6ac32edd3f70a2156ba544fb6
Author: Bastien Nocera <hadess hadess net>
Date:   Thu Jan 12 18:57:55 2012 +0000

    wacom: Update for new calibrator API

 panels/wacom/cc-wacom-page.c |   74 ++++++++++++++++++++++++++----------------
 1 files changed, 46 insertions(+), 28 deletions(-)
---
diff --git a/panels/wacom/cc-wacom-page.c b/panels/wacom/cc-wacom-page.c
index e4cccf5..14aa84b 100644
--- a/panels/wacom/cc-wacom-page.c
+++ b/panels/wacom/cc-wacom-page.c
@@ -45,6 +45,7 @@ struct _CcWacomPagePrivate
 	GsdWacomDevice *stylus, *eraser;
 	GtkBuilder     *builder;
 	GtkWidget      *nav;
+	CalibArea      *area;
 	GSettings      *wacom_settings;
 	GSettings      *stylus_settings;
 	GSettings      *eraser_settings;
@@ -127,8 +128,7 @@ set_calibration (gint      *cal,
 
 	current = g_settings_get_value (settings, "area");
 	g_variant_get_fixed_array (current, &nvalues, sizeof (gint32));
-	if ((ncal != 4) || (nvalues != 4))
-	{
+	if ((ncal != 4) || (nvalues != 4)) {
 		g_warning("Unable set set device calibration property. Got %"G_GSIZE_FORMAT" items to put in %"G_GSIZE_FORMAT" slots; expected %d items.\n", ncal, nvalues, 4);
 		return;
 	}
@@ -144,38 +144,51 @@ set_calibration (gint      *cal,
 	g_variant_unref (array);
 }
 
-static gboolean
-run_calibration (gint  *cal,
-                 gsize  ncal)
+static void
+finish_calibration (CalibArea *area,
+		    gpointer   user_data)
 {
+	CcWacomPage *page = (CcWacomPage *) user_data;
+	CcWacomPagePrivate *priv = page->priv;
 	XYinfo axis;
 	gboolean swap_xy;
-	struct Calib calibrator;
-
-	if (ncal != 4) {
-		g_warning("Unable to run calibration. Got %"G_GSIZE_FORMAT" items; expected %d.\n", ncal, 4);
-		return FALSE;
-	}
+	int cal[4];
 
-	calibrator.threshold_misclick = 15;
-	calibrator.threshold_doubleclick = 7;
-	calibrator.old_axis.x_min = cal[0];
-	calibrator.old_axis.y_min = cal[1];
-	calibrator.old_axis.x_max = cal[2];
-	calibrator.old_axis.y_max = cal[3];
-
-	/* !!NOTE!! This call blocks on the calibration
-	 * !!NOTE!! process. It will be several seconds
-	 * !!NOTE!! before this returns.
-	 */
-	if (run_gui (&calibrator, &axis, &swap_xy)) {
+	if (calib_area_finish (area, &axis, &swap_xy)) {
 		cal[0] = axis.x_min;
 		cal[1] = axis.y_min;
 		cal[2] = axis.x_max;
 		cal[3] = axis.y_max;
-		return TRUE;
+
+		set_calibration(cal, 4, page->priv->wacom_settings);
 	}
 
+	calib_area_free (area);
+	page->priv->area = NULL;
+	gtk_widget_set_sensitive (WID ("button-calibrate"), TRUE);
+}
+
+static gboolean
+run_calibration (CcWacomPage *page,
+		 gint        *cal)
+{
+	XYinfo old_axis;
+
+	g_assert (page->priv->area == NULL);
+
+	old_axis.x_min = cal[0];
+	old_axis.y_min = cal[1];
+	old_axis.x_max = cal[2];
+	old_axis.y_max = cal[3];
+
+	page->priv->area = calib_area_new (NULL,
+					   0,
+					   finish_calibration,
+					   page,
+					   &old_axis,
+					   15,
+					   7);
+
 	return FALSE;
 }
 
@@ -211,8 +224,8 @@ calibrate_button_clicked_cb (GtkButton   *button,
 		g_free (device_cal);
 	}
 
-	if (run_calibration(calibration, 4))
-		set_calibration(calibration, 4, page->priv->wacom_settings);
+	run_calibration (page, calibration);
+	gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
 }
 
 static void
@@ -432,12 +445,17 @@ cc_wacom_page_dispose (GObject *object)
 {
 	CcWacomPagePrivate *priv = CC_WACOM_PAGE (object)->priv;
 
-	if (priv->builder)
-	{
+	if (priv->area) {
+		calib_area_free (priv->area);
+		priv->area = NULL;
+	}
+
+	if (priv->builder) {
 		g_object_unref (priv->builder);
 		priv->builder = NULL;
 	}
 
+
 	G_OBJECT_CLASS (cc_wacom_page_parent_class)->dispose (object);
 }
 



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