Hello community, here is the log from the commit of package xgl checked in at Sun Apr 30 17:52:18 CEST 2006. -------- --- xgl/xgl.changes 2006-04-24 21:15:17.000000000 +0200 +++ STABLE/xgl/xgl.changes 2006-04-30 15:09:19.000000000 +0200 @@ -1,0 +2,5 @@ +Sun Apr 30 15:06:10 CEST 2006 - dreveman@suse.de + +- Fix so events are correctly delivered when warping the pointer. + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xgl.spec ++++++ --- /var/tmp/diff_new_pack.dTgJQh/_old 2006-04-30 17:52:00.000000000 +0200 +++ /var/tmp/diff_new_pack.dTgJQh/_new 2006-04-30 17:52:00.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package xgl (Version cvs_060419) +# spec file for package xgl (Version cvs_060430) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -23,8 +23,8 @@ PreReq: %fillup_prereq Requires: xgl-hardware-list Autoreqprov: on -Version: cvs_060419 -Release: 3 +Version: cvs_060430 +Release: 1 Summary: Xserver that uses OpenGL for its drawing operations. BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 @@ -143,6 +143,8 @@ /var/adm/fillup-templates/sysconfig.displaymanager-%name %changelog -n xgl +* Sun Apr 30 2006 - dreveman@suse.de +- Fix so events are correctly delivered when warping the pointer. * Mon Apr 24 2006 - jpr@suse.de - Do not package the white list here, that way we don't need to update all of xgl when a new card comes out. ++++++ xorg-server-1.1.99.1.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/ChangeLog new/xorg-server-1.1.99.1/ChangeLog --- old/xorg-server-1.1.99.1/ChangeLog 2006-04-19 00:08:42.000000000 +0200 +++ new/xorg-server-1.1.99.1/ChangeLog 2006-04-26 03:46:55.000000000 +0200 @@ -1,3 +1,12 @@ +2006-04-26 David Reveman <davidr@novell.com> + + * hw/xgl/glx/xglx.c: Fix SetCursorPosition, events were not generated + correctly. + +2006-04-24 David Reveman <davidr@novell.com> + + * fb/fbcompose.c (fbFetchTransformed): Fix convolution kernel offsets. + 2006-04-19 David Reveman <davidr@novell.com> * hw/xgl/glx/xglx.c: Pass display offset to xglxInitXorg. diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/fb/fbcompose.c new/xorg-server-1.1.99.1/fb/fbcompose.c --- old/xorg-server-1.1.99.1/fb/fbcompose.c 2006-04-10 20:09:30.000000000 +0200 +++ new/xorg-server-1.1.99.1/fb/fbcompose.c 2006-04-24 15:53:26.000000000 +0200 @@ -1,5 +1,5 @@ /* - * $XdotOrg: xserver/xorg/fb/fbcompose.c,v 1.26.6.6 2006/04/10 14:24:51 davidr Exp $ + * $XdotOrg: xserver/xorg/fb/fbcompose.c,v 1.26.6.7 2006/04/24 13:53:26 davidr Exp $ * $XFree86: xc/programs/Xserver/fb/fbcompose.c,v 1.17tsi Exp $ * * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. @@ -3647,8 +3647,8 @@ xFixed *params = pict->filter_params; INT32 cwidth = xFixedToInt(params[0]); INT32 cheight = xFixedToInt(params[1]); - int xoff = params[0] >> 1; - int yoff = params[1] >> 1; + int xoff = (params[0] - xFixed1) >> 1; + int yoff = (params[1] - xFixed1) >> 1; params += 2; for (i = 0; i < width; ++i) { if (!mask || mask[i] & maskBits) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/hw/xgl/glx/xglx.c new/xorg-server-1.1.99.1/hw/xgl/glx/xglx.c --- old/xorg-server-1.1.99.1/hw/xgl/glx/xglx.c 2006-04-18 23:14:44.000000000 +0200 +++ new/xorg-server-1.1.99.1/hw/xgl/glx/xglx.c 2006-04-26 03:38:34.000000000 +0200 @@ -379,6 +379,112 @@ #endif +static Bool +xglxExposurePredicate (Display *xdisplay, + XEvent *xevent, + char *args) +{ + return (xevent->type == Expose); +} + +static Bool +xglxNotExposurePredicate (Display *xdisplay, + XEvent *xevent, + char *args) +{ + return (xevent->type != Expose); +} + +static int +xglxWindowExposures (WindowPtr pWin, + pointer pReg) +{ + ScreenPtr pScreen = pWin->drawable.pScreen; + RegionRec ClipList; + + if (HasBorder (pWin)) + { + REGION_INIT (pScreen, &ClipList, NullBox, 0); + REGION_SUBTRACT (pScreen, &ClipList, &pWin->borderClip, + &pWin->winSize); + REGION_INTERSECT (pScreen, &ClipList, &ClipList, (RegionPtr) pReg); + (*pScreen->PaintWindowBorder) (pWin, &ClipList, PW_BORDER); + REGION_UNINIT (pScreen, &ClipList); + } + + REGION_INIT (pScreen, &ClipList, NullBox, 0); + REGION_INTERSECT (pScreen, &ClipList, &pWin->clipList, (RegionPtr) pReg); + (*pScreen->WindowExposures) (pWin, &ClipList, NullRegion); + REGION_UNINIT (pScreen, &ClipList); + + return WT_WALKCHILDREN; +} + +static void +xglxEnqueueEvents (void) +{ + ScreenPtr pScreen = currentScreen; + XEvent X; + xEvent x; + + while (XCheckIfEvent (xdisplay, &X, xglxNotExposurePredicate, NULL)) + { + switch (X.type) { + case KeyPress: + x.u.u.type = KeyPress; + x.u.u.detail = X.xkey.keycode; + x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); + mieqEnqueue (&x); + break; + case KeyRelease: + x.u.u.type = KeyRelease; + x.u.u.detail = X.xkey.keycode; + x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); + mieqEnqueue (&x); + break; + case ButtonPress: + x.u.u.type = ButtonPress; + x.u.u.detail = X.xbutton.button; + x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); + mieqEnqueue (&x); + break; + case ButtonRelease: + x.u.u.type = ButtonRelease; + x.u.u.detail = X.xbutton.button; + x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); + mieqEnqueue (&x); + break; + case MotionNotify: + x.u.u.type = MotionNotify; + x.u.u.detail = 0; + x.u.keyButtonPointer.rootX = X.xmotion.x; + x.u.keyButtonPointer.rootY = X.xmotion.y; + x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); + miPointerAbsoluteCursor (X.xmotion.x, X.xmotion.y, lastEventTime); + mieqEnqueue (&x); + break; + case EnterNotify: + if (X.xcrossing.detail != NotifyInferior) + { + if (pScreen) + { + NewCurrentScreen (pScreen, X.xcrossing.x, X.xcrossing.y); + x.u.u.type = MotionNotify; + x.u.u.detail = 0; + x.u.keyButtonPointer.rootX = X.xcrossing.x; + x.u.keyButtonPointer.rootY = X.xcrossing.y; + x.u.keyButtonPointer.time = lastEventTime = + GetTimeInMillis (); + mieqEnqueue (&x); + } + } + break; + default: + break; + } + } +} + static void xglxConstrainCursor (ScreenPtr pScreen, BoxPtr pBox) @@ -553,6 +659,12 @@ XWarpPointer (xdisplay, pScreenPriv->win, pScreenPriv->win, 0, 0, 0, 0, x, y); + if (generateEvent) + { + XSync (xdisplay, FALSE); + xglxEnqueueEvents (); + } + return TRUE; } @@ -891,47 +1003,6 @@ AddScreen (xglxScreenInit, argc, argv); } -static Bool -xglxExposurePredicate (Display *xdisplay, - XEvent *xevent, - char *args) -{ - return (xevent->type == Expose); -} - -static Bool -xglxNotExposurePredicate (Display *xdisplay, - XEvent *xevent, - char *args) -{ - return (xevent->type != Expose); -} - -static int -xglxWindowExposures (WindowPtr pWin, - pointer pReg) -{ - ScreenPtr pScreen = pWin->drawable.pScreen; - RegionRec ClipList; - - if (HasBorder (pWin)) - { - REGION_INIT (pScreen, &ClipList, NullBox, 0); - REGION_SUBTRACT (pScreen, &ClipList, &pWin->borderClip, - &pWin->winSize); - REGION_INTERSECT (pScreen, &ClipList, &ClipList, (RegionPtr) pReg); - (*pScreen->PaintWindowBorder) (pWin, &ClipList, PW_BORDER); - REGION_UNINIT (pScreen, &ClipList); - } - - REGION_INIT (pScreen, &ClipList, NullBox, 0); - REGION_INTERSECT (pScreen, &ClipList, &pWin->clipList, (RegionPtr) pReg); - (*pScreen->WindowExposures) (pWin, &ClipList, NullRegion); - REGION_UNINIT (pScreen, &ClipList); - - return WT_WALKCHILDREN; -} - static void xglxBlockHandler (pointer blockData, OSTimePtr pTimeout, @@ -973,64 +1044,7 @@ int result, pointer pReadMask) { - ScreenPtr pScreen = currentScreen; - XEvent X; - xEvent x; - - while (XCheckIfEvent (xdisplay, &X, xglxNotExposurePredicate, NULL)) - { - switch (X.type) { - case KeyPress: - x.u.u.type = KeyPress; - x.u.u.detail = X.xkey.keycode; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case KeyRelease: - x.u.u.type = KeyRelease; - x.u.u.detail = X.xkey.keycode; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case ButtonPress: - x.u.u.type = ButtonPress; - x.u.u.detail = X.xbutton.button; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case ButtonRelease: - x.u.u.type = ButtonRelease; - x.u.u.detail = X.xbutton.button; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - mieqEnqueue (&x); - break; - case MotionNotify: - x.u.u.type = MotionNotify; - x.u.u.detail = 0; - x.u.keyButtonPointer.rootX = X.xmotion.x; - x.u.keyButtonPointer.rootY = X.xmotion.y; - x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis (); - miPointerAbsoluteCursor (X.xmotion.x, X.xmotion.y, lastEventTime); - mieqEnqueue (&x); - break; - case EnterNotify: - if (X.xcrossing.detail != NotifyInferior) { - if (pScreen) { - NewCurrentScreen (pScreen, X.xcrossing.x, X.xcrossing.y); - x.u.u.type = MotionNotify; - x.u.u.detail = 0; - x.u.keyButtonPointer.rootX = X.xcrossing.x; - x.u.keyButtonPointer.rootY = X.xcrossing.y; - x.u.keyButtonPointer.time = lastEventTime = - GetTimeInMillis (); - mieqEnqueue (&x); - } - } - break; - default: - break; - } - } + xglxEnqueueEvents (); } static void ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...
participants (1)
-
root@suse.de