[Pkg-cairo-dock-devel] Bug#694614: tpu: cairo-dock/3.0.0-3 (pre-approval)

Youhei SASAKI uwabami at gfd-dennou.org
Wed Nov 28 11:05:58 UTC 2012


Package: release.debian.org
User: release.debian.org at packages.debian.org
Usertags: tpu
Severity: normal

Hi,

I'd like to get your approval about the upload of cairo-dock 3.0.0-3 to
testing-proposed-update in order to fix 1 RC bug and enable hardening build.

The changes from 3.0.0-2 (in wheezy) to 3.0.3-3 as follows:

  - RC bug number: #676831
    - This bug is already fix newer cairo-dock ( >= 3.1.1, in unstable).
    - We created patches by cherry-picked from upstream Git repository for
      cairo-dock (3.0.0-2, in wheezy).

  - Enable hardening build
    - Update debhelper >= 9, Add dpkg-dev (>= 1.16.1~)

I attached debdiff output.

Best Wishes,
Youhei

-- System Information:
Debian Release: wheezy/sid
  APT prefers testing-updates
  APT policy: (500, 'testing-updates'), (500, 'testing'), (95, 'unstable'), (90, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

---
Youhei SASAKI <uwabami at gfd-dennou.org>
              <uwabami at debian.or.jp>
GPG fingerprint:
  4096/RSA: 66A4 EA70 4FE2 4055 8D6A C2E6 9394 F354 891D 7E07
-------------- next part --------------
diff -Nru cairo-dock-3.0.0/debian/changelog cairo-dock-3.0.0/debian/changelog
--- cairo-dock-3.0.0/debian/changelog	2012-05-20 21:06:28.000000000 +0900
+++ cairo-dock-3.0.0/debian/changelog	2012-11-27 12:15:55.000000000 +0900
@@ -1,3 +1,13 @@
+cairo-dock (3.0.0-3) unstable; urgency=low
+
+  * Update debhelper to 9.
+  * Add dpkg-dev (>= 1.16.1~) to Build-Depends.
+  * Enable hardening.
+  * Fix syntax error in copyright file.
+  * Fix segfault when using log out applet. (Closes: #676841)
+
+ -- Nobuhiro Iwamatsu <iwamatsu at debian.org>  Tue, 31 Jul 2012 12:46:41 +0900
+
 cairo-dock (3.0.0-2) unstable; urgency=low
 
   * Set Build-Depends libgtk-3-dev instead of libgtk2.0-dev.
diff -Nru cairo-dock-3.0.0/debian/compat cairo-dock-3.0.0/debian/compat
--- cairo-dock-3.0.0/debian/compat	2011-02-28 09:44:20.000000000 +0900
+++ cairo-dock-3.0.0/debian/compat	2012-11-27 12:15:55.000000000 +0900
@@ -1 +1 @@
-7
+9
diff -Nru cairo-dock-3.0.0/debian/control cairo-dock-3.0.0/debian/control
--- cairo-dock-3.0.0/debian/control	2012-05-20 21:03:28.000000000 +0900
+++ cairo-dock-3.0.0/debian/control	2012-11-27 12:15:55.000000000 +0900
@@ -5,7 +5,7 @@
 DM-Upload-Allowed: yes
 Uploaders: Nobuhiro Iwamatsu <iwamatsu at debian.org>,
  Youhei SASAKI <uwabami at gfd-dennou.org>
-Build-Depends: cdbs, debhelper (>= 7), autotools-dev, intltool, pkg-config,
+Build-Depends: cdbs, debhelper (>= 9), dpkg-dev (>= 1.16.1~), autotools-dev, intltool, pkg-config,
 		libcairo-dev, libdbus-1-dev, librsvg2-dev, libxml2-dev,
 		libxrender-dev, libxtst-dev, libgtkglext1-dev, libcurl4-gnutls-dev,
 		libdbus-glib-1-dev, libgtk-3-dev, quilt, cmake (>= 2.8.0)
diff -Nru cairo-dock-3.0.0/debian/copyright cairo-dock-3.0.0/debian/copyright
--- cairo-dock-3.0.0/debian/copyright	2011-10-26 13:05:18.000000000 +0900
+++ cairo-dock-3.0.0/debian/copyright	2012-11-27 12:15:55.000000000 +0900
@@ -37,12 +37,12 @@
 
 Files: po/*
 Copyright: 2007, 2008 Cairo-Dock project
-Copyright: 2009, 2010 Rosetta Contributors and Canonical Ltd
+           2009, 2010 Rosetta Contributors and Canonical Ltd
 License: GPL-3+
 
 Files: debian/*
 Copyright: 2009, 2010, 2011 Nobuhiro Iwamatsu <iwamatsu at debian.org>
-Copyright: 2009, 2010, 2011 Youhei SASAKI <uwabami at gfd-dennou.org>
+           2009, 2010, 2011 Youhei SASAKI <uwabami at gfd-dennou.org>
 License: GPL-3+
 
 License: GPL-3+
diff -Nru cairo-dock-3.0.0/debian/patches/0001-Main-GUI-fixed-a-crash-when-hovering-group-buttons-t.patch cairo-dock-3.0.0/debian/patches/0001-Main-GUI-fixed-a-crash-when-hovering-group-buttons-t.patch
--- cairo-dock-3.0.0/debian/patches/0001-Main-GUI-fixed-a-crash-when-hovering-group-buttons-t.patch	1970-01-01 09:00:00.000000000 +0900
+++ cairo-dock-3.0.0/debian/patches/0001-Main-GUI-fixed-a-crash-when-hovering-group-buttons-t.patch	2012-11-27 12:15:55.000000000 +0900
@@ -0,0 +1,47 @@
+Description: Main GUI: fixed a crash when hovering group buttons too quickly (the dialog was not correctly destroyed)
+Forwarded: not-needed
+rigin: upstream, http://bazaar.launchpad.net/~cairo-dock-team/cairo-dock-core/cairo-dock/revision/1100
+Bug-Debian: http://bugs.debian.org/676841
+
+---
+ src/cairo-dock-gui-main.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/cairo-dock-gui-main.c b/src/cairo-dock-gui-main.c
+index 1983329..52ba76a 100644
+--- a/src/cairo-dock-gui-main.c
++++ b/src/cairo-dock-gui-main.c
+@@ -28,6 +28,7 @@
+ #include <gdk/gdkx.h>
+ 
+ #include "config.h"
++#include "cairo-dock-notifications.h"
+ #include "cairo-dock-module-factory.h"
+ #include "cairo-dock-icon-facility.h"
+ #include "cairo-dock-log.h"
+@@ -888,10 +889,12 @@ static gboolean _show_group_dialog (CairoDockGroupDescription *pGroupDescription
+ 	attr.cText = dgettext (pGroupDescription->cGettextDomain, cDescription != NULL ? cDescription : pGroupDescription->cDescription);
+ 	attr.cImageFilePath = pGroupDescription->cIcon;
+ 	attr.bNoInput = TRUE;
+-	attr.pFreeDataFunc = _on_group_dialog_destroyed;
+ 	myDialogsParam.dialogTextDescription.bUseMarkup = TRUE;
+ 	s_pDialog = cairo_dock_build_dialog (&attr, pIcon, CAIRO_CONTAINER (pDock));
+ 	myDialogsParam.dialogTextDescription.bUseMarkup = FALSE;
++	cairo_dock_register_notification_on_object (s_pDialog,
++		NOTIFICATION_DESTROY, (CairoDockNotificationFunc)_on_group_dialog_destroyed,
++		CAIRO_DOCK_RUN_AFTER, NULL);
+ 	
+ 	gtk_window_set_transient_for (GTK_WINDOW (s_pDialog->container.pWidget), GTK_WINDOW (s_pMainWindow));
+ 	g_free (cDescription);
+@@ -932,7 +935,7 @@ static gboolean _check_group_button (gpointer data)
+ 	if (Xid != cairo_dock_get_current_active_window ())  // we're not the active window any more, so the 'leave' event was probably due to an Alt+Tab -> the mouse is really out of the button.
+ 	{
+ 		gtk_widget_hide (s_pPreviewBox);
+-	
++		
+ 		cairo_dock_dialog_unreference (s_pDialog);
+ 		
+ 		s_pCurrentButton = NULL;
+-- 
+1.7.10.4
+
diff -Nru cairo-dock-3.0.0/debian/patches/0001-main-GUI-fix-a-case-where-the-description-dialog-pre.patch cairo-dock-3.0.0/debian/patches/0001-main-GUI-fix-a-case-where-the-description-dialog-pre.patch
--- cairo-dock-3.0.0/debian/patches/0001-main-GUI-fix-a-case-where-the-description-dialog-pre.patch	1970-01-01 09:00:00.000000000 +0900
+++ cairo-dock-3.0.0/debian/patches/0001-main-GUI-fix-a-case-where-the-description-dialog-pre.patch	2012-11-27 12:15:55.000000000 +0900
@@ -0,0 +1,192 @@
+Description: main GUI: fix a case where the description dialog&preview didn't appear when hovering the button
+Forwarded: not-needed
+rigin: upstream, http://bazaar.launchpad.net/~cairo-dock-team/cairo-dock-core/cairo-dock/revision/1085
+Bug-Debian: http://bugs.debian.org/676841
+		
+---
+ src/cairo-dock-gui-main.c |  101 ++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 82 insertions(+), 19 deletions(-)
+
+diff --git a/src/cairo-dock-gui-main.c b/src/cairo-dock-gui-main.c
+index 50b02f3..1983329 100644
+--- a/src/cairo-dock-gui-main.c
++++ b/src/cairo-dock-gui-main.c
+@@ -24,6 +24,9 @@
+ #include <glib/gstdio.h>
+ #include <glib/gi18n.h>
+ 
++
++#include <gdk/gdkx.h>
++
+ #include "config.h"
+ #include "cairo-dock-module-factory.h"
+ #include "cairo-dock-icon-facility.h"
+@@ -123,7 +126,8 @@ static GtkWidget *s_pStatusBar = NULL;
+ static GSList *s_path = NULL;
+ static int s_iPreviewWidth, s_iNbButtonsByRow;
+ static CairoDialog *s_pDialog = NULL;
+-static int s_iSidShowGroupDialog = 0;
++static guint s_iSidShowGroupDialog = 0;
++static guint s_iSidCheckGroupButton = 0;
+ 
+ static const gchar *s_cCategoriesDescription[2*(CAIRO_DOCK_NB_CATEGORY+1)] = {
+ 	N_("Behaviour"), "icon-behavior.svg",
+@@ -803,6 +807,10 @@ static void on_click_back_button (GtkButton *button, gpointer data)
+ 	_show_group_or_category (pPrevPlace);
+ }
+ 
++static void _on_group_dialog_destroyed (gpointer data)
++{
++	s_pDialog = NULL;
++}
+ static gboolean _show_group_dialog (CairoDockGroupDescription *pGroupDescription)
+ {
+ 	gchar *cDescription = NULL;
+@@ -869,9 +877,7 @@ static gboolean _show_group_dialog (CairoDockGroupDescription *pGroupDescription
+ 		gdk_pixbuf_unref (pPreviewPixbuf);
+ 	}
+ 	
+-	if (s_pDialog != NULL)
+-		if (! cairo_dock_dialog_unreference (s_pDialog))
+-			cairo_dock_dialog_unreference (s_pDialog);
++	cairo_dock_dialog_unreference (s_pDialog);
+ 	Icon *pIcon = cairo_dock_get_current_active_icon ();
+ 	if (pIcon == NULL || pIcon->cParentDockName == NULL || cairo_dock_icon_is_being_removed (pIcon))
+ 		pIcon = cairo_dock_get_dialogless_icon ();
+@@ -882,45 +888,96 @@ static gboolean _show_group_dialog (CairoDockGroupDescription *pGroupDescription
+ 	attr.cText = dgettext (pGroupDescription->cGettextDomain, cDescription != NULL ? cDescription : pGroupDescription->cDescription);
+ 	attr.cImageFilePath = pGroupDescription->cIcon;
+ 	attr.bNoInput = TRUE;
++	attr.pFreeDataFunc = _on_group_dialog_destroyed;
+ 	myDialogsParam.dialogTextDescription.bUseMarkup = TRUE;
+ 	s_pDialog = cairo_dock_build_dialog (&attr, pIcon, CAIRO_CONTAINER (pDock));
+ 	myDialogsParam.dialogTextDescription.bUseMarkup = FALSE;
+ 	
+-	cairo_dock_dialog_reference (s_pDialog);
+-	
+ 	gtk_window_set_transient_for (GTK_WINDOW (s_pDialog->container.pWidget), GTK_WINDOW (s_pMainWindow));
+ 	g_free (cDescription);
+ 
+ 	s_iSidShowGroupDialog = 0;
+ 	return FALSE;
+ }
+-static void on_enter_group_button (GtkButton *button, CairoDockGroupDescription *pGroupDescription)
++
++static GtkButton *s_pCurrentButton = NULL;
++static gboolean on_enter_group_button (GtkButton *button, GdkEventCrossing *pEvent, CairoDockGroupDescription *pGroupDescription)
+ {
+-	//g_print ("%s (%s)\n", __func__, pGroupDescription->cDescription);
++	g_print ("%s (%s)\n", __func__, pGroupDescription->cGroupName);
+ 	if (g_pPrimaryContainer == NULL)  // inutile en maintenance, le dialogue risque d'apparaitre sur la souris.
+-		return ;
++		return FALSE;
+ 	
++	// if we were about to show a dialog, cancel it to reset the timer.
+ 	if (s_iSidShowGroupDialog != 0)
+ 		g_source_remove (s_iSidShowGroupDialog);
+ 	
++	if (s_iSidCheckGroupButton != 0)
++	{
++		g_source_remove (s_iSidCheckGroupButton);
++		s_iSidCheckGroupButton = 0;
++	}
++	
++	// avoid re-entering the same button (can happen if the input shape of the dialog is set a bit late by X, and the dialog spawns under the cursor, which will make us leave the button and re-enter when the input shape is ready).
++	if (s_pCurrentButton == button)
++		return FALSE;
++	s_pCurrentButton = button;  // we don't actually use the content of the pointer, only the address value.
++	
++	// show the dialog with a delay.
+ 	s_iSidShowGroupDialog = g_timeout_add (330, (GSourceFunc)_show_group_dialog, (gpointer) pGroupDescription);
++	return FALSE;
+ }
+-static void on_leave_group_button (GtkButton *button, gpointer *data)
++static gboolean _check_group_button (gpointer data)
+ {
+-	//g_print ("%s ()\n", __func__);
++	Window Xid = GDK_WINDOW_XID (gtk_widget_get_window (s_pMainWindow));
++	if (Xid != cairo_dock_get_current_active_window ())  // we're not the active window any more, so the 'leave' event was probably due to an Alt+Tab -> the mouse is really out of the button.
++	{
++		gtk_widget_hide (s_pPreviewBox);
++	
++		cairo_dock_dialog_unreference (s_pDialog);
++		
++		s_pCurrentButton = NULL;
++	}
++	s_iSidCheckGroupButton = 0;
++	return FALSE;
++}
++static gboolean on_leave_group_button (GtkButton *button, GdkEventCrossing *pEvent, gpointer data)
++{
++	g_print ("%s (%d, %d)\n", __func__, pEvent->mode, pEvent->detail);
++	// if we were about to show the dialog, cancel.
+ 	if (s_iSidShowGroupDialog != 0)
+ 	{
+ 		g_source_remove (s_iSidShowGroupDialog);
+ 		s_iSidShowGroupDialog = 0;
+ 	}
+-
+-	int iPreviewWidgetWidth = s_iPreviewWidth;
+-	GtkWidget *pPreviewImage = s_pPreviewImage;
++	
++	if (s_iSidCheckGroupButton != 0)
++	{
++		g_source_remove (s_iSidCheckGroupButton);
++		s_iSidCheckGroupButton = 0;
++	}
++	
++	// check that we are really outside of the button (this may be false if the dialog is appearing under the mouse and has not yet its input shape (X lag)).
++	if (pEvent->detail != GDK_NOTIFY_ANCESTOR)  // a LeaveNotify event not within the same window (ie, either an Alt+Tab or the dialog that spawned under the cursor)
++	{
++		int x, y;
++		gtk_widget_get_pointer (GTK_WIDGET (button), &x, &y);
++		GtkAllocation allocation;
++		gtk_widget_get_allocation (GTK_WIDGET (button), &allocation);
++		if (x >= 0 && x < allocation.width && y >= 0 && y < allocation.height)  // we are actually still inside the button, ignore the event, we'll get an 'enter' event as soon as the dialog's input shape is ready.
++		{
++			s_iSidCheckGroupButton = g_timeout_add (1000, _check_group_button, NULL);  // check in a moment if we left the button because of the dialog or because of another window (alt+tab).
++			return FALSE;
++		}
++	}
++	
++	// hide the dialog and the preview box.
+ 	gtk_widget_hide (s_pPreviewBox);
+ 	
+-	if (! cairo_dock_dialog_unreference (s_pDialog))
+-		cairo_dock_dialog_unreference (s_pDialog);
+-	s_pDialog = NULL;
++	cairo_dock_dialog_unreference (s_pDialog);
++	
++	s_pCurrentButton = NULL;
++	
++	return FALSE;
+ }
+ 
+ 
+@@ -986,6 +1043,12 @@ static gboolean on_delete_main_gui (GtkWidget *pWidget, gpointer data)
+ 		g_source_remove (s_iSidShowGroupDialog);
+ 		s_iSidShowGroupDialog = 0;
+ 	}
++	cairo_dock_dialog_unreference (s_pDialog);
++	if (s_iSidCheckGroupButton != 0)
++	{
++		g_source_remove (s_iSidCheckGroupButton);
++		s_iSidCheckGroupButton = 0;
++	}
+ 	return FALSE;
+ }
+ 
+@@ -1364,8 +1427,8 @@ static inline CairoDockGroupDescription *_add_group_button (const gchar *cGroupN
+ 		g_signal_connect (G_OBJECT (pGroupButton), "clicked", G_CALLBACK(on_click_group_button), pGroupDescription);
+ 	else
+ 		gtk_widget_set_sensitive (pGroupButton, FALSE);
+-	g_signal_connect (G_OBJECT (pGroupButton), "enter", G_CALLBACK(on_enter_group_button), pGroupDescription);
+-	g_signal_connect (G_OBJECT (pGroupButton), "leave", G_CALLBACK(on_leave_group_button), NULL);
++	g_signal_connect (G_OBJECT (pGroupButton), "enter-notify-event", G_CALLBACK(on_enter_group_button), pGroupDescription);
++	g_signal_connect (G_OBJECT (pGroupButton), "leave-notify-event", G_CALLBACK(on_leave_group_button), NULL);
+ 
+ 	GtkWidget *pButtonHBox = _gtk_hbox_new (CAIRO_DOCK_FRAME_MARGIN);
+ 	GtkWidget *pImage = _make_image (cIconPath, CAIRO_DOCK_GROUP_ICON_SIZE);
+-- 
+1.7.10.4
+
diff -Nru cairo-dock-3.0.0/debian/patches/series cairo-dock-3.0.0/debian/patches/series
--- cairo-dock-3.0.0/debian/patches/series	2012-04-13 20:04:14.000000000 +0900
+++ cairo-dock-3.0.0/debian/patches/series	2012-11-27 12:15:55.000000000 +0900
@@ -1 +1,3 @@
 0001-Fix-GLIB-Single-Include-issue-Closes-665514.patch
+0001-main-GUI-fix-a-case-where-the-description-dialog-pre.patch
+0001-Main-GUI-fixed-a-crash-when-hovering-group-buttons-t.patch
diff -Nru cairo-dock-3.0.0/debian/rules cairo-dock-3.0.0/debian/rules
--- cairo-dock-3.0.0/debian/rules	2011-07-05 21:46:15.000000000 +0900
+++ cairo-dock-3.0.0/debian/rules	2012-11-27 12:15:55.000000000 +0900
@@ -1,5 +1,10 @@
 #!/usr/bin/make -f
 
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
+CFLAGS+=$(CPPFLAGS)
+CXXFLAGS+=$(CPPFLAGS)
+
 include /usr/share/cdbs/1/rules/debhelper.mk
 include /usr/share/cdbs/1/class/cmake.mk
 include /usr/share/cdbs/1/rules/patchsys-quilt.mk


More information about the Pkg-cairo-dock-devel mailing list