iflp1908sl commited on
Commit
4bea2a3
·
1 Parent(s): c10cf61

Refine 3Dmol.js interactions: avoid duplicate listeners and improve click handling

Browse files
Files changed (1) hide show
  1. app.py +8 -7
app.py CHANGED
@@ -361,6 +361,9 @@ THREEDMOL_HEAD = """
361
  else {
362
  _viewer = $3Dmol.createViewer(el, {backgroundColor: '0xffffff'});
363
  _viewer.setClickable(true);
 
 
 
364
  }
365
  }
366
 
@@ -479,18 +482,16 @@ THREEDMOL_HEAD = """
479
  model.setHoverable(true);
480
  }
481
 
482
- _viewer.on('click', function(atom, event) {
483
- if (atom) handleAtomClick(atom, event);
484
- });
485
-
486
  // Disable context menu on the viewer to allow right-click deselection
487
  var el = document.getElementById('mol3d-container');
488
  el.oncontextmenu = function(e) {
489
  e.preventDefault();
490
- // If we didn't hit an atom (handled by handleAtomClick), we clear all
491
  if (_selectedAtoms.length > 0) {
492
- // Find if there's an atom under cursor? 3Dmol's oncontextmenu is tricky.
493
- // For now, simpler: right click always clears if no atom hit.
 
 
 
494
  }
495
  return false;
496
  };
 
361
  else {
362
  _viewer = $3Dmol.createViewer(el, {backgroundColor: '0xffffff'});
363
  _viewer.setClickable(true);
364
+ _viewer.on('click', function(atom, event) {
365
+ if (atom && atom.index !== undefined) handleAtomClick(atom, event);
366
+ });
367
  }
368
  }
369
 
 
482
  model.setHoverable(true);
483
  }
484
 
 
 
 
 
485
  // Disable context menu on the viewer to allow right-click deselection
486
  var el = document.getElementById('mol3d-container');
487
  el.oncontextmenu = function(e) {
488
  e.preventDefault();
 
489
  if (_selectedAtoms.length > 0) {
490
+ // If we right-clicked but handleAtomClick didn't catch an atom, clear all
491
+ // We use a small delay to see if handleAtomClick triggers first
492
+ setTimeout(() => {
493
+ if (_selectedAtoms.length > 0) clearSelections();
494
+ }, 50);
495
  }
496
  return false;
497
  };