Opened 3 years ago
Closed 3 years ago
#6843 closed defect (fixed)
Toolbar button causes brief spurious window appearance
Reported by: | Tristan Croll | Owned by: | Greg Couch |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | UI | Version: | |
Keywords: | Cc: | Eric Pettersen, Tom Goddard | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.19041 ChimeraX Version: 1.4rc202205111743 (2022-05-11 17:43:38 UTC) Description Attaching a quick screen-capture of some weird behaviour, related to ISOLDE's control of buttons on the ribbon bar. If you watch the middle of the screen, every time I press the play/pause/resume button a small floating window briefly flashes up. I've tracked the cause of this down to the callbacks that change the button states - these just (a) disable the two currently-irrelevant buttons in the play/pause/resume group; (b) enable the relevant one; and (c) bring it to the top. Anyway, if I disable those the effect goes away. Log: > isolde shorthand Initialising ISOLDE-specific command aliases: Alias Equivalent full command ------------------------------------------------- st isolde step {arguments} aw isolde add water {arguments} awsf isolde add water {arguments} sim false al isolde add ligand {arguments} aa isolde add aa $1 sel {arguments} ht isolde mod his sel {arguments} so setattr sel atoms occupancy {arguments} ab isolde adjust bfactors {arguments} ss isolde sim start sel rt isolde release torsions sel {arguments} rd isolde release distances sel {arguments} ra rd; rt pf isolde pepflip sel cf isolde cisflip sel cbb color bfactor {arguments} cbo color byattr occupancy {arguments} cbc color {arguments} bychain; color {arguments} byhet cs clipper set contourSensitivity {arguments} UCSF ChimeraX version: 1.4rc202205111743 (2022-05-11) © 2016-2022 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > isolde demo crystal_intro > set selectionWidth 4 before.pdb title: Crystal structure of etub from clostridium kluyveri [more info...] Chain information for before.pdb #1 --- Chain | Description | UniProt A | predicted microcompartment protein | A5N734_CLOK5 before.pdb title: Crystal structure of etub from clostridium kluyveri [more info...] Chain information for before.pdb --- Chain | Description | UniProt 1.2/A | predicted microcompartment protein | A5N734_CLOK5 WARNING: multiple experimental reflection datasets found: (dataset) FOBS, SIGFOBS, (dataset) IOBS, SIGIOBS, (dataset) DANO, SIGDANO, (dataset) F(+), SIGF(+), F(-), SIGF(-), (dataset) I(+), SIGI(+), I(-), SIGI(-) Automatically choosing "(dataset) FOBS, SIGFOBS". Opened (LIVE) 2mFo-DFc as #1.1.1.2, grid size 36,36,34, pixel 0.723, shown at level 0.303, step 1, values float32 Opened (LIVE) mFo-DFc as #1.1.1.3, grid size 36,36,34, pixel 0.723, shown at level -0.0575,0.0575, step 1, values float32 Opened (LIVE) 2mFo-DFc_sharp_29 as #1.1.1.4, grid size 36,36,34, pixel 0.723, shown at level 0.603, step 1, values float32 Loaded crystallographic demo: PDB ID 3io0 ISOLDE: Checking and correcting nomenclature for (pseudo)symmetric side chains... ISOLDE: Corrected atom nomenclature of 12 residues in model #1.2 to IUPAC-IUB standards. Opened (LIVE) MDFF potential as #1.1.1.5, grid size 36,36,34, pixel 0.723, shown at level 0.366, step 1, values float32 > isolde sim start sel ISOLDE: started sim > isolde sim pause [Repeated 1 time(s)] > select clear > isolde sim resume > isolde sim pause > isolde sim resume > isolde sim pause > isolde sim resume > isolde sim pause OpenGL version: 3.3.0 NVIDIA 497.29 OpenGL renderer: NVIDIA GeForce RTX 2080/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.9.11 Locale: en_GB.cp1252 Qt version: PyQt6 6.3.0, Qt 6.3.0 Qt runtime version: 6.3.0 Qt platform: windows Manufacturer: Notebook Model: P7xxTM1 OS: Microsoft Windows 10 Education (Build 19041) Memory: 68,654,501,888 MaxProcessMemory: 137,438,953,344 CPU: 16 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz OSLanguage: en-GB Installed Packages: -: imerax-isolde -himerax-isolde: 1.4.dev0 alabaster: 0.7.12 appdirs: 1.4.4 Babel: 2.10.1 backcall: 0.2.0 blockdiag: 3.0.0 certifi: 2021.10.8 cftime: 1.6.0 charset-normalizer: 2.0.12 ChimeraX-AddCharge: 1.2.3 ChimeraX-AddH: 2.1.11 ChimeraX-AlignmentAlgorithms: 2.0 ChimeraX-AlignmentHdrs: 3.2.1 ChimeraX-AlignmentMatrices: 2.0 ChimeraX-Alignments: 2.4.3 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.0.2 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.0 ChimeraX-Atomic: 1.39.1 ChimeraX-AtomicLibrary: 7.0 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.1 ChimeraX-BasicActions: 1.1 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 2.1.1 ChimeraX-BondRot: 2.0 ChimeraX-BugReporter: 1.0 ChimeraX-BuildStructure: 2.7 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.1 ChimeraX-ButtonPanel: 1.0 ChimeraX-CageBuilder: 1.0 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.2 ChimeraX-ChemGroup: 2.0 ChimeraX-Clashes: 2.2.4 ChimeraX-Clipper: 0.18.0 ChimeraX-ColorActions: 1.0 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.1 ChimeraX-CommandLine: 1.2.3 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0 ChimeraX-Core: 1.4rc202205111743 ChimeraX-CoreFormats: 1.1 ChimeraX-coulombic: 1.3.2 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0 ChimeraX-DataFormats: 1.2.2 ChimeraX-Dicom: 1.1 ChimeraX-DistMonitor: 1.1.5 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ExperimentalCommands: 1.0 ChimeraX-FileHistory: 1.0 ChimeraX-FunctionKey: 1.0 ChimeraX-Geometry: 1.2 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.1 ChimeraX-Hbonds: 2.1.2 ChimeraX-Help: 1.2 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.1 ChimeraX-ISOLDE: 1.4.dev0 ChimeraX-ItemsInspection: 1.0 ChimeraX-Label: 1.1.1 ChimeraX-ListInfo: 1.1.1 ChimeraX-Log: 1.1.5 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.8.1 ChimeraX-Map: 1.1 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0 ChimeraX-MapFilter: 2.0 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1 ChimeraX-Markers: 1.0 ChimeraX-Mask: 1.0 ChimeraX-MatchMaker: 2.0.6 ChimeraX-MDcrds: 2.6 ChimeraX-MedicalToolbar: 1.0.1 ChimeraX-Meeting: 1.0 ChimeraX-MLP: 1.1 ChimeraX-mmCIF: 2.7 ChimeraX-MMTF: 2.1 ChimeraX-Modeller: 1.5.5 ChimeraX-ModelPanel: 1.3.2 ChimeraX-ModelSeries: 1.0 ChimeraX-Mol2: 2.0 ChimeraX-Morph: 1.0 ChimeraX-MouseModes: 1.1 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nucleotides: 2.0.2 ChimeraX-OpenCommand: 1.9 ChimeraX-PDB: 2.6.6 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0.2 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1 ChimeraX-PubChem: 2.1 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-ResidueFit: 1.0 ChimeraX-RestServer: 1.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 2.0.1 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.5 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.6 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0 ChimeraX-Shortcuts: 1.1 ChimeraX-ShowAttr: 1.0 ChimeraX-ShowSequences: 1.0 ChimeraX-SideView: 1.0 ChimeraX-Smiles: 2.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.8 ChimeraX-STL: 1.0 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.0.1 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0 ChimeraX-SwapAA: 2.0 ChimeraX-SwapRes: 2.1.1 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.1.1 ChimeraX-ToolshedUtils: 1.2.1 ChimeraX-Tug: 1.0 ChimeraX-UI: 1.18.2 ChimeraX-uniprot: 2.2 ChimeraX-UnitCell: 1.0 ChimeraX-ViewDockX: 1.1.2 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0 ChimeraX-WebServices: 1.1.0 ChimeraX-Zone: 1.0 colorama: 0.4.4 comtypes: 1.1.10 cxservices: 1.2 cycler: 0.11.0 Cython: 0.29.26 debugpy: 1.6.0 decorator: 5.1.1 docutils: 0.17.1 entrypoints: 0.4 filelock: 3.4.2 fonttools: 4.33.3 funcparserlib: 1.0.0 grako: 3.16.5 h5py: 3.6.0 html2text: 2020.1.16 idna: 3.3 ihm: 0.27 imagecodecs: 2021.11.20 imagesize: 1.3.0 ipykernel: 6.6.1 ipython: 7.31.1 ipython-genutils: 0.2.0 jedi: 0.18.1 Jinja2: 3.0.3 jupyter-client: 7.1.0 jupyter-core: 4.10.0 kiwisolver: 1.4.2 line-profiler: 3.4.0 lxml: 4.7.1 lz4: 3.1.10 MarkupSafe: 2.1.1 matplotlib: 3.5.1 matplotlib-inline: 0.1.3 msgpack: 1.0.3 nest-asyncio: 1.5.5 netCDF4: 1.5.8 networkx: 2.6.3 numexpr: 2.8.1 numpy: 1.22.1 openvr: 1.16.802 packaging: 21.3 ParmEd: 3.4.3 parso: 0.8.3 pickleshare: 0.7.5 Pillow: 9.0.1 pip: 21.3.1 pkginfo: 1.8.2 prompt-toolkit: 3.0.29 psutil: 5.9.0 pycollada: 0.7.2 pydicom: 2.2.2 Pygments: 2.11.2 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 3.0.9 PyQt6-commercial: 6.3.0 PyQt6-Qt6: 6.3.0 PyQt6-sip: 13.3.1 PyQt6-WebEngine-commercial: 6.3.0 PyQt6-WebEngine-Qt6: 6.3.0 python-dateutil: 2.8.2 pytz: 2022.1 pywin32: 303 pyzmq: 22.3.0 qtconsole: 5.3.0 QtPy: 2.1.0 RandomWords: 0.3.0 requests: 2.27.1 scipy: 1.7.3 setuptools: 59.8.0 sfftk-rw: 0.7.2 six: 1.16.0 snowballstemmer: 2.2.0 sortedcontainers: 2.4.0 Sphinx: 4.3.2 sphinx-autodoc-typehints: 1.15.2 sphinxcontrib-applehelp: 1.0.2 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 1.0.2 sphinxcontrib-htmlhelp: 2.0.0 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 1.0.3 sphinxcontrib-serializinghtml: 1.1.5 suds-community: 1.0.0 tables: 3.7.0 tifffile: 2021.11.2 tinyarray: 1.2.4 tornado: 6.1 traitlets: 5.2.0 urllib3: 1.26.9 wcwidth: 0.2.5 webcolors: 1.11.1 wheel: 0.37.1 wheel-filename: 1.3.0 WMI: 1.5.1 File attachment: 2022-05-12 19-05-21.mkv
Attachments (3)
Change History (16)
by , 3 years ago
Attachment: | 2022-05-12 19-05-21.mkv added |
---|
comment:1 by , 3 years ago
Cc: | added |
---|---|
Component: | Unassigned → UI |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Toolbar button causes brief spurious window appearance |
comment:2 by , 3 years ago
The icon is changed with QToolbarButton::setDefaultAction to the existing action corresponding to the button that will be shown. Need to develop a simple test case that can be reported to the Qt company.
comment:3 by , 3 years ago
Maybe you can in addition to disabling the unused buttons, hide them. Often there is some trick that can work around these Qt glitches.
comment:4 by , 3 years ago
The toolbar API doesn't currently provide the option to hide buttons. Anyway, this might be specific to Windows... it isn't happening in my Linux build (in ChimeraX 1.4rc202205060510), in any case. Haven't done a Mac build since I started rebuilding ISOLDE's GUI, so can't comment on that.
comment:5 by , 3 years ago
A Qt work-around could go into the Toolbar code that undisplays the buttons. I was just suggesting that Tristan or Greg could try inserting that kind of extra line of Qt code -- I've done this monkey business pretty often with Qt to work around its glitches -- usually appearance problems on specific platforms (Mac most often).
follow-up: 5 comment:6 by , 3 years ago
Status: | assigned → feedback |
---|
There are no plans to ever provide a toolbar API to hide a button.
Perhaps the glitch could be handled by running the event loop until the toolbar has been updated, so the displaying/undisplaying becaomes a no-op. Tristan, since you can reproduce this behavior, try adding:
from Qt.QtCore import QEventLoop QEventLoop().processEvents(QEventLoop.ExcludeUserInputEvents)
at the end of site-packages/chimerax/ui/widgets/tabbedtoolbar.py's TabbedToolbar.show_group_button method (near line 520).
It might not be enough if a QTimer goes off while it is updating, but I don't completely understand how Qt events work.
comment:7 by , 3 years ago
I strongly (very strongly) suggest not running the Qt event loop. We have done this in other places of the code in the past and every time they led to crashes and hard to debug errors because the sub-eventloop processing allows things like redrawing to happen when the code is not expecting it. It is really a recipe for disaster to run sub-eventloops, so even if it fixes your problem it will create a much more serious problem.
follow-up: 7 comment:8 by , 3 years ago
I still like to know if that fixes the problem. It's not a full event loop, it would only be processing outstanding events. And in this case, it would be okay if redrawing the graphics took place -- an extra frame before the "pause" button takes affect is fine.
comment:9 by , 3 years ago
I'm afraid that didn't make a difference - the transient popup still happens.
comment:10 by , 3 years ago
Ah - I think I know what's going on. It's not the group button being pushed to the top, it's enabling/disabling that's the culprit. Specifically, changing the enabled state of more than one button in the same iteration of the event loop (I think because each call to set_enabled()
triggers a call to _redo_layout()
by default). Will see what happens if I change ISOLDE's calls to use set_enabled(redo=False)
.
comment:11 by , 3 years ago
That makes sense. You also don't necessary need to disable any of the buttons. If it is already paused, then pause is a no-op.
comment:12 by , 3 years ago
Didn't realise that the "set_enabled" method with the "redo" keyword option wasn't exposed to the API. The buttons I'm enabling/disabling aren't just those in the button group - they're various others that (e.g.) only make sense when a simulation is running, or when a single residue is selected. I could of course just have them do nothing when clicked under the wrong circumstances, but I find judicious enabling/disabling really helps guide the user to the "right" way of doing things.
The attached diff is a minimal hack that "fixes" the spurious-window problem (I wonder if it might be better to hand it the session
object so it can use the "new frame" trigger instead?)... but it also unmasked a different bug: _redo_layout()
pushes the "original top" button back to the top of a group. Wasn't seeing that before because I happened to be doing all the enable/disable calls before setting the group order.
comment:13 by , 3 years ago
Resolution: | → fixed |
---|---|
Status: | feedback → closed |
Fixed with alternative fix that avoid recreating the buttons when setting if a button is enabled or not. Put in 1.4 release candidate too.
Added by email2trac