rgheck wrote:
On 09/20/2009 05:41 PM, you...@lyx.org wrote:
Author: younes
Date: Sun Sep 20 23:41:21 2009
New Revision: 31419
URL: http://www.lyx.org/trac/changeset/31419

Log:
Try to dispatch to document BufferView in case dispatch to current BufferView fails. This is needed for the LFUNs introduced in r31412
URL: http://www.lyx.org/trac/changeset/31412

Modified:
    lyx-devel/trunk/src/BufferView.cpp
    lyx-devel/trunk/src/LyXFunc.cpp

Modified: lyx-devel/trunk/src/BufferView.cpp
============================================================================== --- lyx-devel/trunk/src/BufferView.cpp Sun Sep 20 21:37:26 2009 (r31418) +++ lyx-devel/trunk/src/BufferView.cpp Sun Sep 20 23:41:21 2009 (r31419)
@@ -1095,6 +1095,8 @@
      switch (cmd.action) {

      case LFUN_BUFFER_PARAMS_APPLY: {
+        if (buffer_.isInternal())
+            return false;
DocumentClass const * const oldClass = buffer_.params().documentClassPtr();
          cur.recordUndoFullDocument();
          istringstream ss(to_utf8(cmd.argument()));
@@ -1116,6 +1118,8 @@
      }
case LFUN_LAYOUT_MODULES_CLEAR: {
+        if (buffer_.isInternal())
+            return false;
          DocumentClass const * const oldClass =
              buffer_.params().documentClassPtr();
          cur.recordUndoFullDocument();

I didn't look, so maybe the answer is no, but is there some way this could be done in one centralized location? It seems bad if we have to have this same code in several places. But maybe there are only some LFUNs for which it is needed?

Yes, this is only for the LFUNs that should go to Buffer ideally. Another option would be to have a switch statement only for that:

if (buffer_.isInternal())
     switch (cmd.action) {

     case LFUN_BUFFER_PARAMS_APPLY:
     case LFUN_LAYOUT_MODULES_CLEAR:
     case LFUN_LAYOUT_MODULE_ADD:
     case LFUN_TEXTCLASS_APPLY:
     case LFUN_TEXTCLASS_LOAD:
     case LFUN_LAYOUT_RELOAD:
         return false;
     default:
         break;
     }
}

Abdel.


rh



@@ -1127,6 +1131,8 @@
      }

      case LFUN_LAYOUT_MODULE_ADD: {
+        if (buffer_.isInternal())
+            return false;
          BufferParams const&  params = buffer_.params();
          if (!params.moduleCanBeAdded(argument)) {
              LYXERR0("Module `"<<  argument<<
@@ -1144,6 +1150,8 @@
      }

      case LFUN_TEXTCLASS_APPLY: {
+        if (buffer_.isInternal())
+            return false;
if (!LayoutFileList::get().load(argument, buffer_.temppath())&&
              !LayoutFileList::get().load(argument, buffer_.filePath()))
              break;
@@ -1167,11 +1175,15 @@
      }

      case LFUN_TEXTCLASS_LOAD:
+        if (buffer_.isInternal())
+            return false;
          LayoutFileList::get().load(argument, buffer_.temppath()) ||
          LayoutFileList::get().load(argument, buffer_.filePath());
          break;

      case LFUN_LAYOUT_RELOAD: {
+        if (buffer_.isInternal())
+            return false;
DocumentClass const * const oldClass = buffer_.params().documentClassPtr();
          LayoutFileIndex bc = buffer_.params().baseClassID();
          LayoutFileList::get().reset(bc);

Modified: lyx-devel/trunk/src/LyXFunc.cpp
============================================================================== --- lyx-devel/trunk/src/LyXFunc.cpp Sun Sep 20 21:37:26 2009 (r31418) +++ lyx-devel/trunk/src/LyXFunc.cpp Sun Sep 20 23:41:21 2009 (r31419)
@@ -1091,6 +1091,9 @@
              if (lyx_view_ == 0)
                  break;

+            BufferView * bv = lyx_view_->documentBufferView();
+            BufferView * doc_bv = lyx_view_->documentBufferView();
+
              // Start an undo group. This may be needed for
              // some stuff like inset-apply on labels.
              if (theBufferList().isLoaded(buffer))
@@ -1098,38 +1101,44 @@
// Let the current LyXView dispatch its own actions.
              if (lyx_view_->dispatch(cmd)) {
-                if (lyx_view_->currentBufferView()) {
- updateFlags = lyx_view_->currentBufferView()->cursor().result().update();
+                if (bv) {
+                    updateFlags = bv->cursor().result().update();
                      if (theBufferList().isLoaded(buffer))
                          buffer->undo().endUndoGroup();
                  }
                  break;
              }

-            LASSERT(lyx_view_->currentBufferView(), /**/);
+            LASSERT(bv, /**/);

              // Let the current BufferView dispatch its own actions.
-            if (lyx_view_->currentBufferView()->dispatch(cmd)) {
+            if (bv->dispatch(cmd)) {
+ // The BufferView took care of its own updates if needed.
+                updateFlags = Update::None;
+                if (theBufferList().isLoaded(buffer))
+                    buffer->undo().endUndoGroup();
+                break;
+            }
+            // Try with the document BufferView dispatch if any.
+            if (doc_bv&&  doc_bv->dispatch(cmd)) {
// The BufferView took care of its own updates if needed.
+                buffer =&(doc_bv->buffer());
                  updateFlags = Update::None;
                  if (theBufferList().isLoaded(buffer))
                      buffer->undo().endUndoGroup();
                  break;
              }

-            // OK, so try the Buffer itself
+            // OK, so try the current Buffer itself...
              DispatchResult dr;
-            BufferView * bv = lyx_view_->currentBufferView();
              bv->buffer().dispatch(cmd, dr);
              if (dr.dispatched()) {
                  updateFlags = dr.update();
                  break;
              }
-            // OK, so try with the document Buffer.
-            BufferView * doc_bv = lyx_view_->documentBufferView();
+            // and with the document Buffer.
              if (doc_bv) {
-                buffer =&(doc_bv->buffer());
-                buffer->dispatch(cmd, dr);
+                doc_bv->buffer().dispatch(cmd, dr);
                  if (dr.dispatched()) {
                      updateFlags = dr.update();
                      break;


Reply via email to