rpms/workrave/devel workrave-1.9.1-abort.patch, NONE, 1.1 workrave.spec, 1.26, 1.27
Tomáš Mráz
tmraz at fedoraproject.org
Mon Apr 26 06:51:24 UTC 2010
Author: tmraz
Update of /cvs/pkgs/rpms/workrave/devel
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv6425
Modified Files:
workrave.spec
Added Files:
workrave-1.9.1-abort.patch
Log Message:
* Mon Apr 26 2010 Tomas Mraz <tmraz at redhat.com> - 1.9.1-4
- better guard for BadWindow errors in input monitor (#566156)
workrave-1.9.1-abort.patch:
X11InputMonitor.cc | 67 +++++++++++++++++++++++++++++++----------------------
X11InputMonitor.hh | 5 +++
2 files changed, 44 insertions(+), 28 deletions(-)
--- NEW FILE workrave-1.9.1-abort.patch ---
diff -up workrave-1.9.1/backend/src/unix/X11InputMonitor.cc.abort workrave-1.9.1/backend/src/unix/X11InputMonitor.cc
--- workrave-1.9.1/backend/src/unix/X11InputMonitor.cc.abort 2009-09-18 20:46:22.000000000 +0200
+++ workrave-1.9.1/backend/src/unix/X11InputMonitor.cc 2010-04-26 08:43:58.000000000 +0200
@@ -1,6 +1,6 @@
// X11InputMonitor.cc --- ActivityMonitor for X11
//
-// Copyright (C) 2001-2007, 2009 Rob Caelers <robc at krandor.nl>
+// Copyright (C) 2001-2007, 2009, 2010 Rob Caelers <robc at krandor.nl>
// All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
@@ -77,7 +77,9 @@
using namespace std;
+#ifdef HAVE_XRECORD
int X11InputMonitor::xi_event_base = 0;
+#endif
#ifndef HAVE_APP_GTK
//! Intercepts X11 protocol errors.
@@ -230,27 +232,18 @@ X11InputMonitor::run_events()
{
TRACE_ENTER("X11InputMonitor::run_events");
+ error_trap_enter();
+
root_window = DefaultRootWindow(x11_display);
-
set_all_events(root_window);
-#ifdef HAVE_APP_GTK
- gdk_error_trap_push();
-#else
- int (*old_handler)(Display *dpy, XErrorEvent *error);
- old_handler = XSetErrorHandler(&errorHandler);
-#endif
-
XGrabButton(x11_display, AnyButton, AnyModifier, root_window, True,
ButtonPressMask, GrabModeSync, GrabModeAsync, None, None);
XSync(x11_display,False);
-#ifdef HAVE_APP_GTK
- gdk_error_trap_pop();
-#else
- XSetErrorHandler(old_handler);
-#endif
+ error_trap_exit();
+
Window lastMouseRoot = 0;
while (1)
{
@@ -265,6 +258,8 @@ X11InputMonitor::run_events()
if (gotEvent)
{
+ error_trap_enter();
+
switch (event.xany.type)
{
case KeyPress:
@@ -280,15 +275,22 @@ X11InputMonitor::run_events()
handle_button(&event);
break;
}
+
+ error_trap_exit();
}
+
// timeout
Window root, child;
int root_x, root_y, win_x, win_y;
unsigned mask;
+ error_trap_enter();
+
XQueryPointer(x11_display, root_window, &root, &child, &root_x, &root_y, &win_x, &win_y, &mask);
+ error_trap_exit();
+
lastMouseRoot = root;
fire_mouse(root_x, root_y);
}
@@ -342,22 +344,12 @@ X11InputMonitor::set_event_mask(Window w
void
X11InputMonitor::set_all_events(Window window)
{
-
-#ifdef HAVE_APP_GTK
- gdk_error_trap_push();
-#else
- int (*old_handler)(Display *dpy, XErrorEvent *error);
- old_handler = XSetErrorHandler(&errorHandler);
-#endif
-
+ error_trap_enter();
+
set_event_mask(window);
XSync(x11_display,False);
-#ifdef HAVE_APP_GTK
- gdk_error_trap_pop();
-#else
- XSetErrorHandler(old_handler);
-#endif
+ error_trap_exit();
}
@@ -400,7 +392,28 @@ X11InputMonitor::handle_button(XEvent *e
}
}
+void
+X11InputMonitor::error_trap_enter()
+{
+#ifdef HAVE_APP_GTK
+ gdk_error_trap_push();
+#else
+ int (*old_handler)(Display *dpy, XErrorEvent *error);
+ old_handler = XSetErrorHandler(&errorHandler);
+#endif
+}
+void
+X11InputMonitor::error_trap_exit()
+{
+#ifdef HAVE_APP_GTK
+ gdk_flush ();
+ gdk_error_trap_pop();
+#else
+ XSetErrorHandler(old_handler);
+#endif
+}
+
#ifdef HAVE_XRECORD
diff -up workrave-1.9.1/backend/src/unix/X11InputMonitor.hh.abort workrave-1.9.1/backend/src/unix/X11InputMonitor.hh
--- workrave-1.9.1/backend/src/unix/X11InputMonitor.hh.abort 2009-05-28 21:04:02.000000000 +0200
+++ workrave-1.9.1/backend/src/unix/X11InputMonitor.hh 2010-04-26 08:44:23.000000000 +0200
@@ -1,6 +1,6 @@
// X11InputMonitor.hh --- ActivityMonitor for X11
//
-// Copyright (C) 2001, 2002, 2003, 2006, 2007, 2008, 2009 Rob Caelers <robc at krandor.nl>
+// Copyright (C) 2001, 2002, 2003, 2006, 2007, 2008, 2009, 2010 Rob Caelers <robc at krandor.nl>
// All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
@@ -60,6 +60,9 @@ private:
//! the events execution thread.
void run_events();
+ void error_trap_enter();
+ void error_trap_exit();
+
#ifdef HAVE_XRECORD
//! Initialize
bool init_xrecord();
Index: workrave.spec
===================================================================
RCS file: /cvs/pkgs/rpms/workrave/devel/workrave.spec,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -p -r1.26 -r1.27
--- workrave.spec 17 Mar 2010 22:51:38 -0000 1.26
+++ workrave.spec 26 Apr 2010 06:51:24 -0000 1.27
@@ -1,6 +1,6 @@
Name: workrave
Version: 1.9.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Program that assists in the recovery and prevention of RSI
# Based on older packages by Dag Wieers <dag at wieers.com> and Steve Ratcliffe
License: GPLv2+
@@ -8,6 +8,7 @@ Group: Applications/Productivity
URL: http://workrave.sourceforge.net/
Source0: http://prdownloads.sourceforge.net/workrave/%{name}-%{version}.tar.gz
Patch1: workrave-1.9.1-compile.patch
+Patch2: workrave-1.9.1-abort.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gettext
@@ -32,6 +33,7 @@ take micro-pauses, rest breaks and restr
%prep
%setup -q -n %{name}-%{version}
%patch1 -p1 -b .compile
+%patch2 -p1 -b .abort
%build
if [ ! -x configure ]; then
@@ -76,6 +78,9 @@ desktop-file-install --vendor fedora
%{_datadir}/dbus-1/services/org.workrave.Workrave.service
%changelog
+* Mon Apr 26 2010 Tomas Mraz <tmraz at redhat.com> - 1.9.1-4
+- better guard for BadWindow errors in input monitor (#566156)
+
* Wed Mar 17 2010 Tomas Mraz <tmraz at redhat.com> - 1.9.1-3
- fix FTBFS (#564917)
More information about the scm-commits
mailing list