[arch-commits] Commit in mate-panel-gtk3/trunk (PKGBUILD fix-force-quit.patch)

Balló György bgyorgy at archlinux.org
Mon Jun 29 17:06:14 UTC 2015


    Date: Monday, June 29, 2015 @ 19:06:13
  Author: bgyorgy
Revision: 136122

upgpkg: mate-panel-gtk3 1.10.0-4

Fix Force-Quit panel applet to avoid hang with GTK3

Added:
  mate-panel-gtk3/trunk/fix-force-quit.patch
Modified:
  mate-panel-gtk3/trunk/PKGBUILD

----------------------+
 PKGBUILD             |   16 +++++--
 fix-force-quit.patch |  108 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 121 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2015-06-29 13:48:26 UTC (rev 136121)
+++ PKGBUILD	2015-06-29 17:06:13 UTC (rev 136122)
@@ -4,7 +4,7 @@
 _pkgbase=mate-panel
 pkgname=${_pkgbase}-gtk3
 pkgver=${_ver}.0
-pkgrel=3
+pkgrel=4
 pkgdesc="The MATE Panel (GTK3 version [EXPERIMENTAL])"
 url="http://mate-desktop.org"
 arch=('i686' 'x86_64')
@@ -14,12 +14,22 @@
          'mate-menus>=1.10' 'mate-desktop-gtk3>=1.10')
 makedepends=('gobject-introspection' 'mate-common' 'yelp-tools')
 optdepends=('yelp: for reading MATE help documents')
-source=("http://pub.mate-desktop.org/releases/${_ver}/${_pkgbase}-${pkgver}.tar.xz")
+source=("http://pub.mate-desktop.org/releases/${_ver}/${_pkgbase}-${pkgver}.tar.xz"
+        fix-force-quit.patch)
 groups=('mate-gtk3')
 conflicts=("${_pkgbase}")
-sha1sums=('632d7127fba8c5fa76f5dd951db89325c6ca3f89')
+sha1sums=('632d7127fba8c5fa76f5dd951db89325c6ca3f89'
+          '4c89df9a32decc1be4181154a1fa8ba6282abd86')
 install=${_pkgbase}.install
 
+prepare() {
+    cd "${srcdir}/${_pkgbase}-${pkgver}"
+
+    # Fix Force-Quit panel applet to avoid hang with GTK3
+    # https://github.com/mate-desktop/mate-panel/pull/318
+    patch -Np1 -i ../fix-force-quit.patch
+}
+
 build() {
     cd "${srcdir}/${_pkgbase}-${pkgver}"
     ./configure \

Added: fix-force-quit.patch
===================================================================
--- fix-force-quit.patch	                        (rev 0)
+++ fix-force-quit.patch	2015-06-29 17:06:13 UTC (rev 136122)
@@ -0,0 +1,108 @@
+From 2b8df1cf67516a9df1fb8931e88a06b452e890b5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor at gmail.com>
+Date: Mon, 29 Jun 2015 11:50:20 +0200
+Subject: [PATCH] Fix Force-Quit panel applet
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch implements handling of XInput2 extension events in the applet.
+Without this patch, the applet fails to recognize such events (either mouse
+click for killing application, or escape key for exiting), hence freezing the
+desktop.
+
+Also fix the event mask in call of gdk_device_grab() for keyboard.
+
+Author: Sébastien Villemot <sebastien at debian.org>
+http://bugs.debian.org/698740
+---
+ mate-panel/panel-force-quit.c | 34 +++++++++++++++++++++++++++-------
+ 1 file changed, 27 insertions(+), 7 deletions(-)
+
+diff --git a/mate-panel/panel-force-quit.c b/mate-panel/panel-force-quit.c
+index 8231b8f..f0374e2 100644
+--- a/mate-panel/panel-force-quit.c
++++ b/mate-panel/panel-force-quit.c
+@@ -32,6 +32,8 @@
+ #include <X11/Xlib.h>
+ #include <X11/keysym.h>
+ 
++#include <X11/extensions/XInput2.h>
++
+ #include "panel-icon-names.h"
+ #include "panel-stock-icons.h"
+ 
+@@ -261,22 +263,23 @@ kill_window_question (gpointer window)
+ 
+ static void 
+ handle_button_press_event (GtkWidget *popup,
+-			   XKeyEvent *event)
++			   Display *display,
++			   Window subwindow)
+ {
+ 	Window window;
+ 
+ 	remove_popup (popup);
+ 
+-	if (event->subwindow == None)
++	if (subwindow == None)
+ 		return;
+ 
+ 	if (wm_state_atom == None)
+-		wm_state_atom = XInternAtom (event->display, "WM_STATE", FALSE);
++		wm_state_atom = XInternAtom (display, "WM_STATE", FALSE);
+ 
+-	window = find_managed_window (event->display, event->subwindow);
++	window = find_managed_window (display, subwindow);
+ 
+ 	if (window != None) {
+-		if (!gdk_x11_window_lookup_for_display (gdk_x11_lookup_xdisplay (event->display), window))
++		if (!gdk_x11_window_lookup_for_display (gdk_x11_lookup_xdisplay (display), window))
+ 			kill_window_question ((gpointer) window);
+ 	}
+ }
+@@ -287,10 +290,12 @@ popup_filter (GdkXEvent *gdk_xevent,
+ 	      GtkWidget *popup)
+ {
+ 	XEvent *xevent = (XEvent *) gdk_xevent;
++	XIEvent *xiev;
++	XIDeviceEvent *xidev;
+ 
+ 	switch (xevent->type) {
+ 	case ButtonPress:
+-		handle_button_press_event (popup, &xevent->xkey);
++		handle_button_press_event (popup, xevent->xbutton.display, xevent->xbutton.subwindow);
+ 		return GDK_FILTER_REMOVE;
+ 	case KeyPress:
+ 		if (xevent->xkey.keycode == XKeysymToKeycode (xevent->xany.display, XK_Escape)) {
+@@ -298,6 +303,21 @@ popup_filter (GdkXEvent *gdk_xevent,
+ 			return GDK_FILTER_REMOVE;
+ 		}
+ 		break;
++	case GenericEvent:
++		xiev = (XIEvent *) xevent->xcookie.data;
++		xidev = (XIDeviceEvent *) xiev;
++		switch (xiev->evtype) {
++		case XI_KeyPress:
++			if (xidev->detail == XKeysymToKeycode (xevent->xany.display, XK_Escape)) {
++				remove_popup (popup);
++				return GDK_FILTER_REMOVE;
++			}
++			break;
++		case XI_ButtonPress:
++			handle_button_press_event (popup, xidev->display, xidev->child);
++			return GDK_FILTER_REMOVE;
++		}
++		break;
+ 	default:
+ 		break;
+ 	}
+@@ -342,7 +362,7 @@ panel_force_quit (GdkScreen *screen,
+ 
+ 	status = gdk_device_grab (keyboard, root,
+ 				  GDK_OWNERSHIP_NONE, FALSE,
+-				  GDK_KEY_PRESS | GDK_KEY_RELEASE,
++				  GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
+ 				  NULL, time);
+ 
+ 	if (status != GDK_GRAB_SUCCESS) {



More information about the arch-commits mailing list