[gnome-control-center] wacom: Update from gnome-settings-daemon



commit c85f53a80104ce2ba7582803495e66ff2e26d756
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Feb 14 18:46:29 2012 +0000

    wacom: Update from gnome-settings-daemon

 panels/wacom/gsd-wacom-device.c |  156 +++++++++++++++++++++++++++++++++++++-
 panels/wacom/gsd-wacom-device.h |    7 ++
 2 files changed, 158 insertions(+), 5 deletions(-)
---
diff --git a/panels/wacom/gsd-wacom-device.c b/panels/wacom/gsd-wacom-device.c
index 66048b8..a1f43c3 100644
--- a/panels/wacom/gsd-wacom-device.c
+++ b/panels/wacom/gsd-wacom-device.c
@@ -573,6 +573,61 @@ find_output_by_display (GsdWacomDevice *device)
 	return find_output_by_edid (edid[0], edid[1], edid[2]);
 }
 
+static GnomeRROutputInfo*
+find_output_by_monitor (GdkScreen *screen,
+			int        monitor)
+{
+	GError *error = NULL;
+	GnomeRRScreen *rr_screen;
+	GnomeRRConfig *rr_config;
+	GnomeRROutputInfo **rr_output_infos;
+	GnomeRROutputInfo *ret;
+	guint i;
+
+	ret = NULL;
+
+	rr_screen = gnome_rr_screen_new (screen, &error);
+	if (rr_screen == NULL) {
+		g_warning ("gnome_rr_screen_new() failed: %s", error->message);
+		g_error_free (error);
+		return NULL;
+	}
+
+	rr_config = gnome_rr_config_new_current (rr_screen, &error);
+	if (rr_screen == NULL) {
+		g_warning ("gnome_rr_config_new_current() failed: %s", error->message);
+		g_error_free (error);
+		g_object_unref (rr_screen);
+		return NULL;
+	}
+
+	rr_output_infos = gnome_rr_config_get_outputs (rr_config);
+
+	for (i = 0; rr_output_infos[i] != NULL; i++) {
+		GnomeRROutputInfo *info;
+		int x, y, w, h;
+
+		info = rr_output_infos[i];
+
+		if (!gnome_rr_output_info_is_active (info))
+			continue;
+
+		gnome_rr_output_info_get_geometry (info, &x, &y, &w, &h);
+		if (monitor == gdk_screen_get_monitor_at_point (screen, x, y)) {
+			ret = g_object_ref (info);
+			break;
+		}
+	}
+
+	g_object_unref (rr_config);
+	g_object_unref (rr_screen);
+
+	if (ret == NULL)
+		g_warning ("No output found for monitor %d.", monitor);
+
+	return ret;
+}
+
 static void
 set_display_by_output (GsdWacomDevice    *device,
                        GnomeRROutputInfo *rr_output_info)
@@ -617,6 +672,21 @@ set_display_by_output (GsdWacomDevice    *device,
 	g_free (o_serial);
 }
 
+
+void
+gsd_wacom_device_set_display (GsdWacomDevice *device,
+                              int             monitor)
+{
+	GnomeRROutputInfo *output;
+
+        g_return_if_fail (GSD_IS_WACOM_DEVICE (device));
+        g_return_if_fail (monitor >= 0);
+
+	output = find_output_by_monitor (gdk_screen_get_default (), monitor);
+	if (output != NULL)
+		set_display_by_output (device, output);
+}
+
 static GnomeRROutputInfo*
 find_output (GsdWacomDevice *device)
 {
@@ -674,13 +744,15 @@ calculate_transformation_matrix (const GdkRectangle mapped, const GdkRectangle d
 	return;
 }
 
-gint
+int
 gsd_wacom_device_get_display_monitor (GsdWacomDevice *device)
 {
 	gint area[4];
 	gboolean is_active;
 	GnomeRROutputInfo *rr_output_info;
 
+        g_return_val_if_fail (GSD_IS_WACOM_DEVICE (device), -1);
+
 	rr_output_info = find_output(device);
 	if (rr_output_info == NULL)
 		return -1;
@@ -942,16 +1014,16 @@ gsd_wacom_device_add_buttons (GsdWacomDevice *device,
 
 	ret = NULL;
 
-	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_LEFT, _("Left Button #%d"), "left-button");
+	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_LEFT, _("Left Button #%d"), "button");
 	if (l)
 		ret = l;
-	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_RIGHT, _("Right Button #%d"), "right-button");
+	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_RIGHT, _("Right Button #%d"), "button");
 	if (l)
 		ret = g_list_concat (ret, l);
-	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_TOP, _("Top Button #%d"), "top-button");
+	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_TOP, _("Top Button #%d"), "button");
 	if (l)
 		ret = g_list_concat (ret, l);
-	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_BOTTOM, _("Bottom Button #%d"), "bottom-button");
+	l = gsd_wacom_device_add_buttons_dir (wacom_device, settings_path, WACOM_BUTTON_POSITION_BOTTOM, _("Bottom Button #%d"), "button");
 	if (l)
 		ret = g_list_concat (ret, l);
 
@@ -1420,6 +1492,80 @@ gsd_wacom_device_get_buttons (GsdWacomDevice *device)
 	return g_list_copy (device->priv->buttons);
 }
 
+static GsdWacomTabletButton *
+find_button_with_id (GsdWacomDevice *device,
+		     const char     *id)
+{
+	GList *l;
+
+	for (l = device->priv->buttons; l != NULL; l = l->next) {
+		GsdWacomTabletButton *button = l->data;
+
+		if (g_strcmp0 (button->id, id) == 0)
+			return button;
+	}
+	return NULL;
+}
+
+GsdWacomTabletButton *
+gsd_wacom_device_get_button (GsdWacomDevice   *device,
+			     int               button,
+			     GtkDirectionType *dir)
+{
+	if (button <= 26) {
+		char *id;
+		GsdWacomTabletButton *ret;
+		int physical_button;
+
+		/* mouse_button = physical_button < 4 ? physical_button : physical_button + 4 */
+		if (button > 4)
+			physical_button = button - 4;
+		else
+			physical_button = button;
+
+		id = g_strdup_printf ("button%c", 'A' + physical_button - 1);
+		ret = find_button_with_id (device, id);
+		g_free (id);
+
+		return ret;
+	}
+
+	switch (button) {
+	case 90:
+	case 92:
+	case 94:
+	case 96:
+		*dir = GTK_DIR_UP;
+		break;
+	case 91:
+	case 93:
+	case 95:
+	case 97:
+		*dir = GTK_DIR_DOWN;
+		break;
+	default:
+		;;
+	}
+
+	/* FIXME handle the mode */
+	switch (button) {
+	case 90:
+	case 91:
+		return find_button_with_id (device, "left-ring-mode-1");
+	case 92:
+	case 93:
+		return find_button_with_id (device, "right-ring-mode-1");
+	case 94:
+	case 95:
+		return find_button_with_id (device, "left-strip-mode-1");
+	case 96:
+	case 97:
+		return find_button_with_id (device, "right-strip-mode-1");
+	default:
+		return NULL;
+	}
+}
+
 GsdWacomDevice *
 gsd_wacom_device_create_fake (GsdWacomDeviceType  type,
 			      const char         *name,
diff --git a/panels/wacom/gsd-wacom-device.h b/panels/wacom/gsd-wacom-device.h
index da81909..ce2d40a 100644
--- a/panels/wacom/gsd-wacom-device.h
+++ b/panels/wacom/gsd-wacom-device.h
@@ -96,6 +96,8 @@ typedef enum {
 	WACOM_TABLET_BUTTON_TYPE_HARDCODED
 } GsdWacomTabletButtonType;
 
+#define MAX_GROUP_ID 4
+
 typedef struct
 {
 	char                     *name;
@@ -121,6 +123,8 @@ typedef enum {
 
 GType gsd_wacom_device_get_type     (void);
 
+void     gsd_wacom_device_set_display         (GsdWacomDevice    *device,
+                                               int                monitor);
 gint     gsd_wacom_device_get_display_monitor (GsdWacomDevice *device);
 gboolean gsd_wacom_device_get_display_matrix  (GsdWacomDevice *device,
                                                float           matrix[NUM_ELEMS_MATRIX]);
@@ -142,6 +146,9 @@ GsdWacomDeviceType gsd_wacom_device_get_device_type (GsdWacomDevice *device);
 gint           * gsd_wacom_device_get_area          (GsdWacomDevice *device);
 const char     * gsd_wacom_device_type_to_string    (GsdWacomDeviceType type);
 GList          * gsd_wacom_device_get_buttons       (GsdWacomDevice *device);
+GsdWacomTabletButton *gsd_wacom_device_get_button   (GsdWacomDevice   *device,
+						     int               button,
+						     GtkDirectionType *dir);
 
 /* Helper and debug functions */
 GsdWacomDevice * gsd_wacom_device_create_fake (GsdWacomDeviceType  type,



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