aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/widgets
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2018-01-31 11:26:18 -0800
committerAnders Broman <a.broman58@gmail.com>2018-02-01 14:04:25 +0000
commitc84b0aeead7cfaf595b546b99ff8bb73f73c8fc5 (patch)
treef99772f7a6bfba8821c68a246579583173df2f8d /ui/qt/widgets
parentd3e50fedf744a7fbef9535c750f0eafe5f6f83b7 (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.cpp25
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);