]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetcollapsable.C
The speed patch: redraw only rows that have changed
[lyx.git] / src / insets / insetcollapsable.C
index 6bcb0ff6e8d9ca70c738f2df97b2286f1ea76e68..7d39be20b645f692aa720113a0470bfc59750fea 100644 (file)
@@ -138,7 +138,10 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
                dim = dimensionCollapsed();
                if (status() == Open) {
                        InsetText::metrics(mi, textdim_);
+                       bool oldopeninlined = openinlined_;
                        openinlined_ = (textdim_.wid + dim.wid <= mi.base.textwidth);
+                       if (openinlined_ != oldopeninlined)
+                               InsetText::metrics(mi, textdim_);
                        if (openinlined_) {
                                dim.wid += textdim_.wid;
                                dim.des = max(dim.des - textdim_.asc + dim.asc, textdim_.des);
@@ -341,8 +344,13 @@ void InsetCollapsable::doDispatch(LCursor & cur, FuncRequest & cmd)
                        setStatus(cur, Open);
                else if (cmd.argument == "close")
                        setStatus(cur, Collapsed);
-               else if (cmd.argument == "toggle" || cmd.argument.empty())
-                       setStatus(cur, isOpen() ? Collapsed : Open);
+               else if (cmd.argument == "toggle" || cmd.argument.empty()) 
+                       if (isOpen()) {
+                               setStatus(cur, Collapsed);
+                               cur.forwardPosNoDescend();
+                       }
+                       else
+                               setStatus(cur, Open);
                else // if assign or anything else
                        cur.undispatched();
                cur.dispatched();