]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
InsetTabular.cpp: fix #6585 also for wrapped floats - thanks Vincent
[lyx.git] / src / BufferView.cpp
index 338a55aa5c3f9a1ce7e7fdeba159fec447ab9e83..33d9199f2e573d8075be72ae4dfd4b28800be061 100644 (file)
@@ -107,10 +107,7 @@ T * getInsetByCode(Cursor const & cur, InsetCode code)
        return 0;
 }
 
-
-bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
-       bool same_content);
-
+/// Note that comparing contents can only be used for InsetCommand
 bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
        docstring const & contents)
 {
@@ -118,12 +115,17 @@ bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
 
        while (tmpdit) {
                Inset const * inset = tmpdit.nextInset();
-               if (inset
-                   && std::find(codes.begin(), codes.end(), inset->lyxCode()) != codes.end()
-                   && (contents.empty() ||
-                   static_cast<InsetCommand const *>(inset)->getFirstNonOptParam() == contents)) {
-                       dit = tmpdit;
-                       return true;
+               if (inset) {
+                       bool const valid_code = std::find(codes.begin(), codes.end(), 
+                               inset->lyxCode()) != codes.end();
+                       InsetCommand const * ic = inset->asInsetCommand();
+                       bool const same_or_no_contents =  contents.empty()
+                               || (ic && (ic->getFirstNonOptParam() == contents));
+                       
+                       if (valid_code && same_or_no_contents) {
+                               dit = tmpdit;
+                               return true;
+                       }
                }
                tmpdit.forwardInset();
        }
@@ -133,6 +135,7 @@ bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
 
 
 /// Looks for next inset with one of the given codes.
+/// Note that same_content can only be used for InsetCommand
 bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
        bool same_content)
 {
@@ -142,11 +145,14 @@ bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
        if (!tmpdit)
                return false;
 
-       if (same_content) {
-               Inset const * inset = tmpdit.nextInset();
-               if (inset
-                   && std::find(codes.begin(), codes.end(), inset->lyxCode()) != codes.end()) {
-                       contents = static_cast<InsetCommand const *>(inset)->getFirstNonOptParam();
+       Inset const * inset = tmpdit.nextInset();
+       if (same_content && inset) {
+               InsetCommand const * ic = inset->asInsetCommand();
+               if (ic) {
+                       bool const valid_code = std::find(codes.begin(), codes.end(),
+                               ic->lyxCode()) != codes.end();
+                       if (valid_code)
+                               contents = ic->getFirstNonOptParam();
                }
        }
 
@@ -1840,7 +1846,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                icp["key"] = from_utf8(arg);
                if (!opt1.empty())
                        icp["before"] = from_utf8(opt1);
-               string icstr = InsetCommand::params2string("citation", icp);
+               string icstr = InsetCommand::params2string(icp);
                FuncRequest fr(LFUN_INSET_INSERT, icstr);
                lyx::dispatch(fr);
                break;