Bug 31656 - Incorrect Screen Refresh after Moving a Pixmap Cursor Larger than 64x64 Pixels
Summary: Incorrect Screen Refresh after Moving a Pixmap Cursor Larger than 64x64 Pixels
Status: RESOLVED INVALID
Alias: None
Product: xorg
Classification: Unclassified
Component: Server/General (show other bugs)
Version: 7.5 (2009.10)
Hardware: All Linux (All)
: high critical
Assignee: Xorg Project Team
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-16 02:47 UTC by hjakob
Modified: 2018-06-12 18:44 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
source file of test program that can reproduce the bug (24.47 KB, text/x-csrc)
2010-11-16 02:47 UTC, hjakob
no flags Details

Description hjakob 2010-11-16 02:47:18 UTC
Created attachment 40304 [details]
source file of test program that can reproduce the bug

Please use a multi-monitor configuration with different display addresses (:0.0, :0.1, ...) with at least 2 screens.

If a pixmap cursor is created and it is larger than 64x64 pixels, then there will be only one screen which everything will be ok on (mostly :0.0 but not always) but the other screens will show the following problem:

If you move that pixmap cursor, the underlying window content will not be restored correctly.
It seems that the content of the window that lies at the origin of the root window is always used to restore the window content that the cursor has passed over (like XCoypArea()), independently from the actual cursor coordinates which seem to get lost or replaced by (0, 0). The cursor move leaves behind a track of pixmaps taken from the (0, 0)-pixmap.

The error occurs on OpenSuse 11.3 with X.Org version "X.Org X Server 1.8.0 Release Date: 2010-04-02"
and also on Ubuntu 10.04 with X.Org version 
"X.Org X Server 1.7.6 Release Date: 2010-03-17 Build Operating System: Linux 2.6.24-27-server i686 Ubuntu".
I think that means both use Xorg 7.5.

The error occurs e.g. on HP-Z400 with graphics card Nvidia NVS 450 and
with 2 or 3 connected screen, each with a size of 2560x1600 pixels.
The error also occurs with graphics card Nvidia NVS 295 and with 2 connected screens with a resolution 0f 1600x1200 Pixels.
Since the error will not occur on OpenSuse 11.3 if an older xorg version <= 7.2 is used, it is obviously a bug in the Xserver itself and not in a driver.
As the bug appears at least on Ubuntu and Suse Linux, it is widely spread and does not seem to be restricted to the above mentioned hardware configurations.

If the pixmap cursor does not exceed 64x64 pixels everything will be ok.

In order to reproduce the error I wrote a test program called xpixmapcursoronoff. 
It consists of the attached file xpixmapcursoronoff.c and can be compiled on Linux as follows:

  gcc -o xpixmapcursoronoff -g xpixmapcursoronoff.c -lXtst -lXext   -lX11 -lXi -I/usr/openwin/include


The error can be reproduced as follows:

- You need Xorg 7.5 and at least two screens which must be configured with different display addresses (:0.0, :0.1, ...).

- Please start 

   xpixmapcursoronoff 

    or

   xpixmapcursoronoff -bitmap 0
   
  The program automatically starts an active cursor grab and keyboard grab and installs a pixmap cursor with a size of 64x72 pixels. By moving the cursor on several screens you will see that the underlying window content will only be restored correctly on one screen but not on the other ones.
The grab can be toggled by pressing a mouse button. The program can be finished by pressing q or with the window manager layout.

  If you start xpixmapcursoronoff -bitmap 2 the program installs a pixmap cursor with a size of 64x64 pixels and everything will be ok.
Comment 1 Adam Jackson 2018-06-12 18:44:26 UTC
Mass closure: This bug has been untouched for more than six years, and is not obviously still valid. Please file a new report if you continue to experience issues with a current server.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.