Skip to content

Commit

Permalink
SegmentedView no longer sucks up mouseDown events that originate outs…
Browse files Browse the repository at this point in the history
…ide of a segment, allowing (e.g.) PalettePane to be dragged around. Includes unit test.
  • Loading branch information
dcporter committed Feb 11, 2014
1 parent e1078cb commit 5ac17ed
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
15 changes: 15 additions & 0 deletions frameworks/desktop/tests/views/segmented/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -521,4 +521,19 @@ var pane;
ok(view3.$().hasClass('sel'), 'The third segment should have a sel class on mouseUp');
});

test("passes on mouse events that don't map to a segment", function() {
var segmentedView, view1, layer1, point, ev;

segmentedView = pane.view('3_items,2_sel,1_disabled');
view1 = segmentedView.get('childViews').objectAt(0); // $('.sc-segment-view')[0];
layer1 = view1.get('layer');
point = SC.offset(layer1);

ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x, clientY: point.y });
ok(segmentedView.mouseDown(ev), "mouseDown event handler accepts event which maps to a segment.");

ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x - 1, clientY: point.y });
ok(!segmentedView.mouseDown(ev), "mouseDown event handler passes on event which doesn't map to a segment.");
})

})();
10 changes: 7 additions & 3 deletions frameworks/desktop/views/segmented.js
Original file line number Diff line number Diff line change
Expand Up @@ -812,7 +812,7 @@ SC.SegmentedView = SC.View.extend(SC.Control,
overflowIndex = childViews.get('length') - 1,
index;

if (!this.get('isEnabledInPane')) return YES; // nothing to do
if (!this.get('isEnabledInPane')) return YES; // nothing to do // TODO: return NO?

index = this.displayItemIndexForEvent(evt);
if (index >= 0) {
Expand All @@ -823,9 +823,13 @@ SC.SegmentedView = SC.View.extend(SC.Control,
// if mouse was pressed on the overflow segment, popup the menu
if (index === overflowIndex) this.showOverflowMenu();
else this._isMouseDown = YES;
}

return YES;
return YES;
}
// If this event originated outside of a segment, pass the event along up.
else {
return NO;
}
},

/** @private */
Expand Down

0 comments on commit 5ac17ed

Please sign in to comment.