]> git.lyx.org Git - lyx.git/blobdiff - src/LyXFunc.cpp
Fix memory leak.
[lyx.git] / src / LyXFunc.cpp
index a2541330df48aedc2fac11bc9beb9297fda5d26d..209f12ce1825b486b9c825bd6e210e9522d82058 100644 (file)
@@ -27,9 +27,7 @@
 #include "Buffer.h"
 #include "BufferList.h"
 #include "BufferParams.h"
-#include "bufferview_funcs.h"
 #include "BufferView.h"
-#include "callback.h"
 #include "Color.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
@@ -116,8 +114,6 @@ namespace fs = boost::filesystem;
 
 namespace lyx {
 
-using bv_funcs::freefont2string;
-
 using frontend::LyXView;
 
 using support::absolutePath;
@@ -148,11 +144,38 @@ using support::prefixIs;
 
 namespace Alert = frontend::Alert;
 
+extern bool quitting;
 
 namespace {
 
-bool getLocalStatus(Cursor cursor,
-              FuncRequest const & cmd, FuncStatus & status)
+// This function runs "configure" and then rereads lyx.defaults to
+// reconfigure the automatic settings.
+void reconfigure(LyXView & lv, string const & option)
+{
+       // emit message signal.
+       lv.message(_("Running configure..."));
+
+       // Run configure in user lyx directory
+       support::Path p(package().user_support());
+       string configure_command = package().configure_command();
+       configure_command += option;
+       Systemcall one;
+       one.startscript(Systemcall::Wait, configure_command);
+       p.pop();
+       // emit message signal.
+       lv.message(_("Reloading configuration..."));
+       lyxrc.read(support::libFileSearch(string(), "lyxrc.defaults"));
+       // Re-read packages.lst
+       LaTeXFeatures::getAvailable();
+
+       Alert::information(_("System reconfigured"),
+                          _("The system has been reconfigured.\n"
+                            "You need to restart LyX to make use of any\n"
+                            "updated document class specifications."));
+}
+
+
+bool getLocalStatus(Cursor cursor, FuncRequest const & cmd, FuncStatus & status)
 {
        // Try to fix cursor in case it is broken.
        cursor.fixIfBroken();
@@ -206,7 +229,7 @@ Change::Type lookupChangeType(DocIterator const & dit, bool outer = false)
 
 
 LyXFunc::LyXFunc()
-       : lyx_view_(0), encoded_last_key(0), meta_fake_bit(key_modifier::none)
+       : lyx_view_(0), encoded_last_key(0), meta_fake_bit(NoModifier)
 {
 }
 
@@ -293,8 +316,7 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
 }
 
 
-void LyXFunc::processKeySym(KeySymbol const & keysym,
-               key_modifier::state state)
+void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state)
 {
        LYXERR(Debug::KEY) << "KeySym is " << keysym.getSymbolName() << endl;
 
@@ -327,7 +349,7 @@ void LyXFunc::processKeySym(KeySymbol const & keysym,
 
        // When not cancel or meta-fake, do the normal lookup.
        // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
-       // Mostly, meta_fake_bit = key_modifier::none. RVDK_PATCH_5.
+       // Mostly, meta_fake_bit = NoModifier. RVDK_PATCH_5.
        if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) {
                // remove Caps Lock and Mod2 as a modifiers
                func = keyseq.addkey(keysym, (state | meta_fake_bit));
@@ -337,12 +359,11 @@ void LyXFunc::processKeySym(KeySymbol const & keysym,
        }
 
        // Dont remove this unless you know what you are doing.
-       meta_fake_bit = key_modifier::none;
+       meta_fake_bit = NoModifier;
 
        // Can this happen now ?
-       if (func.action == LFUN_NOACTION) {
+       if (func.action == LFUN_NOACTION)
                func = FuncRequest(LFUN_COMMAND_PREFIX);
-       }
 
        LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
               << " Key [action="
@@ -354,17 +375,15 @@ void LyXFunc::processKeySym(KeySymbol const & keysym,
        // why not return already here if action == -1 and
        // num_bytes == 0? (Lgb)
 
-       if (keyseq.length() > 1) {
+       if (keyseq.length() > 1)
                lyx_view_->message(keyseq.print(true));
-       }
 
 
        // Maybe user can only reach the key via holding down shift.
        // Let's see. But only if shift is the only modifier
-       if (func.action == LFUN_UNKNOWN_ACTION &&
-           state == key_modifier::shift) {
+       if (func.action == LFUN_UNKNOWN_ACTION && state == ShiftModifier) {
                LYXERR(Debug::KEY) << "Trying without shift" << endl;
-               func = keyseq.addkey(keysym, key_modifier::none);
+               func = keyseq.addkey(keysym, NoModifier);
                LYXERR(Debug::KEY) << "Action now " << func.action << endl;
        }
 
@@ -898,7 +917,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_CANCEL:
                        BOOST_ASSERT(lyx_view_ && lyx_view_->view());
                        keyseq.reset();
-                       meta_fake_bit = key_modifier::none;
+                       meta_fake_bit = NoModifier;
                        if (lyx_view_->buffer())
                                // cancel any selection
                                dispatch(FuncRequest(LFUN_MARK_OFF));
@@ -906,18 +925,19 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
 
                case LFUN_META_PREFIX:
-                       meta_fake_bit = key_modifier::alt;
+                       meta_fake_bit = AltModifier;
                        setMessage(keyseq.print(true));
                        break;
 
-               case LFUN_BUFFER_TOGGLE_READ_ONLY:
+               case LFUN_BUFFER_TOGGLE_READ_ONLY: {
                        BOOST_ASSERT(lyx_view_ && lyx_view_->view() && lyx_view_->buffer());
-                       if (lyx_view_->buffer()->lyxvc().inUse())
-                               lyx_view_->buffer()->lyxvc().toggleReadOnly();
+                       Buffer * buf = lyx_view_->buffer();
+                       if (buf->lyxvc().inUse())
+                               buf->lyxvc().toggleReadOnly();
                        else
-                               lyx_view_->buffer()->setReadonly(
-                                       !lyx_view_->buffer()->isReadonly());
+                               buf->setReadonly(!lyx_view_->buffer()->isReadonly());
                        break;
+               }
 
                // --- Menus -----------------------------------------------
                case LFUN_BUFFER_NEW:
@@ -941,17 +961,17 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                docstring const str = bformat(_("Saving document %1$s..."),
                                         makeDisplayPath(lyx_view_->buffer()->fileName()));
                                lyx_view_->message(str);
-                               menuWrite(lyx_view_->buffer());
+                               lyx_view_->buffer()->menuWrite();
                                lyx_view_->message(str + _(" done."));
                        } else {
-                               writeAs(lyx_view_->buffer());
+                               lyx_view_->buffer()->writeAs();
                        }
                        updateFlags = Update::None;
                        break;
 
                case LFUN_BUFFER_WRITE_AS:
                        BOOST_ASSERT(lyx_view_ && lyx_view_->buffer());
-                       writeAs(lyx_view_->buffer(), argument);
+                       lyx_view_->buffer()->writeAs(argument);
                        updateFlags = Update::None;
                        break;
 
@@ -965,10 +985,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                do {
                                        if (!b->isClean()) {
                                                if (!b->isUnnamed()) {
-                                                       menuWrite(b);
+                                                       b->menuWrite();
                                                        lyxerr[Debug::ACTION] << "Saved " << b->fileName() << endl;
                                                } else
-                                                       writeAs(b);
+                                                       b->writeAs();
                                        }
                                        b = theBufferList().next(b);
                                } while (b != first); 
@@ -1103,7 +1123,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        }
 
                        // Push directory path.
-                       string const path(buffer->temppath());
+                       string const path = buffer->temppath();
                        // Prevent the compiler from optimizing away p
                        FileName pp(path);
                        support::Path p(pp);
@@ -1195,7 +1215,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
 
                case LFUN_BUFFER_AUTO_SAVE:
-                       autoSave(view());
+                       lyx_view_->buffer()->autoSave();
                        break;
 
                case LFUN_RECONFIGURE:
@@ -1294,11 +1314,16 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        updateFlags = Update::None;
                        break;
 
-               case LFUN_FILE_NEW:
+               case LFUN_FILE_NEW: {
                        BOOST_ASSERT(lyx_view_);
-                       newFile(*lyx_view_, argument);
+                       string name;
+                       string tmpname = split(argument, name, ':'); // Split filename
+                       Buffer * const b = newFile(name, tmpname);
+                       if (b)
+                               lyx_view_->setBuffer(b);
                        updateFlags = Update::None;
                        break;
+               }
 
                case LFUN_FILE_OPEN:
                        BOOST_ASSERT(lyx_view_);
@@ -2316,7 +2341,7 @@ BufferView * LyXFunc::view() const
 
 bool LyXFunc::wasMetaKey() const
 {
-       return (meta_fake_bit != key_modifier::none);
+       return (meta_fake_bit != NoModifier);
 }