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

Bug#692599: marked as done (unblock: gnome-control-center/1:3.4.2+git20121016.29d7c0-1)



Your message dated Wed, 07 Nov 2012 19:56:39 +0000
with message-id <1352318199.13423.2.camel@jacala.jungle.funky-badger.org>
and subject line Re: Bug#692599: unblock: gnome-control-center/1:3.4.2+git20121016.29d7c0-1
has caused the Debian Bug report #692599,
regarding unblock: gnome-control-center/1:3.4.2+git20121016.29d7c0-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
692599: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692599
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Hi,

please unblock gnome-control-center. The new version features all 
translations and bugfixes that have been sitting in the stable 3.4 
branch of the upstream repository.

Mostly, the current version is broken for many Wacom tablets.


gnome-control-center (1:3.4.2+git20121016.29d7c0-1) unstable; urgency=low

  [ Josselin Mouette ]
  * Add missing epoch on libxi build-dependency.

  [ Michael Biebl ]
  * Rebuild with xz compression. Closes: #687279

  [ Josselin Mouette ]
  * New upstream git snapshot from the stable branch (which will not be 
    released despite the amount of useful bug fixes).
    + Features loads of wacom-related fixes. Closes: #689868.
    + Escape wallpaper filename before display.
    + Update for a changed DBus interface in g-s-d.
    + Fix the NetworkManager Bluetooth plugin.
  * Bump build-dependency on libwacom according to upstream. (This is 
    not a real requirement, it was put here to force some bugfixes.)
  * 11_revert_printer_class.patch: revert an unfortunate change that 
    leads to an undefined symbol.


Upstream short log follows.

Author: Andreas Nesdal <gedemiti@gmail.com>

    Updated Norwegian Nynorsk translation (sync with Ubuntu)

Author: Bastien Nocera <hadess@hadess.net>

    bluetooth: Don't use g_clear_pointer()

Author: Cyrus Lien <cyrus.lien@canonical.com>

    display: Do not add preferred mode to drop down in clone mode.

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Fix warning with libwacom 0.6

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Bump minimum libwacom req to 0.6

Author: Michael Terry <michael.terry@canonical.com>

    power: Use GCancellable better, to avoid a crash

Author: Bastien Nocera <hadess@hadess.net>

    bluetooth: Don't break the custom widgets on connect

Author: Frédéric Péters <fpeters@0d.be>

    printers: remove blank class_finalize function
    (cherry picked from commit e87c564cdbf7810e0c15b40ed680d9c8bc6734b5)

Author: Ray Strode <rstrode@redhat.com>

    online-accounts: set up finalize handler at class init time

Author: Debarshi Ray <debarshir@gnome.org>

    online-accounts: Don't show spurious "No online accounts configured"

Author: Matthias Clasen <mclasen@redhat.com>

    screen: Fix the build

Author: Shankar Prasad <svenkate@redhat.com>

    Updated kn translation

Author: Shankar Prasad <svenkate@redhat.com>

    Updated kn translation

Author: Reşat SABIQ <tilde.birlik@gmail.com>

    Minor update for Crimean Tatar/Turkish translation

Author: Reşat SABIQ <tilde.birlik@gmail.com>

    Updated Crimean Tatar (Crimean Turkish) translation

Author: Shankar Prasad <svenkate@redhat.com>

    Updated kn translation

Author: Shankar Prasad <svenkate@redhat.com>

    Updated kn translation

Author: Bastien Nocera <hadess@hadess.net>

    shell: Don't handle shortcuts with excess modifiers

Author: Bastien Nocera <hadess@hadess.net>

    shell: Fix not being able to assign Ctrl+Q to a shortcut

Author: Giovanni Campagna <gcampagna@src.gnome.org>

    screen: Fix for gnome-settings-daemon changes

Author: Olivier Fourdan <ofourdan@redhat.com>

    wacom: Cancel calibration if window loses focus

Author: Jon McCann <jmccann@redhat.com>

    background: Escape wallpaper filename before display

Author: Nilamdyuti Goswami <nilamdyuti@gmail.com>

    Assamese translation reviewed

Author: Nilamdyuti Goswami <nilamdyuti@gmail.com>

    Assamese translation reviewed

Author: Stef Walter <stefw@gnome.org>

    user-accounts: UmAccountDialog shouldn't be valid when shown

Author: Stef Walter <stefw@gnome.org>

    user-accounts: Fix memory leak of GtkBuilder in accounts dialog

Author: Marek Černocký <marek@manet.cz>

    Updated Czech translation

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Update from gnome-settings-daemon

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Fix crasher using link to display panel

Author: Peter Hutterer <peter.hutterer@who-t.net>

    wacom: update the UI if a new tool comes in

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Destroy button mapping dialogue on unplug

Author: Bastien Nocera <hadess@hadess.net>

    wacom: Hide "Map Buttons" button if no pad is found

Author: Peter Hutterer <peter.hutterer@who-t.net>

    wacom: Make "Calibrate" button insensitive if there is no screen match


Attached, you will find the debdiff for code changes.

unblock gnome-control-center/1:3.4.2+git20121016.29d7c0-1

Thanks,
-- 
 .''`.      Josselin Mouette
: :' :
`. `'
  `-
--- gnome-control-center-3.4.2/configure.ac	2012-05-15 12:19:58.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/configure.ac	2012-11-07 18:52:59.000000000 +0100
@@ -78,7 +78,7 @@
 LIBNOTIFY_REQUIRED_VERSION=0.7.3
 GNOME_DESKTOP_REQUIRED_VERSION=3.1.91
 SCHEMAS_REQUIRED_VERSION=3.3.0
-LIBWACOM_REQUIRED_VERSION=0.3
+LIBWACOM_REQUIRED_VERSION=0.6
 
 COMMON_MODULES="gtk+-3.0 >= $GTK_REQUIRED_VERSION
  glib-2.0 >= $GLIB_REQUIRED_VERSION
--- gnome-control-center-3.4.2/debian/control.in	2012-05-25 07:36:24.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/debian/control.in	2012-11-07 19:52:05.000000000 +0100
@@ -41,8 +41,8 @@
                libpulse-dev,
                libsocialweb-client-dev,
                libupower-glib-dev (>= 0.9.1),
-               libwacom-dev (>= 0.3) [linux-any],
-               libxi-dev (>= 1.2),
+               libwacom-dev (>= 0.6) [linux-any],
+               libxi-dev (>= 2:1.2),
                libx11-dev,
                libxft-dev (>= 2.1.2),
                libxklavier-dev (>= 5.1),
--- gnome-control-center-3.4.2/debian/patches/11_revert_printer_class.patch	1970-01-01 01:00:00.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/debian/patches/11_revert_printer_class.patch	2012-11-07 19:52:05.000000000 +0100
@@ -0,0 +1,17 @@
+Revert upstream patch a39b9219652c14bb7a39a8639d03ab1462d311c5
+Index: gnome-control-center-3.4.2+git20121016.29d7c0/panels/printers/cc-printers-panel.c
+===================================================================
+--- gnome-control-center-3.4.2+git20121016.29d7c0.orig/panels/printers/cc-printers-panel.c	2012-11-07 18:52:59.000000000 +0100
++++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/printers/cc-printers-panel.c	2012-11-07 19:25:59.292279172 +0100
+@@ -216,6 +216,11 @@ cc_printers_panel_class_init (CcPrinters
+ }
+ 
+ static void
++cc_printers_panel_class_finalize (CcPrintersPanelClass *klass)
++{
++}
++
++static void
+ on_cups_notification (GDBusConnection *connection,
+                       const char      *sender_name,
+                       const char      *object_path,
--- gnome-control-center-3.4.2/debian/patches/series	2012-05-25 07:36:24.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/debian/patches/series	2012-11-07 19:52:05.000000000 +0100
@@ -2,5 +2,6 @@
 02_no_assert_on_null_streams.patch
 06_handle_passwd_with_ldap.patch
 10_optional_wacom_support.patch
+11_revert_printer_class.patch
 90_force_fallback.patch
 revert_git_datetime_port.patch
--- gnome-control-center-3.4.2/panels/background/cc-background-panel.c	2012-03-05 15:04:55.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/background/cc-background-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -340,8 +340,12 @@
   if (priv->current_background)
     {
       GdkColor pcolor, scolor;
+      char *escaped;
+
+      escaped = g_markup_escape_text (cc_background_item_get_name (priv->current_background), -1);
+      markup = g_strdup_printf ("<b>%s</b>", escaped);
+      g_free (escaped);
 
-      markup = g_strdup_printf ("<b>%s</b>", cc_background_item_get_name (priv->current_background));
       gtk_label_set_markup (GTK_LABEL (WID ("background-label")), markup);
       g_free (markup);
 
--- gnome-control-center-3.4.2/panels/background/gdesktop-enums-types.c	2012-05-15 12:20:49.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/background/gdesktop-enums-types.c	2012-11-07 18:58:36.000000000 +0100
@@ -5,7 +5,7 @@
 #include "gdesktop-enums-types.h"
 #include "cc-background-item.h"
 
-/* enumerations from "/home/hadess/Projects/gnome-install/include/gsettings-desktop-schemas/gdesktop-enums.h" */
+/* enumerations from "/usr/include/gsettings-desktop-schemas/gdesktop-enums.h" */
 GType
 g_desktop_proxy_mode_get_type (void)
 {
--- gnome-control-center-3.4.2/panels/background/gdesktop-enums-types.h	2012-02-07 19:43:20.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/background/gdesktop-enums-types.h	2012-11-07 18:58:36.000000000 +0100
@@ -7,7 +7,7 @@
 #include <glib-object.h>
 
 G_BEGIN_DECLS
-/* enumerations from "/home/hadess/Projects/gnome-install/include/gsettings-desktop-schemas/gdesktop-enums.h" */
+/* enumerations from "/usr/include/gsettings-desktop-schemas/gdesktop-enums.h" */
 GType g_desktop_proxy_mode_get_type (void) G_GNUC_CONST;
 #define G_DESKTOP_TYPE_DESKTOP_PROXY_MODE (g_desktop_proxy_mode_get_type())
 GType g_desktop_toolbar_style_get_type (void) G_GNUC_CONST;
--- gnome-control-center-3.4.2/panels/bluetooth/cc-bluetooth-panel.c	2012-03-05 15:04:55.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/bluetooth/cc-bluetooth-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -50,6 +50,7 @@
 struct CcBluetoothPanelPrivate {
 	GtkBuilder          *builder;
 	GtkWidget           *chooser;
+	char                *selected_bdaddr;
 	BluetoothClient     *client;
 	BluetoothKillswitch *killswitch;
 	gboolean             debug;
@@ -103,6 +104,10 @@
 		g_object_unref (self->priv->client);
 		self->priv->client = NULL;
 	}
+	if (self->priv->selected_bdaddr) {
+		g_free (self->priv->selected_bdaddr);
+		self->priv->selected_bdaddr = NULL;
+	}
 
 	G_OBJECT_CLASS (cc_bluetooth_panel_parent_class)->finalize (object);
 }
@@ -251,10 +256,12 @@
 	gtk_widget_hide (WID ("browse_box"));
 	gtk_widget_hide (WID ("send_box"));
 
+	bdaddr = bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (self->priv->chooser));
+
 	/* Remove the extra setup widgets */
-	remove_extra_setup_widgets (self);
+	if (g_strcmp0 (self->priv->selected_bdaddr, bdaddr) != 0)
+		remove_extra_setup_widgets (self);
 
-	bdaddr = bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (self->priv->chooser));
 	if (bdaddr == NULL) {
 		gtk_widget_set_sensitive (WID ("properties_vbox"), FALSE);
 		gtk_switch_set_active (button, FALSE);
@@ -325,15 +332,18 @@
 		}
 
 		/* Extra widgets */
-		add_extra_setup_widgets (self, bdaddr);
+		if (g_strcmp0 (self->priv->selected_bdaddr, bdaddr) != 0)
+			add_extra_setup_widgets (self, bdaddr);
 
 		gtk_label_set_text (GTK_LABEL (WID ("address_label")), bdaddr);
-		g_free (bdaddr);
 
 		gtk_widget_set_sensitive (WID ("button_delete"), TRUE);
 		set_notebook_page (self, NOTEBOOK_PAGE_PROPS);
 	}
 
+	g_free (self->priv->selected_bdaddr);
+	self->priv->selected_bdaddr = bdaddr;
+
 	g_signal_handlers_unblock_by_func (button, switch_connected_active_changed, self);
 }
 
--- gnome-control-center-3.4.2/panels/datetime/timedated.c	2012-03-05 21:09:53.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/datetime/timedated.c	2012-11-07 18:58:41.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Generated by gdbus-codegen 2.31.19. DO NOT EDIT.
+ * Generated by gdbus-codegen 2.32.4. DO NOT EDIT.
  *
  * The license of this code is the same as for the source it was derived from.
  */
@@ -10,6 +10,7 @@
 
 #include "timedated.h"
 
+#include <string.h>
 #ifdef G_OS_UNIX
 #  include <gio/gunixfdlist.h>
 #endif
@@ -124,7 +125,12 @@
         ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
         break;
       case G_TYPE_DOUBLE:
-        ret = (g_value_get_double (a) == g_value_get_double (b));
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
         break;
       case G_TYPE_STRING:
         ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
--- gnome-control-center-3.4.2/panels/datetime/timedated.h	2012-03-05 21:09:53.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/datetime/timedated.h	2012-11-07 18:58:41.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Generated by gdbus-codegen 2.31.19. DO NOT EDIT.
+ * Generated by gdbus-codegen 2.32.4. DO NOT EDIT.
  *
  * The license of this code is the same as for the source it was derived from.
  */
--- gnome-control-center-3.4.2/panels/display/cc-display-panel.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/display/cc-display-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -804,8 +804,10 @@
   for (i = 0; modes[i] != NULL; ++i)
     add_mode (self, modes[i], output_width, output_height, preferred_id);
 
-  /* And force the preferred mode in the drop-down */
-  add_mode (self, mode, output_width, output_height, preferred_id);
+  /* And force the preferred mode in the drop-down (when not in clone mode)
+   * https://bugzilla.gnome.org/show_bug.cgi?id=680969 */
+  if (!gnome_rr_config_get_clone (self->priv->current_configuration))
+   add_mode (self, mode, output_width, output_height, preferred_id);
 
   current = make_resolution_string (output_width, output_height);
 
--- gnome-control-center-3.4.2/panels/display/foo-marshal.c	2011-08-25 19:54:08.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/display/foo-marshal.c	2012-11-07 18:58:37.000000000 +0100
@@ -8,7 +8,7 @@
 
 #ifdef G_ENABLE_DEBUG
 #define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_char(v)     g_value_get_schar (v)
 #define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
 #define g_marshal_value_peek_int(v)      g_value_get_int (v)
 #define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
--- gnome-control-center-3.4.2/panels/online-accounts/cc-online-accounts-panel.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/online-accounts/cc-online-accounts-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -57,6 +57,14 @@
   CcPanelClass parent_class;
 };
 
+static void on_model_row_deleted (GtkTreeModel *tree_model,
+                                  GtkTreePath  *path,
+                                  gpointer      user_data);
+static void on_model_row_inserted (GtkTreeModel *tree_model,
+                                   GtkTreePath  *path,
+                                   GtkTreeIter  *iter,
+                                   gpointer      user_data);
+
 static void on_tree_view_selection_changed (GtkTreeSelection *selection,
                                             gpointer          user_data);
 
@@ -80,7 +88,12 @@
                                         G_CALLBACK (on_tree_view_selection_changed),
                                         panel);
   if (panel->accounts_model != NULL)
-    g_object_unref (panel->accounts_model);
+    {
+      g_signal_handlers_disconnect_by_func (panel->accounts_model, G_CALLBACK (on_model_row_deleted), panel);
+      g_signal_handlers_disconnect_by_func (panel->accounts_model, G_CALLBACK (on_model_row_inserted), panel);
+      g_clear_object (&panel->accounts_model);
+    }
+
   if (panel->client != NULL)
     {
       g_signal_handlers_disconnect_by_func (panel->client,
@@ -159,6 +172,8 @@
 
   panel->accounts_model = goa_panel_accounts_model_new (panel->client);
   gtk_tree_view_set_model (GTK_TREE_VIEW (panel->accounts_treeview), GTK_TREE_MODEL (panel->accounts_model));
+  g_signal_connect (panel->accounts_model, "row-deleted", G_CALLBACK (on_model_row_deleted), panel);
+  g_signal_connect (panel->accounts_model, "row-inserted", G_CALLBACK (on_model_row_inserted), panel);
 
   column = gtk_tree_view_column_new ();
   gtk_tree_view_append_column (GTK_TREE_VIEW (panel->accounts_treeview), column);
@@ -205,15 +220,13 @@
 static void
 goa_panel_class_init (GoaPanelClass *klass)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  object_class->finalize = goa_panel_finalize;
 }
 
 static void
 goa_panel_class_finalize (GoaPanelClass *klass)
 {
-  GObjectClass *gobject_class;
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  gobject_class->finalize = goa_panel_finalize;
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
@@ -425,6 +438,58 @@
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
+
+static void
+on_model_row_changed (GtkTreeModel *tree_model,
+                      GtkTreePath  *path,
+                      GtkTreeIter  *iter,
+                      gpointer      user_data)
+{
+  GtkTreeSelection *selection = GTK_TREE_SELECTION (user_data);
+
+  gtk_tree_selection_select_iter (selection, iter);
+  g_signal_handlers_disconnect_by_func (tree_model, G_CALLBACK (on_model_row_changed), user_data);
+}
+
+static void
+on_model_row_deleted (GtkTreeModel *tree_model,
+                      GtkTreePath  *path,
+                      gpointer      user_data)
+{
+  GoaPanel *panel = GOA_PANEL (user_data);
+  GtkTreeIter iter;
+  GtkTreeSelection *selection;
+
+  if (!gtk_tree_model_get_iter (tree_model, &iter, path))
+    {
+      if (!gtk_tree_path_prev (path))
+        return;
+    }
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (panel->accounts_treeview));
+  gtk_tree_selection_select_path (selection, path);
+}
+
+static void
+on_model_row_inserted (GtkTreeModel *tree_model,
+                       GtkTreePath  *path,
+                       GtkTreeIter  *iter,
+                       gpointer      user_data)
+{
+  GoaPanel *panel = GOA_PANEL (user_data);
+  GtkTreeSelection *selection;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (panel->accounts_treeview));
+  if (gtk_tree_selection_get_selected (selection, NULL, NULL))
+    return;
+
+  /* An empty row has been inserted and is going to be filled in, so
+   * we expect selection to stay valid.
+   */
+  g_signal_connect (tree_model, "row-changed", G_CALLBACK (on_model_row_changed), selection);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
 
 static void
 on_toolbar_add_button_clicked (GtkToolButton *button,
--- gnome-control-center-3.4.2/panels/power/cc-power-panel.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/power/cc-power-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -92,6 +92,7 @@
     }
   if (priv->cancellable != NULL)
     {
+      g_cancellable_cancel (priv->cancellable);
       g_object_unref (priv->cancellable);
       priv->cancellable = NULL;
     }
@@ -115,14 +116,6 @@
 }
 
 static void
-cc_power_panel_finalize (GObject *object)
-{
-  CcPowerPanelPrivate *priv = CC_POWER_PANEL (object)->priv;
-  g_cancellable_cancel (priv->cancellable);
-  G_OBJECT_CLASS (cc_power_panel_parent_class)->finalize (object);
-}
-
-static void
 on_lock_settings_changed (GSettings     *settings,
                           const char    *key,
                           CcPowerPanel *panel)
@@ -139,7 +132,6 @@
   object_class->get_property = cc_power_panel_get_property;
   object_class->set_property = cc_power_panel_set_property;
   object_class->dispose = cc_power_panel_dispose;
-  object_class->finalize = cc_power_panel_finalize;
 }
 
 static void
@@ -636,8 +628,8 @@
 static void
 get_devices_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
-  CcPowerPanel *panel = CC_POWER_PANEL (user_data);
-  CcPowerPanelPrivate *priv = panel->priv;
+  CcPowerPanel *panel;
+  CcPowerPanelPrivate *priv;
   gboolean got_primary = FALSE;
   gboolean ups_as_primary_device = FALSE;
   GError *error = NULL;
@@ -653,6 +645,16 @@
   UpDeviceKind kind;
   UpDeviceState state;
 
+  result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
+  if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+    {
+      g_error_free (error);
+      return; /* Must exit before accessing freed memory */
+    }
+
+  panel = CC_POWER_PANEL (user_data);
+  priv = panel->priv;
+
   /* empty the secondary box */
   widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
                                                "grid_secondary"));
@@ -669,7 +671,6 @@
                                                "box_secondary"));
   gtk_widget_hide (widget);
 
-  result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
   if (result == NULL)
     {
       g_printerr ("Error getting devices: %s\n", error->message);
@@ -768,16 +769,22 @@
 got_power_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
   GError *error = NULL;
-  CcPowerPanelPrivate *priv = CC_POWER_PANEL (user_data)->priv;
+  GDBusProxy *proxy;
+  CcPowerPanelPrivate *priv;
 
-  priv->proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
-  if (priv->proxy == NULL)
+  proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+  if (proxy == NULL)
     {
       g_printerr ("Error creating proxy: %s\n", error->message);
       g_error_free (error);
       return;
     }
 
+  /* Access user_data after checking for error because user_data might be
+     disposed already. */
+  priv = CC_POWER_PANEL (user_data)->priv;
+  priv->proxy = proxy;
+
   /* we want to change the primary device changes */
   g_signal_connect (priv->proxy,
                     "g-properties-changed",
--- gnome-control-center-3.4.2/panels/printers/cc-printers-panel.c	2012-04-10 17:01:29.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/printers/cc-printers-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -216,11 +216,6 @@
 }
 
 static void
-cc_printers_panel_class_finalize (CcPrintersPanelClass *klass)
-{
-}
-
-static void
 on_cups_notification (GDBusConnection *connection,
                       const char      *sender_name,
                       const char      *object_path,
--- gnome-control-center-3.4.2/panels/screen/cc-screen-panel.c	2011-10-07 16:22:47.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/screen/cc-screen-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -169,33 +169,6 @@
 }
 
 static void
-on_signal (GDBusProxy *proxy,
-           gchar      *sender_name,
-           gchar      *signal_name,
-           GVariant   *parameters,
-           gpointer    user_data)
-{
-  CcScreenPanel *self = CC_SCREEN_PANEL (user_data);
-
-  if (g_strcmp0 (signal_name, "BrightnessChanged") == 0)
-    {
-      guint brightness;
-      GtkRange *range;
-
-      /* changed, but ignoring */
-      if (self->priv->setting_brightness)
-        return;
-
-      /* update the bar */
-      g_variant_get (parameters,
-                     "(u)",
-                     &brightness);
-      range = GTK_RANGE (WID ("screen_brightness_hscale"));
-      gtk_range_set_value (range, brightness);
-    }
-}
-
-static void
 set_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
   GError *error = NULL;
@@ -276,6 +249,33 @@
 }
 
 static void
+on_signal (GDBusProxy *proxy,
+           gchar      *sender_name,
+           gchar      *signal_name,
+           GVariant   *parameters,
+           gpointer    user_data)
+{
+  CcScreenPanel *self = CC_SCREEN_PANEL (user_data);
+
+  if (g_strcmp0 (signal_name, "Changed") == 0)
+    {
+      /* changed, but ignoring */
+      if (self->priv->setting_brightness)
+        return;
+
+      /* retrieve the value again from g-s-d */
+      g_dbus_proxy_call (self->priv->proxy,
+                         "GetPercentage",
+                         NULL,
+                         G_DBUS_CALL_FLAGS_NONE,
+                         200, /* we don't want to randomly move the bar */
+                         self->priv->cancellable,
+                         get_brightness_cb,
+                         user_data);
+    }
+}
+
+static void
 got_power_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
   GError *error = NULL;
--- gnome-control-center-3.4.2/panels/user-accounts/um-account-dialog.c	2011-09-01 12:01:01.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/user-accounts/um-account-dialog.c	2012-11-07 18:52:59.000000000 +0100
@@ -220,6 +220,7 @@
         widget = (GtkWidget *) gtk_builder_get_object (builder, "account-type-combo");
         um->account_type_combo = widget;
 
+        g_object_unref (builder);
         return um;
 }
 
@@ -248,7 +249,8 @@
         gtk_window_present (GTK_WINDOW (um->dialog));
         gtk_widget_grab_focus (um->name_entry);
 
-        um->valid_name = um->valid_username = TRUE;
+        um->valid_name = um->valid_username = FALSE;
+        gtk_widget_set_sensitive (um->ok_button, um->valid_name && um->valid_username);
 
         um->user_created_callback = user_created_callback;
         um->user_created_data = user_created_data;
--- gnome-control-center-3.4.2/panels/wacom/calibrator/gui_gtk.c	2012-03-05 15:04:55.000000000 +0100
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/calibrator/gui_gtk.c	2012-11-07 18:52:59.000000000 +0100
@@ -301,6 +301,17 @@
 }
 
 static gboolean
+on_focus_out_event (GtkWidget *widget,
+		    GdkEvent  *event,
+		    CalibArea *area)
+{
+    /* If the calibrator window looses focus, simply bail out... */
+    on_delete_event (widget, NULL, area);
+
+    return FALSE;
+}
+
+static gboolean
 on_timer_signal(CalibArea *area)
 {
     GdkWindow *win;
@@ -388,6 +399,7 @@
 	gtk_widget_add_events (calib_area->window, GDK_KEY_RELEASE_MASK | GDK_BUTTON_PRESS_MASK);
 	gtk_widget_set_can_focus (calib_area->window, TRUE);
 	gtk_window_fullscreen (GTK_WINDOW (calib_area->window));
+	gtk_window_set_keep_above (GTK_WINDOW (calib_area->window), TRUE);
 
 	/* Connect callbacks */
 	g_signal_connect (calib_area->window, "draw",
@@ -398,6 +410,8 @@
 			  G_CALLBACK(on_key_release_event), calib_area);
 	g_signal_connect (calib_area->window, "delete-event",
 			  G_CALLBACK(on_delete_event), calib_area);
+	g_signal_connect (calib_area->window, "focus-out-event",
+			  G_CALLBACK(on_focus_out_event), calib_area);
 
 	/* Setup timer for animation */
 	calib_area->anim_id = g_timeout_add(TIME_STEP, (GSourceFunc)on_timer_signal, calib_area);
--- gnome-control-center-3.4.2/panels/wacom/cc-wacom-page.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/cc-wacom-page.c	2012-11-07 18:52:59.000000000 +0100
@@ -69,6 +69,7 @@
 
 	/* Button mapping */
 	GtkBuilder     *mapping_builder;
+	GtkWidget      *button_map;
 
 	/* Display mapping */
 	GtkWidget      *mapping;
@@ -95,6 +96,32 @@
 	MODE_RELATIVE, /* stylus + eraser relative */
 };
 
+/* Different types of layout for the tablet config */
+enum {
+	LAYOUT_NORMAL,        /* tracking mode, button mapping */
+	LAYOUT_REVERSIBLE,    /* tracking mode, button mapping, left-hand orientation */
+	LAYOUT_SCREEN        /* button mapping, calibration, display resolution */
+};
+
+static void
+update_tablet_ui (CcWacomPage *page,
+		  int          layout);
+
+static int
+get_layout_type (GsdWacomDevice *device)
+{
+	int layout;
+
+	if (gsd_wacom_device_is_screen_tablet (device))
+		layout = LAYOUT_SCREEN;
+	else if (gsd_wacom_device_reversible (device))
+		layout = LAYOUT_REVERSIBLE;
+	else
+		layout = LAYOUT_NORMAL;
+
+	return layout;
+}
+
 static void
 set_calibration (gint      *cal,
                  gsize      ncal,
@@ -653,6 +680,9 @@
 			  G_CALLBACK (button_mapping_dialog_closed), page);
 
 	gtk_widget_show (dialog);
+
+	priv->button_map = dialog;
+	g_object_add_weak_pointer (G_OBJECT (dialog), (gpointer *) &priv->button_map);
 }
 
 static void
@@ -661,11 +691,14 @@
 			       CcWacomPage *page)
 {
 	CcWacomPagePrivate *priv;
+	int layout;
 
 	priv = page->priv;
 	gtk_widget_destroy (priv->dialog);
 	priv->dialog = NULL;
 	priv->mapping = NULL;
+	layout = get_layout_type (priv->stylus);
+	update_tablet_ui (page, layout);
 }
 
 static void
@@ -806,11 +839,17 @@
 		priv->area = NULL;
 	}
 
+	if (priv->button_map) {
+		gtk_widget_destroy (priv->button_map);
+		priv->button_map = NULL;
+	}
+
 	if (priv->builder) {
 		g_object_unref (priv->builder);
 		priv->builder = NULL;
 	}
 
+	priv->panel = NULL;
 
 	G_OBJECT_CLASS (cc_wacom_page_parent_class)->dispose (object);
 }
@@ -981,13 +1020,6 @@
 		   gsd_wacom_stylus_get_name (stylus));
 }
 
-/* Different types of layout for the tablet config */
-enum {
-	LAYOUT_NORMAL,        /* tracking mode, button mapping */
-	LAYOUT_REVERSIBLE,    /* tracking mode, button mapping, left-hand orientation */
-	LAYOUT_SCREEN        /* button mapping, calibration, display resolution */
-};
-
 static void
 remove_left_handed (CcWacomPagePrivate *priv)
 {
@@ -1010,10 +1042,12 @@
 		  int          layout)
 {
 	CcWacomPagePrivate *priv;
+	gboolean has_monitor = FALSE;
 
 	priv = page->priv;
 
-	/* FIXME Handle ->pad being NULL and hide the pad buttons */
+	/* Hide the pad buttons if no pad is present */
+	gtk_widget_set_visible (WID ("map-buttons-button"), priv->pad != NULL);
 
 	switch (layout) {
 	case LAYOUT_NORMAL:
@@ -1031,6 +1065,9 @@
 		gtk_widget_destroy (WID ("display-mapping-button"));
 
 		gtk_widget_show (WID ("button-calibrate"));
+		if (gsd_wacom_device_get_display_monitor (page->priv->stylus) >= 0)
+			has_monitor = TRUE;
+		gtk_widget_set_sensitive (WID ("button-calibrate"), has_monitor);
 		gtk_widget_show (WID ("display-link"));
 
 		gtk_container_child_set (CWID ("main-grid"),
@@ -1045,6 +1082,33 @@
 	}
 }
 
+gboolean
+cc_wacom_page_update_tools (CcWacomPage    *page,
+			    GsdWacomDevice *stylus,
+			    GsdWacomDevice *eraser,
+			    GsdWacomDevice *pad)
+{
+	CcWacomPagePrivate *priv;
+	int layout;
+	gboolean changed;
+
+	/* Type of layout */
+	layout = get_layout_type (stylus);
+
+	priv = page->priv;
+	changed = (priv->stylus != stylus || priv->eraser != eraser || priv->pad != pad);
+	if (!changed)
+		return FALSE;
+
+	priv->stylus = stylus;
+	priv->eraser = eraser;
+	priv->pad = pad;
+
+	update_tablet_ui (CC_WACOM_PAGE (page), layout);
+
+	return TRUE;
+}
+
 GtkWidget *
 cc_wacom_page_new (CcWacomPanel   *panel,
 		   GsdWacomDevice *stylus,
@@ -1053,7 +1117,6 @@
 {
 	CcWacomPage *page;
 	CcWacomPagePrivate *priv;
-	int layout;
 
 	g_return_val_if_fail (GSD_IS_WACOM_DEVICE (stylus), NULL);
 	g_return_val_if_fail (gsd_wacom_device_get_device_type (stylus) == WACOM_TYPE_STYLUS, NULL);
@@ -1068,9 +1131,8 @@
 
 	priv = page->priv;
 	priv->panel = panel;
-	priv->stylus = stylus;
-	priv->eraser = eraser;
-	priv->pad = pad;
+
+	cc_wacom_page_update_tools (page, stylus, eraser, pad);
 
 	/* FIXME move this to construct */
 	priv->wacom_settings  = gsd_wacom_device_get_settings (stylus);
@@ -1079,16 +1141,6 @@
 	/* Tablet name */
 	gtk_label_set_text (GTK_LABEL (WID ("label-tabletmodel")), gsd_wacom_device_get_name (stylus));
 
-	/* Type of layout */
-	if (gsd_wacom_device_is_screen_tablet (stylus))
-		layout = LAYOUT_SCREEN;
-	else if (gsd_wacom_device_reversible (stylus))
-		layout = LAYOUT_REVERSIBLE;
-	else
-		layout = LAYOUT_NORMAL;
-
-	update_tablet_ui (page, layout);
-
 	/* Left-handedness */
 	if (gsd_wacom_device_reversible (stylus))
 		set_left_handed_from_gsettings (page);
--- gnome-control-center-3.4.2/panels/wacom/cc-wacom-page.h	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/cc-wacom-page.h	2012-11-07 18:09:12.000000000 +0100
@@ -74,6 +74,11 @@
 			       GsdWacomDevice *eraser,
 			       GsdWacomDevice *pad);
 
+gboolean cc_wacom_page_update_tools (CcWacomPage    *page,
+				     GsdWacomDevice *stylus,
+				     GsdWacomDevice *eraser,
+				     GsdWacomDevice *pad);
+
 void cc_wacom_page_set_navigation (CcWacomPage *page,
 				   GtkNotebook *notebook,
 				   gboolean     ignore_first_page);
--- gnome-control-center-3.4.2/panels/wacom/cc-wacom-panel.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/cc-wacom-panel.c	2012-11-07 18:52:59.000000000 +0100
@@ -200,12 +200,11 @@
 	tablets = g_hash_table_get_values (ht);
 	for (l = tablets; l; l = l->next) {
 		Tablet *tablet;
+		GtkWidget *page;
 
 		tablet = l->data;
 		if (tablet->stylus == NULL ||
 		    tablet->eraser == NULL) {
-			GtkWidget *page;
-
 			page = g_hash_table_lookup (priv->pages, tablet->name);
 			if (page != NULL) {
 				remove_page (GTK_NOTEBOOK (priv->notebook), page);
@@ -215,9 +214,9 @@
 			}
 			continue;
 		}
-
-		if (g_hash_table_lookup (priv->pages, tablet->name) == NULL) {
-			GtkWidget *page;
+		/* this code is called once the stylus + eraser were set up, but the pad does not exist yet */
+		page = g_hash_table_lookup (priv->pages, tablet->name);
+		if (page == NULL) {
 			page = cc_wacom_page_new (self, tablet->stylus, tablet->eraser, tablet->pad);
 			cc_wacom_page_set_navigation (CC_WACOM_PAGE (page), GTK_NOTEBOOK (priv->notebook), TRUE);
 			gtk_widget_show (page);
@@ -225,6 +224,8 @@
 			g_hash_table_insert (priv->pages, g_strdup (tablet->name), page);
 
 			changed = TRUE;
+		} else {
+			cc_wacom_page_update_tools (CC_WACOM_PAGE (page), tablet->stylus, tablet->eraser, tablet->pad);
 		}
 	}
 	g_list_free (tablets);
@@ -293,6 +294,8 @@
 	CcShell *shell;
 	GError *error = NULL;
 
+	g_return_if_fail (self);
+
 	shell = cc_panel_get_shell (CC_PANEL (self));
 	if (cc_shell_set_active_panel_from_id (shell, panel, NULL, &error) == FALSE)
 	{
--- gnome-control-center-3.4.2/panels/wacom/gsd-input-helper.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/gsd-input-helper.c	2012-11-07 18:52:59.000000000 +0100
@@ -83,6 +83,8 @@
                                xdevice, prop, realtype, realformat,
                                PropModeReplace, data, nitems);
 
+        XFree (data);
+
         if (gdk_error_trap_pop ()) {
                 g_warning ("Error in setting \"%s\" for \"%s\"", property->name, device_name);
                 return FALSE;
@@ -129,7 +131,14 @@
 
         if (XIQueryVersion (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &major, &minor) != Success) {
                 gdk_error_trap_pop_ignored ();
-                return FALSE;
+                /* try for 2.2, maybe gtk has already announced 2.2 support */
+                gdk_error_trap_push ();
+                major = 2;
+                minor = 2;
+                if (XIQueryVersion (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &major, &minor) != Success) {
+                    gdk_error_trap_pop_ignored ();
+                    return FALSE;
+                }
         }
         gdk_error_trap_pop_ignored ();
 
@@ -328,14 +337,16 @@
         if (!prop)
                 return -1;
 
+        data = NULL;
+
         gdk_error_trap_push ();
 
-        if (!XIGetProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
+        if (XIGetProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
                             deviceid, prop, 0, 1000, False,
                             AnyPropertyType, &act_type, &act_format,
-                            &nitems, &bytes_after, &data) == Success) {
+                            &nitems, &bytes_after, &data) != Success) {
                 gdk_error_trap_pop_ignored ();
-                return -1;
+                goto out;
         }
 
         if (gdk_error_trap_pop ())
@@ -366,10 +377,11 @@
 	/* That means that no tool was set down yet */
 	if (id == STYLUS_DEVICE_ID ||
 	    id == ERASER_DEVICE_ID)
-		return 0x0;
+		id = 0x0;
 
 out:
-        XFree (data);
+        if (data != NULL)
+                XFree (data);
         return id;
 }
 
@@ -433,7 +445,7 @@
 {
         GSettings *settings;
         char *cmd;
-        char *argv[5];
+        char *argv[7];
         int exit_status;
         gboolean rc;
         int id;
@@ -451,10 +463,12 @@
         g_object_get (device, "device-id", &id, NULL);
 
         argv[0] = cmd;
-        argv[1] = g_strdup_printf ("-t %s", custom_command_to_string (command));
-        argv[2] = g_strdup_printf ("-i %d", id);
-        argv[3] = g_strdup_printf ("%s", gdk_device_get_name (device));
-        argv[4] = NULL;
+        argv[1] = "-t";
+        argv[2] = (char *) custom_command_to_string (command);
+        argv[3] = "-i";
+        argv[4] = g_strdup_printf ("%d", id);
+        argv[5] = g_strdup_printf ("%s", gdk_device_get_name (device));
+        argv[6] = NULL;
 
         rc = g_spawn_sync (g_get_home_dir (), argv, NULL, G_SPAWN_SEARCH_PATH,
                            NULL, NULL, NULL, NULL, &exit_status, NULL);
@@ -463,8 +477,8 @@
                 g_warning ("Couldn't execute command '%s', verify that this is a valid command.", cmd);
 
         g_free (argv[0]);
-        g_free (argv[1]);
-        g_free (argv[2]);
+        g_free (argv[4]);
+        g_free (argv[5]);
 
         return (exit_status == 0);
 }
--- gnome-control-center-3.4.2/panels/wacom/gsd-wacom-device.c	2012-05-15 12:18:30.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/panels/wacom/gsd-wacom-device.c	2012-11-07 18:52:59.000000000 +0100
@@ -373,6 +373,8 @@
 	name = XGetAtomName (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), pev->property);
 	if (name == NULL ||
 	    g_strcmp0 (name, WACOM_SERIAL_IDS_PROP) != 0) {
+		if (name)
+			XFree (name);
 		return GDK_FILTER_CONTINUE;
 	}
 	XFree (name);
@@ -477,10 +479,10 @@
                                  device, prop, 0, 1, False,
                                  XA_ATOM, &realtype, &realformat, &nitems,
                                  &bytes_after, &data);
-        if (gdk_error_trap_pop () || rc != Success || realtype == None) {
-                XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device);
+        XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device);
+
+        if (gdk_error_trap_pop () || rc != Success || realtype == None)
                 ret = WACOM_TYPE_INVALID;
-        }
 
         XFree (data);
 
@@ -572,23 +574,31 @@
 	GSettings *tablet;
 	GVariant *display;
 	const gchar **edid;
+	GnomeRROutputInfo *ret;
 
 	if (device == NULL)
 		return NULL;
 
+	ret      = NULL;
 	tablet   = device->priv->wacom_settings;
 	display  = g_settings_get_value (tablet, "display");
 	edid     = g_variant_get_strv (display, &n);
 
 	if (n != 3) {
 		g_critical ("Expected 'display' key to store %d values; got %"G_GSIZE_FORMAT".", 3, n);
-		return NULL;
+		goto out;
 	}
 
 	if (strlen(edid[0]) == 0 || strlen(edid[1]) == 0 || strlen(edid[2]) == 0)
-		return NULL;
+		goto out;
 
-	return find_output_by_edid (edid[0], edid[1], edid[2]);
+	ret = find_output_by_edid (edid[0], edid[1], edid[2]);
+
+out:
+	g_free (edid);
+	g_variant_unref (display);
+
+	return ret;
 }
 
 static GnomeRROutputInfo*
@@ -909,6 +919,8 @@
 			name = g_strdup_printf (_("Left Ring Mode #%d"), i);
 			id = g_strdup_printf ("left-ring-mode-%d", i);
 			l = g_list_append (l, gsd_wacom_tablet_button_new (name, id, settings_path, WACOM_TABLET_BUTTON_TYPE_ELEVATOR, flags_to_group (WACOM_BUTTON_RING_MODESWITCH), i - 1));
+			g_free (name);
+			g_free (id);
 		}
 	} else if ((direction & WACOM_BUTTON_POSITION_RIGHT) && libwacom_has_ring2 (wacom_device)) {
 		num_modes = libwacom_get_ring2_num_modes (wacom_device);
@@ -916,6 +928,8 @@
 			name = g_strdup_printf (_("Right Ring Mode #%d"), i);
 			id = g_strdup_printf ("right-ring-mode-%d", i);
 			l = g_list_append (l, gsd_wacom_tablet_button_new (name, id, settings_path, WACOM_TABLET_BUTTON_TYPE_ELEVATOR, flags_to_group (WACOM_BUTTON_RING2_MODESWITCH), i - 1));
+			g_free (name);
+			g_free (id);
 		}
 	}
 
@@ -944,6 +958,8 @@
 			name = g_strdup_printf (_("Left Touchstrip Mode #%d"), i);
 			id = g_strdup_printf ("left-strip-mode-%d", i);
 			l = g_list_append (l, gsd_wacom_tablet_button_new (name, id, settings_path, WACOM_TABLET_BUTTON_TYPE_ELEVATOR, flags_to_group (WACOM_BUTTON_TOUCHSTRIP_MODESWITCH), i - 1));
+			g_free (name);
+			g_free (id);
 		}
 	} else if ((direction & WACOM_BUTTON_POSITION_RIGHT) && num_strips >= 2) {
 		num_modes = libwacom_get_strips_num_modes (wacom_device);
@@ -951,6 +967,8 @@
 			name = g_strdup_printf (_("Right Touchstrip Mode #%d"), i);
 			id = g_strdup_printf ("right-strip-mode-%d", i);
 			l = g_list_append (l, gsd_wacom_tablet_button_new (name, id, settings_path, WACOM_TABLET_BUTTON_TYPE_ELEVATOR, flags_to_group (WACOM_BUTTON_TOUCHSTRIP2_MODESWITCH), i - 1));
+			g_free (name);
+			g_free (id);
 		}
 	}
 
@@ -1125,7 +1143,7 @@
 
 	if (device->priv->type == WACOM_TYPE_STYLUS ||
 	    device->priv->type == WACOM_TYPE_ERASER) {
-		int *ids;
+		const int *ids;
 		int num_styli;
 		guint i;
 
@@ -1322,6 +1340,9 @@
                 p->wacom_settings = NULL;
         }
 
+        g_list_foreach (p->styli, (GFunc) g_object_unref, NULL);
+        g_list_free (p->styli);
+
         g_list_foreach (p->buttons, (GFunc) gsd_wacom_tablet_button_free, NULL);
         g_list_free (p->buttons);
 
--- gnome-control-center-3.4.2/shell/gnome-control-center.c	2012-05-15 12:18:31.000000000 +0200
+++ gnome-control-center-3.4.2+git20121016.29d7c0/shell/gnome-control-center.c	2012-11-07 18:52:59.000000000 +0100
@@ -1058,12 +1058,20 @@
 			GdkEventKey        *event,
 			GnomeControlCenter *self)
 {
+  GdkKeymap *keymap;
   gboolean retval;
+  GdkModifierType state;
+
+  if (event->state == 0)
+    return FALSE;
 
   retval = FALSE;
+  state = event->state;
+  keymap = gdk_keymap_get_default ();
+  gdk_keymap_add_virtual_modifiers (keymap, &state);
+  state = state & gtk_accelerator_get_default_mod_mask ();
 
-  if (event->state != 0 &&
-      (event->state & GDK_CONTROL_MASK))
+  if (state == GDK_CONTROL_MASK)
     {
       switch (event->keyval)
         {
@@ -1115,8 +1123,8 @@
   /* connect various signals */
   priv->window = W (priv->builder, "main-window");
   g_signal_connect_swapped (priv->window, "delete-event", G_CALLBACK (g_object_unref), self);
-  g_signal_connect (priv->window, "key_press_event",
-                    G_CALLBACK (window_key_press_event), self);
+  g_signal_connect_after (priv->window, "key_press_event",
+                          G_CALLBACK (window_key_press_event), self);
 
   priv->notebook = W (priv->builder, "notebook");
   priv->scrolled_window = W (priv->builder, "scrolledwindow1");

--- End Message ---
--- Begin Message ---
On Wed, 2012-11-07 at 20:12 +0100, Josselin Mouette wrote:
> please unblock gnome-control-center. The new version features all 
> translations and bugfixes that have been sitting in the stable 3.4 
> branch of the upstream repository.
> 
> Mostly, the current version is broken for many Wacom tablets.

Unblocked; thanks.

Regards,

Adam

--- End Message ---

Reply to: