diff --git a/doc/fixes37.0 b/doc/fixes37.0 index c5e5d77be..392ff76e2 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -1,4 +1,4 @@ -NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.366 $ $NHDT-Date: 1606504240 2020/11/27 19:10:40 $ +NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.367 $ $NHDT-Date: 1606697932 2020/11/30 00:58:52 $ General Fixes and Modified Features ----------------------------------- @@ -500,6 +500,8 @@ Qt: don't clobber an existing save file after choosing "new game" in the saved game selection widget Qt: don't get stuck in a loop after choosing "play" while the character name field is empty in the character selection widget +Qt: when a new message is issued, pan the message window to its left edge if + player panned it horizontally then didn't manually scroll it back Qt: {maybe just Qt+OSX:} when viewing a text window ('V' to look at 'history' for instance), clicking on [Search], entering a search target in the resulting popup and clicking on [Okay] or typing , the text diff --git a/win/Qt/qt_msg.cpp b/win/Qt/qt_msg.cpp index c9c3537b8..66fd93dae 100644 --- a/win/Qt/qt_msg.cpp +++ b/win/Qt/qt_msg.cpp @@ -23,9 +23,12 @@ extern "C" { namespace nethack_qt_ { NetHackQtMessageWindow::NetHackQtMessageWindow() : - list(new QListWidget()) + list(new QListWidget()), + scrollarea(new QScrollArea()) { list->setFocusPolicy(Qt::NoFocus); + scrollarea->setFocusPolicy(Qt::NoFocus); + scrollarea->takeWidget(); ::iflags.window_inited = 1; map = 0; currgetmsg = 0; @@ -39,7 +42,9 @@ NetHackQtMessageWindow::~NetHackQtMessageWindow() delete list; } -QWidget* NetHackQtMessageWindow::Widget() { return list; } +QWidget* NetHackQtMessageWindow::Widget() { + return list; +} void NetHackQtMessageWindow::setMap(NetHackQtMapWindow2* m) { @@ -152,6 +157,8 @@ void NetHackQtMessageWindow::PutStr(int attr, const QString& text) item->setBackground(bg); } } +#else + nhUse(attr); #endif if (list->count() >= (int) ::iflags.msg_history) @@ -163,6 +170,13 @@ void NetHackQtMessageWindow::PutStr(int attr, const QString& text) // selects most recent message, which causes it to be highlighted list->setCurrentRow(list->count() - 1); + // if message window has been scrolled right, force back to left edge + QScrollBar *sb = list->horizontalScrollBar(); + if (sb && sb->value() > 0) { + sb->setValue(0); + this->viewport()->update(); + } + if (map) map->putMessage(attr, text2); } diff --git a/win/Qt/qt_msg.h b/win/Qt/qt_msg.h index ca84acaf5..b3274bc13 100644 --- a/win/Qt/qt_msg.h +++ b/win/Qt/qt_msg.h @@ -13,7 +13,7 @@ namespace nethack_qt_ { class NetHackQtMapWindow2; -class NetHackQtMessageWindow : QObject, public NetHackQtWindow { +class NetHackQtMessageWindow : QScrollArea, public NetHackQtWindow { Q_OBJECT public: NetHackQtMessageWindow(); @@ -37,8 +37,9 @@ public: void AddToStr(const char *answerbuf); private: - QListWidget* list; - bool changed; + QListWidget *list; + QScrollArea *scrollarea; + bool changed; int currgetmsg; NetHackQtMapWindow2* map;