xfwm4: patch to fix locks with gtk 2.12, thanks Predrag Ivanovic

This commit is contained in:
Juergen Daubert 2007-09-26 10:43:10 +02:00
parent e2e688fd67
commit 96eae00456
3 changed files with 174 additions and 2 deletions

View File

@ -1 +1,2 @@
a1355e653eb52399aa736c483e4af09b xfwm4-4.4.1.patch
c531edad76c909001acccc02936404f2 xfwm4-4.4.1.tar.bz2

View File

@ -6,11 +6,13 @@
name=xfwm4
version=4.4.1
release=1
source=(http://www.xfce.org/archive/xfce-$version/src/$name-$version.tar.bz2)
release=2
source=(http://www.xfce.org/archive/xfce-$version/src/$name-$version.tar.bz2 \
$name-$version.patch)
build () {
cd $name-$version
patch -p1 -i $SRC/$name-$version.patch
./configure --prefix=/usr \
--disable-static \
--disable-debug

169
xfwm4/xfwm4-4.4.1.patch Normal file
View File

@ -0,0 +1,169 @@
diff -Naur xfwm4-4.4.1/src/client.c xfwm4-4.4.1.new/src/client.c
--- xfwm4-4.4.1/src/client.c 2007-04-02 21:48:20.000000000 +0200
+++ xfwm4-4.4.1.new/src/client.c 2007-09-21 17:52:04.000000000 +0200
@@ -4868,21 +4868,19 @@
if (passdata.c)
{
- GdkPixbuf *icon;
-
TRACE ("entering cycle loop");
passdata.wireframe = wireframeCreate (passdata.c);
- icon = getAppIcon (display_info, passdata.c->window, 32, 32);
passdata.tabwin = tabwinCreate (passdata.c->screen_info->gscr, c,
passdata.c, passdata.cycle_range,
screen_info->params->cycle_workspaces);
eventFilterPush (display_info->xfilter, clientCycleEventFilter, &passdata);
gtk_main ();
eventFilterPop (display_info->xfilter);
- wireframeDelete (screen_info, passdata.wireframe);
TRACE ("leaving cycle loop");
tabwinDestroy (passdata.tabwin);
g_free (passdata.tabwin);
+ wireframeDelete (screen_info, passdata.wireframe);
+ updateXserverTime (display_info);
}
if (passdata.c)
diff -Naur xfwm4-4.4.1/src/display.c xfwm4-4.4.1.new/src/display.c
--- xfwm4-4.4.1/src/display.c 2007-04-02 21:32:01.000000000 +0200
+++ xfwm4-4.4.1.new/src/display.c 2007-09-21 17:52:30.000000000 +0200
@@ -178,6 +178,19 @@
FALSE, display_info->atoms) != 0);
}
+static void
+myDisplayCreateTimestampWin (DisplayInfo *display_info)
+{
+ XSetWindowAttributes attributes;
+
+ attributes.event_mask = PropertyChangeMask;
+ attributes.override_redirect = TRUE;
+ display_info->timestamp_win =
+ XCreateWindow (display_info->dpy, DefaultRootWindow (display_info->dpy),
+ -100, -100, 10, 10, 0, 0, CopyFromParent, CopyFromParent,
+ CWEventMask | CWOverrideRedirect, &attributes);
+}
+
DisplayInfo *
myDisplayInit (GdkDisplay *gdisplay)
{
@@ -309,6 +322,8 @@
display->resize_cursor[CORNER_COUNT + SIDE_BOTTOM] =
XCreateFontCursor (display->dpy, XC_bottom_side);
+ myDisplayCreateTimestampWin (display);
+
display->xfilter = NULL;
display->screens = NULL;
display->clients = NULL;
@@ -340,6 +355,8 @@
display->move_cursor = None;
XFreeCursor (display->dpy, display->root_cursor);
display->root_cursor = None;
+ XDestroyWindow (display->dpy, display->timestamp_win);
+ display->timestamp_win = None;
if (display->hostname)
{
diff -Naur xfwm4-4.4.1/src/display.h xfwm4-4.4.1.new/src/display.h
--- xfwm4-4.4.1/src/display.h 2007-04-02 21:32:01.000000000 +0200
+++ xfwm4-4.4.1.new/src/display.h 2007-09-21 17:52:56.000000000 +0200
@@ -226,6 +226,7 @@
gboolean quit;
gboolean reload;
+ Window timestamp_win;
Cursor busy_cursor;
Cursor move_cursor;
Cursor root_cursor;
diff -Naur xfwm4-4.4.1/src/hints.c xfwm4-4.4.1.new/src/hints.c
--- xfwm4-4.4.1/src/hints.c 2007-03-11 14:44:43.000000000 +0100
+++ xfwm4-4.4.1.new/src/hints.c 2007-09-21 18:05:26.000000000 +0200
@@ -1167,27 +1167,18 @@
return setXAtomManagerOwner(display_info, display_info->atoms[atom_id], root, w);
}
-
-static Bool
-checkPropEvent (Display *display, XEvent *xevent, XPointer arg)
+void
+updateXserverTime (DisplayInfo *display_info)
{
- DisplayInfo *display_info;
ScreenInfo *screen_info;
+ char c = '\0';
- display_info = (DisplayInfo *) arg;
- g_return_val_if_fail (display_info, FALSE);
-
- screen_info = myDisplayGetDefaultScreen (display_info);
- g_return_val_if_fail (screen_info, FALSE);
+ g_return_if_fail (display_info);
- if ((xevent->type == PropertyNotify) &&
- (xevent->xproperty.window == screen_info->xfwm4_win) &&
- (xevent->xproperty.atom == display_info->atoms[XFWM4_TIMESTAMP_PROP]))
- {
- return TRUE;
- }
-
- return FALSE;
+ XChangeProperty (display_info->dpy, display_info->timestamp_win,
+ display_info->atoms[XFWM4_TIMESTAMP_PROP],
+ display_info->atoms[XFWM4_TIMESTAMP_PROP],
+ 8, PropModeReplace, (unsigned char *) &c, 1);
}
Time
@@ -1196,7 +1187,6 @@
ScreenInfo *screen_info;
XEvent xevent;
Time timestamp;
- char c = '\0';
g_return_val_if_fail (display_info, (Time) CurrentTime);
timestamp = myDisplayGetCurrentTime (display_info);
@@ -1206,12 +1196,8 @@
g_return_val_if_fail (screen_info, (Time) CurrentTime);
TRACE ("getXServerTime: Using X server roundtrip");
- XChangeProperty (display_info->dpy, screen_info->xfwm4_win,
- display_info->atoms[XFWM4_TIMESTAMP_PROP],
- display_info->atoms[XFWM4_TIMESTAMP_PROP],
- 8, PropModeReplace, (unsigned char *) &c, 1);
- XIfEvent (display_info->dpy, &xevent, checkPropEvent, (XPointer) display_info);
-
+ updateXserverTime (display_info);
+ XWindowEvent (display_info->dpy, display_info->timestamp_win, PropertyChangeMask, &xevent);
timestamp = (Time) myDisplayUpdateCurrentTime (display_info, &xevent);
}
diff -Naur xfwm4-4.4.1/src/hints.h xfwm4-4.4.1.new/src/hints.h
--- xfwm4-4.4.1/src/hints.h 2007-03-11 14:44:43.000000000 +0100
+++ xfwm4-4.4.1.new/src/hints.h 2007-09-21 17:55:26.000000000 +0200
@@ -269,6 +269,7 @@
int,
Window ,
Window);
+void updateXserverTime (DisplayInfo *);
Time getXServerTime (DisplayInfo *);
#ifdef ENABLE_KDE_SYSTRAY_PROXY
diff -Naur xfwm4-4.4.1/src/mypixmap.c xfwm4-4.4.1.new/src/mypixmap.c
--- xfwm4-4.4.1/src/mypixmap.c 2007-03-11 14:44:43.000000000 +0100
+++ xfwm4-4.4.1.new/src/mypixmap.c 2007-09-21 17:54:00.000000000 +0200
@@ -941,12 +941,7 @@
g_return_val_if_fail (dir != NULL, FALSE);
g_return_val_if_fail (file != NULL, FALSE);
- pm->screen_info = screen_info;
- pm->pixmap = None;
- pm->mask = None;
- pm->width = 1;
- pm->height = 1;
-
+ xfwmPixmapInit (screen_info, pm);
/*
* Always try to load the XPM first, using our own routine
* that supports XPM color symbol susbstitution (used to