From: Alfredo Braunstein Date: Sun, 20 Mar 2005 17:13:17 +0000 (+0000) Subject: avoid an infinite loop while scrolling X-Git-Tag: 1.6.10~14463 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=d996147dbbd7b783d90d5fd8fd610900cf70e878;p=features.git avoid an infinite loop while scrolling git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9724 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/gtk/ChangeLog b/src/frontends/gtk/ChangeLog index b5751582bb..4d1fba6832 100644 --- a/src/frontends/gtk/ChangeLog +++ b/src/frontends/gtk/ChangeLog @@ -1,3 +1,9 @@ + +2005-03-20 Alfredo Braunstein + + * GWorkArea.[Ch] (onScroll, setScrollbarParams): add an adjusting_ + flag to avoid signal reentrance. + 2005-03-20 John Spray * ghelpers.C: use Gtk::Stock::PROPERTIES icon for document diff --git a/src/frontends/gtk/GWorkArea.C b/src/frontends/gtk/GWorkArea.C index da1199a13a..ed2e07e4bc 100644 --- a/src/frontends/gtk/GWorkArea.C +++ b/src/frontends/gtk/GWorkArea.C @@ -172,7 +172,8 @@ void inputCommitRelay(GtkIMContext */*imcontext*/, gchar * str, GWorkArea * area GWorkArea::GWorkArea(LyXView & owner, int width, int height) - : workAreaPixmap_(0), painter_(*this), draw_(0), colorHandler_(*this) + : workAreaPixmap_(0), painter_(*this), draw_(0), colorHandler_(*this), + adjusting_(false) { workArea_.set_size_request(width, height); workArea_.set_double_buffered(false); @@ -337,6 +338,11 @@ bool GWorkArea::onConfigure(GdkEventConfigure * /*event*/) void GWorkArea::setScrollbarParams(int height, int pos, int line_height) { + if (adjusting_) + return; + + adjusting_ = true; + Gtk::Adjustment * adjustment = vscrollbar_.get_adjustment(); adjustment->set_lower(0); int workAreaHeight = workHeight(); @@ -345,6 +351,7 @@ void GWorkArea::setScrollbarParams(int height, int pos, int line_height) adjustment->set_page_size(workAreaHeight); adjustment->set_value(0); adjustment->changed(); + adjusting_ = false; return; } adjustment->set_step_increment(line_height * 3); @@ -355,13 +362,20 @@ void GWorkArea::setScrollbarParams(int height, int pos, int line_height) adjustment->set_page_size(workAreaHeight); adjustment->set_value(pos); adjustment->changed(); + adjusting_ = false; } void GWorkArea::onScroll() { + if (adjusting_) + return; + + adjusting_ = true; + double val = vscrollbar_.get_adjustment()->get_value(); scrollDocView(static_cast(val)); + adjusting_ = false; } diff --git a/src/frontends/gtk/GWorkArea.h b/src/frontends/gtk/GWorkArea.h index eaeb971e08..09e2de0b4c 100644 --- a/src/frontends/gtk/GWorkArea.h +++ b/src/frontends/gtk/GWorkArea.h @@ -109,6 +109,7 @@ private: ColorHandler colorHandler_; GtkIMContext * imContext_; std::string inputCache_; + bool adjusting_; }; } // namespace frontend