Ugly busy cursor in Thunderbird 9

Bug #901838 reported by Chris Coulson on 2011-12-08
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Mozilla Firefox
Fix Released
Low
firefox (Ubuntu)
Undecided
Unassigned
Oneiric
Undecided
Unassigned
thunderbird (Ubuntu)
Low
Chris Coulson
Oneiric
Medium
Chris Coulson

Bug Description

Something changed starting in Thunderbird 9, and it now displays a fairly ugly black busy cursor briefly when refreshing mailboxes

ProblemType: Bug
DistroRelease: Ubuntu 12.04
Package: thunderbird 9.0~b2+build1-0ubuntu1
ProcVersionSignature: Ubuntu 3.1.0-2.3-generic 3.1.0
Uname: Linux 3.1.0-2-generic x86_64
AddonCompatCheckDisabled: True
AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
ApportVersion: 1.26-0ubuntu1
Architecture: amd64
AudioDevicesInUse:
 USER PID ACCESS COMMAND
 /dev/snd/controlC1: chr1s 2822 F.... pulseaudio
 /dev/snd/controlC0: chr1s 2822 F.... pulseaudio
BuildID: 20111124160109
CRDA: Error: [Errno 2] No such file or directory
Card0.Amixer.info:
 Card hw:0 'Intel'/'HDA Intel at 0xf6960000 irq 45'
   Mixer name : 'Intel IbexPeak HDMI'
   Components : 'HDA:111d76d5,1028040a,00100104 HDA:80862804,80860101,00100000'
   Controls : 23
   Simple ctrls : 12
Card1.Amixer.info:
 Card hw:1 'Headset'/'Logitech Logitech USB Headset at usb-0000:00:1a.0-1.2.1.3, full speed'
   Mixer name : 'USB Mixer'
   Components : 'USB046d:0a0b'
   Controls : 6
   Simple ctrls : 2
Channel: beta
Date: Thu Dec 8 19:47:29 2011
DefaultProfileIncompatibleExtensions:
 CouchDB addressbook integration - <email address hidden>, Version=0.0.1, minVersion=3.3a1pre, maxVersion=9.0a1, Location=app-global, Type=extension, Active=Yes
 Developer Assistant - ID={75739dec-72db-4020-aa9a-6afa6744759b}, Version=0.3.0.20110927, minVersion=3.0, maxVersion=9.0a1, Location=app-profile, Type=extension, Active=Yes
DefaultProfilePlugins:
 IcedTea-Web Plugin (using IcedTea-Web 1.1.4 (1.1.4-1ubuntu2)) - Lib=IcedTeaPlugin.so, Location=/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64
 VLC Multimedia Plug-in - Lib=libvlcplugin.so, Location=/usr/lib/mozilla/plugins
 Shockwave Flash - Lib=libflashplayer.so, Location=/usr/lib/adobe-flashplugin
 Gnome Shell Integration - Lib=libgnome-shell-browser-plugin.so, Location=/usr/lib/mozilla/plugins
 iTunes Application Detector - Lib=librhythmbox-itms-detection-plugin.so, Location=/usr/lib/mozilla/plugins
ForcedLayersAccel: False
IfupdownConfig:
 auto lo
 iface lo inet loopback
InstallationMedia: Ubuntu 11.10 "Oneiric Ocelot" - Beta amd64 (20110901)
IpRoute:
 default via 192.168.0.1 dev eth0 proto static
 169.254.0.0/16 dev wlan0 scope link metric 1000
 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.3 metric 1
 192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.2 metric 2
Profile1Plugins:
 Gnome Shell Integration - Lib=libgnome-shell-browser-plugin.so, Location=/usr/lib/mozilla/plugins
 VLC Multimedia Plug-in - Lib=libvlcplugin.so, Location=/usr/lib/mozilla/plugins
 Shockwave Flash - Lib=libflashplayer.so, Location=/usr/lib/adobe-flashplugin
 IcedTea-Web Plugin (using IcedTea-Web 1.1.3 (1.1.3-1ubuntu1)) - Lib=IcedTeaPlugin.so, Location=/usr/lib/jvm/java-6-openjdk/jre/lib/amd64
 iTunes Application Detector - Lib=librhythmbox-itms-detection-plugin.so, Location=/usr/lib/mozilla/plugins
Profiles:
 Profile0 (Default) - LastVersion=9.0/20111124160109 (Running)
 Profile1 - LastVersion=8.0/20111103153249 (Out of date)
RunningIncompatibleAddons: True
SourcePackage: thunderbird
UpgradeStatus: Upgraded to precise on 2011-11-16 (22 days ago)
dmi.bios.date: 02/15/2011
dmi.bios.vendor: Dell Inc.
dmi.bios.version: A07
dmi.board.name: 04373Y
dmi.board.vendor: Dell Inc.
dmi.board.version: A03
dmi.chassis.type: 9
dmi.chassis.vendor: Dell Inc.
dmi.modalias: dmi:bvnDellInc.:bvrA07:bd02/15/2011:svnDellInc.:pnLatitudeE6410:pvr0001:rvnDellInc.:rn04373Y:rvrA03:cvnDellInc.:ct9:cvr:
dmi.product.name: Latitude E6410
dmi.product.version: 0001
dmi.sys.vendor: Dell Inc.

Chris Coulson (chrisccoulson) wrote :
Changed in thunderbird (Ubuntu Oneiric):
importance: Undecided → Medium
status: New → Triaged
Changed in thunderbird (Ubuntu):
assignee: nobody → Chris Coulson (chrisccoulson)
Changed in thunderbird (Ubuntu Oneiric):
assignee: nobody → Chris Coulson (chrisccoulson)

Created attachment 580512
Video of the "spinning" cursor in Thunderbird 8

I've noticed whilst running Thunderbird 9 beta that when my mailboxes refresh, my mouse pointer changes to a really ugly busy cursor. In Thunderbird 8, the cursor seemed to not look too bad.

I just rebuilt the latest comm-beta after reverting http://hg.mozilla.org/releases/mozilla-beta/rev/875cb4f20eac, and it seems to fix it. I've not fully investigated why this patch would break it just yet.

The less attractive spinning cursor also appears occasionally in Firefox too, although it appears a lot more in Thunderbird.

This can be easily reproduced in Firefox or Thunderbird by using a JS shell and doing window.setCursor("spinning"). I've attached 2 videos of me doing this before and after reverting the mentioned patch

Created attachment 580514
Video of the "spinning" cursor in Thunderbird 9 (broken)

Changed in firefox:
importance: Unknown → Low
status: Unknown → Confirmed
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in firefox (Ubuntu Oneiric):
status: New → Confirmed
Changed in firefox (Ubuntu):
status: New → Confirmed

Ok, so this is a side-effect of no longer using gdk_cursor_new_from_pixmap (as it's not available in GTK3).

gdk_cursor_new_from_pixmap uses XCreatePixmapCursor to create a cursor, and this does some magic via libxcursor to match a hash of the cursor bitmap to a themed pointer (left_ptr_watch), which gave us the nice looking pointer. There doesn't seem to be any support in xlib or gdk for creating a pointer of this type with any other mechanism though :(

Is gdk_cursor_new_from_name() an option?

FWIW, I removed that code, because we got rid of pixmaps in GTK3. I certainly did not intend to remove any functionality previously available, nor do I think I did that. Of course, it made some things different and possibly even harder.

From looking at the patch, I can't understand why it would break either though, because gdk_cursor_new_from_pixmap() cannot be used to create animated cursors afaics.

I guess what I'm saying is: If there's functionality missing in GTK, poke us so we can add it back.

Oh, I'm just now seeing the explanation in comment 2. Do you have a cgit link to the X code for this handy? Because this sounds like something really really ugly inside X (wow, what a surprise ;))

Looks like this is the Xcursor code:
http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/src/xlib.c?id=e086eb1bf49f2a8c270eaebd5beb595c1dc2973e#n415

gdk_cursor_new_from_name() also uses XcursorLibraryLoadCursor(), so it should be possible to get the same behavior.

If the cursor can also be found under the "left_ptr_watch" name then that would be preferable for the lookup. As a last resort, the name from the hash can be used.

Looks like a left_ptr_watch lookup should be the same as a 08e8e1c95fe2fc01f976f1e063a24ccd.

http://cgit.freedesktop.org/xorg/data/cursors/tree/handhelds/Makefile.cfg

I guess we can't be certain the lookup will succeed, so we'd still have to fallback to the pixbuf.

Yeah, I think the solution is to try a new_from_name() first for all cursors and if that returns NULL fall back to the image (or the default cursor if you're reasonably sure everybody supports the cursor you care about).

Created attachment 580970
Try creating a named cursor before a bitmap cursor

Created attachment 580971
Try creating a named cursor before a bitmap cursor

Oops, that wasn't the most recent version

Comment on attachment 580971
Try creating a named cursor before a bitmap cursor

Thanks very much.

Comment on attachment 580971
Try creating a named cursor before a bitmap cursor

>+ { moz_none_bits, moz_none_mask_bits, 0, 0, NULL }

> newType = MOZ_CURSOR_NONE;
> break;

>+ // If by now we don't have a xcursor, this means we have to make a custom
>+ // one. First, we try creating a named cursor based on the hash of our
>+ // custom bitmap, as libXcursor has some magic to convert bitmapped cursors
>+ // to themed cursors
>+ if (newType != 0xFF) {
>+ gdkcursor = gdk_cursor_new_from_name(gdk_display_get_default(),
>+ GtkCursors[newType].hash);

Doesn't this need to check that hash is non-null?

Created attachment 581198
Try creating a named cursor before a bitmap cursor (v2)

Good catch, thanks

Changed in firefox:
status: Confirmed → Fix Released
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package firefox - 9.0~b6+build1-0ubuntu1

---------------
firefox (9.0~b6+build1-0ubuntu1) precise; urgency=low

  * New upstream release from the beta channel (FIREFOX_9_0b6_BUILD1)

  [ Jamie Strandboge <email address hidden> ]
  * add debian/usr.bin.firefox.apparmor.12.04 and adjust it to declare a
    @{MOZ_LIBDIR} which will help with overrides
  * debian/rules: adjust to install the profile on 12.04
  * debian/usr.bin.firefox.apparmor.12.04: don't use @{MOZ_LIBDIR} variable
    for the binary names

  [ Chris Coulson <email address hidden> ]
  * Fix LP: #901838 - Ugly busy pointer, due to libxcursor no longer matching
    the cursor bitmap to a nice themed pointer
    - add debian/patches/fix-cursor-handling.patch
    - update debian/patches/series
 -- Chris Coulson <email address hidden> Thu, 15 Dec 2011 14:00:30 +0000

Changed in firefox (Ubuntu):
status: Confirmed → Fix Released
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package thunderbird - 9.0~b5+build1-0ubuntu1

---------------
thunderbird (9.0~b5+build1-0ubuntu1) precise; urgency=low

  * New upstream release from the beta channel (THUNDERBIRD_9_0b5_BUILD1)

  * Fix LP: #901838 - Ugly busy pointer, due to libxcursor no longer matching
    the cursor bitmap to a nice themed pointer
    - add debian/patches/fix-cursor-handling.patch
    - update debian/patches/series
 -- Chris Coulson <email address hidden> Thu, 15 Dec 2011 15:38:31 +0000

Changed in thunderbird (Ubuntu):
status: Triaged → Fix Released
Changed in thunderbird (Ubuntu Oneiric):
status: Triaged → Fix Committed
Changed in firefox (Ubuntu Oneiric):
status: Confirmed → Fix Committed

*** Bug 693517 has been marked as a duplicate of this bug. ***

Please nominate for Beta 10 approval if this fix is considered low risk.

Launchpad Janitor (janitor) wrote :

This bug was fixed in the package firefox - 9.0.1+build1-0ubuntu0.11.10.2

---------------
firefox (9.0.1+build1-0ubuntu0.11.10.2) oneiric-security; urgency=low

  * New upstream stable release (FIREFOX_9_0_1_BUILD1)
    - see LP: #906389 for USN information

  * Update globalmenu-extension to 2.0.2
  * Install the Apport hook as a source package hook
    - rename debian/apport/firefox.py.in => debian/apport/source_firefox.py.in
    - update debian/firefox.install.in
    - update debian/rules
  * Don't unconditionally overwrite SourcePackage when reporting bugs with
    the nightly apport hook
    - update debian/apport/source_firefox.py.in
  * Set "Channel = Unavailable" if channel-prefs.js doesn't contain a
    channel name
    - update debian/apport/source_firefox.py.in
  * Ensure that create-tarball can handle there not being a locale blacklist
    - update debian/build/create-tarball.py
  * Drop xpt.py and xpidl from $LIBDIR. xpidl is gone, and xpt.py isn't included
    there in the upstream SDK
    - update debian/firefox-dev.links.in
  * Refresh patches
    - update debian/patches/firefox-kde.patch
    - update debian/patches/mozilla-kde.patch
  * Drop patches fixed upstream
    - remove debian/patches/only-add-ENABLE_JIT-to-CXXFLAGS-if-jit-is-enabled.patch
    - remove debian/patches/correctly-handle-EOF.patch
    - update debian/patches/series
  * Fix LP: #901838 - Ugly busy pointer, due to libxcursor no longer matching
    the cursor bitmap to a nice themed pointer
    - add debian/patches/fix-cursor-handling.patch
    - update debian/patches/series
  * Disable the tests on powerpc due to an unknown failure
    - update debian/rules

  [ Micah Gersten <email address hidden> ]
  * Add patch from upstream to fix PowerPC FTBFS (bmo: 703534) aka
    Build failure on platforms without YARR JIT
    - add debian/patches/fix-build-failure-without-yarr-jit.patch
    - update debian/patches/series
 -- Chris Coulson <email address hidden> Wed, 28 Dec 2011 02:36:10 -0600

Changed in firefox (Ubuntu Oneiric):
status: Fix Committed → Fix Released
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package thunderbird - 9.0+build2-0ubuntu0.11.10.1

---------------
thunderbird (9.0+build2-0ubuntu0.11.10.1) oneiric-security; urgency=low

  * New upstream stable release (THUNDERBIRD_9_0_BUILD2)
    - see LP: #909599 for USN information

  [ Chris Coulson <email address hidden> ]
  * Update globalmenu-extension to 2.0.2
  * Update eds integration to 0.3.9
  * Don't unconditionally overwrite SourcePackage when reporting bugs with
    the nightly apport hook
    - update debian/apport/source_thunderbird.py.in
  * Set "Channel = Unavailable" if channel-prefs.js doesn't contain a
    channel name
    - update debian/apport/source_thunderbird.py.in
  * Ensure that create-tarball can handle there not being a locale blacklist
    - update debian/build/create-tarball.py
  * Use makedirs to create the local cache directory
    - update debian/build-create-tarball.py
  * Drop patches fixed upstream:
    - remove debian/patches/only-add-ENABLE_JIT-to-CXXFLAGS-if-jit-is-enabled.patch
    - update debian/patches/series
  * Refresh patches
    - update debian/patches/theme-resfresh-addressbook-toolbar-icons.patch
  * Drop xpt.py and xpidl from $LIBDIR. xpidl is gone, and xpt.py isn't included
    there in the upstream SDK
    - update debian/thunderbird-dev.links.in
  * Fix LP: #901838 - Ugly busy pointer, due to libxcursor no longer matching
    the cursor bitmap to a nice themed pointer
    - add debian/patches/fix-cursor-handling.patch
    - update debian/patches/series

  [ Micah Gersten <email address hidden> ]
  * Add patch from upstream to fix PowerPC FTBFS (bmo: 703534) aka
    Build failure on platforms without YARR JIT
    - add debian/patches/fix-build-failure-without-yarr-jit.patch
    - update debian/patches/series
 -- Chris Coulson <email address hidden> Thu, 29 Dec 2011 01:55:08 -0600

Changed in thunderbird (Ubuntu Oneiric):
status: Fix Committed → Fix Released

Comment on attachment 581198
Try creating a named cursor before a bitmap cursor (v2)

[Approval Request Comment]
User impact if declined: Regression in aspect of various mouse cursors not following the system theme on Linux systems in Firefox with ui.use_activity_cursor set to true, and in Thunderbird.
Fix Landed on Version: 11
Risk to taking this patch (and alternatives if risky):
String changes made by this patch: None

(In reply to Mike Hommey [:glandium] from comment #17)
> Risk to taking this patch (and alternatives if risky):

(forgot to fill here) very low risk, and has been tested widely for a while now (since it was released in 11). It would be nice if it was applied on ESR, though.

Comment on attachment 581198
Try creating a named cursor before a bitmap cursor (v2)

this didn't make it into beta 10 and it doesn't meet the criteria for ESR.

To post a comment you must log in.