diff options
author | Gerald Combs <gerald@wireshark.org> | 2018-01-31 11:26:18 -0800 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2018-02-01 14:04:25 +0000 |
commit | c84b0aeead7cfaf595b546b99ff8bb73f73c8fc5 (patch) | |
tree | f99772f7a6bfba8821c68a246579583173df2f8d /ui/qt/widgets | |
parent | d3e50fedf744a7fbef9535c750f0eafe5f6f83b7 (diff) |
Qt: More byte view and proto tree fixes.
47e1798762 broke byte view highlighting when selecting a proto tree
item. Switch back to emitting fieldSelected from selectionChanged. Force
a new selection in selectedFieldChanged, which does what we were trying
to do in 47e1798762.
Clear our marked byte offset in the byte view when we mark a field. Emit
byteSelected whenever we click the mouse.
Don't highlight anything when a tree item is deselected. Deselect a tree
item if we click on something that's not a byte in the byte view.
Change-Id: Ibf419ccb005d69f733b2fe12ce674e1fe504bb96
Reviewed-on: https://code.wireshark.org/review/25541
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/qt/widgets')
-rw-r--r-- | ui/qt/widgets/byte_view_text.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/ui/qt/widgets/byte_view_text.cpp b/ui/qt/widgets/byte_view_text.cpp index ed16261391..cd6eada7f2 100644 --- a/ui/qt/widgets/byte_view_text.cpp +++ b/ui/qt/widgets/byte_view_text.cpp @@ -147,6 +147,9 @@ void ByteViewText::markField(int start, int length, bool scroll_to) { field_start_ = start; field_len_ = length; + // This might be called as a result of (de)selecting a proto tree + // item, so take us out of marked mode. + marked_byte_offset_ = -1; if (scroll_to) { scrollToByte(start); } @@ -264,17 +267,26 @@ void ByteViewText::mousePressEvent (QMouseEvent *event) { return; } - if (marked_byte_offset_ < 0) { - // Marked mode. - marked_byte_offset_ = byteOffsetAtPixel(event->pos()); + // byteSelected does the following: + // - Triggers selectedFieldChanged in ProtoTree, which clears the + // selection and selects the corresponding (or no) item. + // - The new tree selection triggers markField, which clobbers + // marked_byte_offset_. + + const bool hover_mode = marked_byte_offset_ < 0; + const int byte_offset = byteOffsetAtPixel(event->pos()); + setUpdatesEnabled(false); + emit byteSelected(byte_offset); + if (hover_mode && byte_offset >= 0) { + // Switch to marked mode. hovered_byte_offset_ = -1; - emit byteSelected(marked_byte_offset_); + marked_byte_offset_ = byte_offset; viewport()->update(); } else { // Back to hover mode. - marked_byte_offset_ = -1; mouseMoveEvent(event); } + setUpdatesEnabled(true); } void ByteViewText::mouseMoveEvent(QMouseEvent *event) @@ -290,7 +302,8 @@ void ByteViewText::mouseMoveEvent(QMouseEvent *event) void ByteViewText::leaveEvent(QEvent *event) { - emit byteHovered(-1); + hovered_byte_offset_ = -1; + emit byteHovered(hovered_byte_offset_); viewport()->update(); QAbstractScrollArea::leaveEvent(event); |