Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 11205)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 11206)
@@ -61,4 +61,6 @@
         this.model = model;
         popup = new JPopupMenu();
+        // prevent popup close on mouse wheel move
+        popup.addMouseWheelListener(MouseWheelEvent::consume);
 
         // just to add a border
@@ -82,7 +84,12 @@
 
     private void addSlider(JPanel content, FilterSlider<?> slider) {
-        content.add(new JLabel(slider.getIcon()), GBC.std().span(1, 2).insets(0, 0, 5, 0));
-        content.add(new JLabel(slider.getLabel()), GBC.eol());
-        content.add(slider, GBC.eop());
+        // wrap to a common content pane to allow for mouse wheel listener on label.
+        JPanel container = new JPanel(new GridBagLayout());
+        container.add(new JLabel(slider.getIcon()), GBC.std().span(1, 2).insets(0, 0, 5, 0));
+        container.add(new JLabel(slider.getLabel()), GBC.eol());
+        container.add(slider, GBC.eol());
+        content.add(container, GBC.eop());
+
+        container.addMouseWheelListener(slider::mouseWheelMoved);
         sliders.add(slider);
     }
@@ -177,5 +184,4 @@
 
             addChangeListener(e -> onStateChanged());
-            addMouseWheelListener(this::mouseWheelMoved);
         }
 
@@ -193,4 +199,9 @@
 
         protected void mouseWheelMoved(MouseWheelEvent e) {
+            e.consume();
+            if (!isEnabled()) {
+                // ignore mouse wheel in disabled state.
+                return;
+            }
             double rotation = e.getPreciseWheelRotation();
             double destinationValue = getValue() + rotation * SLIDER_WHEEL_INCREMENT;
@@ -201,5 +212,4 @@
             }
             setValue(Utils.clamp((int) destinationValue, getMinimum(), getMaximum()));
-            e.consume();
         }
 
@@ -271,4 +281,17 @@
 
         @Override
+        protected void mouseWheelMoved(MouseWheelEvent e) {
+            if (!isEnabled() && !filterLayers(model.getSelectedLayers()).isEmpty() && e.getPreciseWheelRotation() > 0) {
+                // make layer visible and set the value.
+                // this allows users to use the mouse wheel to make the layer visible if it was hidden previously.
+                e.consume();
+                setVisibleFlag(true);
+                setRealValue(0.05);
+            } else {
+                super.mouseWheelMoved(e);
+            }
+        }
+
+        @Override
         protected void applyValueToLayer(Layer layer) {
             layer.setOpacity(getRealValue());
