[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