]> git.lyx.org Git - lyx.git/commitdiff
remove mem leaks
authorLars Gullik Bjønnes <larsbj@gullik.org>
Wed, 7 Mar 2001 16:18:05 +0000 (16:18 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Wed, 7 Mar 2001 16:18:05 +0000 (16:18 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1703 a592a061-630c-0410-9148-cb99ea01b6c8

17 files changed:
src/ChangeLog
src/ColorHandler.C
src/ColorHandler.h
src/frontends/Menubar.C
src/frontends/gnome/Menubar_pimpl.C
src/frontends/xforms/ChangeLog
src/frontends/xforms/Menubar_pimpl.C
src/frontends/xforms/Menubar_pimpl.h
src/intl.C
src/intl.h
src/kbmap.C
src/kbmap.h
src/lyx_gui.C
src/lyx_main.C
src/lyxfunc.C
src/lyxrc.C
src/screen.C

index e0eb0352e61b77d13252af9fd6baa7e562ec7a51..a37a05a09e503eec47e10574f9e21b0266ebde99 100644 (file)
@@ -1,3 +1,15 @@
+2001-03-07  Lars Gullik Bjønnes  <larsbj@trylle.birdstep.com>
+
+       * lyx_main.C: make toplevel_keymap a boost::scoped_ptr.
+
+       * kbmap.[Ch]: make kb_key::table a boost::shared_ptr, remove
+       unneeded destructor.
+
+       * intl.[Ch] (Intl): free the fd_form_keymap, make the fd_form_keymap
+       a standalone pointer again.
+
+       * ColorHandler.[Ch]: make lyxColorHandler a boost::scoped_ptr
+
 2001-03-06  John Levon  <moz@compsoc.man.ac.uk>
 
        * Makefile.am:
index 43ec7f4606d403c71b866520133f08cbd3c9aa69..f1a9f29bd807d70dc32def1c05db509b5d709336 100644 (file)
@@ -226,4 +226,4 @@ void LyXColorHandler::updateColor (LColor::color c)
 }
 
 //
-LyXColorHandler * lyxColorHandler;
+boost::scoped_ptr<LyXColorHandler> lyxColorHandler;
index 44cbc9d44a285834d0d433cb31b6d534d3567668..f78d3937e70ea8e75a8679f6db4507d00203b13e 100644 (file)
@@ -15,6 +15,8 @@
 #pragma interface
 #endif
 
+#include <boost/smart_ptr.hpp>
+
 // This is only included to provide stuff for the non-public sections
 #include <X11/Xlib.h>
 
@@ -56,6 +58,6 @@ private:
 };
 
 ///
-extern LyXColorHandler * lyxColorHandler;
+extern boost::scoped_ptr<LyXColorHandler> lyxColorHandler;
 
 #endif
index dbf60fabf4b9d0e5115c6384d1897f78eeb080f9..e3740838f2c46c515dea95d3f274016b53c3f4cd 100644 (file)
@@ -18,6 +18,7 @@
 #endif
 
 #include "Menubar.h"
+#include "MenuBackend.h"
 #include "Menubar_pimpl.h"
 
 Menubar::Menubar(LyXView * o, MenuBackend const & md)
index b26d55e2e43611ecadde8760748ffb8f093bf33e..08a2306cbbbcabe7b4f4b3b416537f20130994b1 100644 (file)
@@ -45,7 +45,7 @@ using std::endl;
 extern GLyxAppWin * mainAppWin;
 
 // Some constants
-extern kb_keymap * toplevel_keymap;
+extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
 extern LyXAction lyxaction;
 extern BufferList bufferlist;
 extern LastFiles * lastfiles; 
index 2dddf0be2a8c995df7244ca29df1a17433e81b94..1ab115a4e0a3da44cea1b482b6c667c1595ded5a 100644 (file)
@@ -1,3 +1,10 @@
+2001-03-07  Lars Gullik Bjønnes  <larsbj@trylle.birdstep.com>
+
+       * Menubar_pimpl.h: make Pipl::ItemInfo::item_ a boost::shared_ptr,
+       make ButtonList contain boost::shared_ptr<ItemInfo>
+
+       * Menubar_pimpl.C (~Pimpl): remove destructor 
+
 2001-03-06  John Levon  <moz@compsoc.man.ac.uk>
 
        * Makefile.am:
index 6a26b0f450cc18f3ba69f4eee963b93702d8255a..85ebbff8d39c4c4a9d3b36df6007f0251b19812f 100644 (file)
@@ -32,7 +32,7 @@ using std::min;
 
 typedef vector<int>::size_type size_type;
 
-extern kb_keymap * toplevel_keymap;
+extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
 extern LyXAction lyxaction;
 
 // Some constants
@@ -87,12 +87,6 @@ Menubar::Pimpl::Pimpl(LyXView * view, MenuBackend const & mb)
 }
 
 
-Menubar::Pimpl::~Pimpl() 
-{
-       // Should we do something here?
-}
-
-
 void Menubar::Pimpl::makeMenubar(Menu const &menu)
 {
        FL_FORM * form = owner_->getForm(); 
@@ -132,10 +126,10 @@ void Menubar::Pimpl::makeMenubar(Menu const &menu)
                fl_set_object_shortcut(obj, shortcut.c_str(), 1);
                fl_set_object_callback(obj, C_Menubar_Pimpl_MenuCallback, 1);
 
-               ItemInfo * iteminfo = new ItemInfo(this, 
-                                                  new MenuItem(*i), obj);
+               boost::shared_ptr<ItemInfo> iteminfo(new ItemInfo(this, 
+                                                  new MenuItem(*i), obj));
                buttonlist_.push_back(iteminfo);
-               obj->u_vdata = iteminfo;
+               obj->u_vdata = iteminfo.get();
        }
 
 }
@@ -541,7 +535,7 @@ void Menubar::Pimpl::MenuCallback(FL_OBJECT * ob, long button)
 //            << ", obj_=" << iteminfo->obj_ << ")" <<endl;
 
        LyXView * view = iteminfo->pimpl_->owner_;
-       MenuItem const * item = iteminfo->item_;
+       MenuItem const * item = iteminfo->item_.get();
 
        if (button == 1) {
                // set the pseudo menu-button
index 9ffce98ca3516e479529cdf4915a24c21d8413ba..611532d1015be5da6db5db49f10b66e59c3f9007 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <vector>
 #include <map>
+#include <boost/smart_ptr.hpp>
 #include "LString.h"
 #include "frontends/Menubar.h"
 #include "commandtags.h"
@@ -37,8 +38,6 @@ public:
        ///
        Pimpl(LyXView *, MenuBackend const &);
        ///
-       ~Pimpl();
-       ///
        void set(string const &);
        /// Opens a top-level submenu given its name
        void openByName(string const &);
@@ -71,18 +70,19 @@ private:
        struct ItemInfo {
                ///
                ItemInfo(Menubar::Pimpl * p, MenuItem const * i, 
-                          FL_OBJECT * o) 
-                       : pimpl_(p), item_(i), obj_(o) {}
+                        FL_OBJECT * o)
+               
+                       : pimpl_(p), obj_(o) { item_.reset(i); }
                ///
                Menubar::Pimpl * pimpl_;
                ///
-               MenuItem const * item_;
+               boost::shared_ptr<MenuItem const> item_;
                ///
                FL_OBJECT * obj_;
        };
 
        ///
-       typedef std::vector<ItemInfo *> ButtonList;
+       typedef std::vector<boost::shared_ptr<ItemInfo> > ButtonList;
        ///
        ButtonList buttonlist_;
 
index ce3adf106828d8c5905b4eec6ca083a4ed79fd39..1dc2f5896381b2e4ee1d5fc700548c2cef293ef0 100644 (file)
@@ -56,13 +56,14 @@ Intl::Intl()
 
 Intl::~Intl()
 {
+       fl_free(fd_form_keymap);
        r_.disconnect();
 }
 
 
 void Intl::redraw()
 {
-       if (fd_form_keymap.get() && fd_form_keymap->KeyMap->visible)
+       if (fd_form_keymap && fd_form_keymap->KeyMap->visible)
                fl_redraw_form(fd_form_keymap->KeyMap);
 }
 
@@ -110,7 +111,7 @@ void Intl::KeyMapOn(bool on)
 {
        keymapon = on;
 
-       if (!fd_form_keymap.get()) return;
+       if (!fd_form_keymap) return;
        
        fl_set_button(fd_form_keymap->KeyOffBtn, 0);
        fl_set_button(fd_form_keymap->KeyOnBtn, 0);
@@ -249,7 +250,7 @@ void Intl::InitKeyMapper(bool on)
        Language->setcallback(LCombo, this);
        Language2->setcallback(LCombo, this);
 
-       fd_form_keymap.reset(create_form_KeyMap());
+       fd_form_keymap = create_form_KeyMap();
 
        // Add the Intl* pointer
        fd_form_keymap->AcceptChset->u_vdata =
index 117d56966a5953dc01809dc0f94602b6a00ffa5a..0faf1a6712fc3fb5f7e2dad317d323c24a489665 100644 (file)
@@ -89,7 +89,7 @@ private:
        int otherkeymap;
        
        ///
-       boost::scoped_ptr<FD_KeyMap> fd_form_keymap;
+       FD_KeyMap * fd_form_keymap;
        ///
        boost::scoped_ptr<Combox> Language;
        ///
index 00462974adf3b83bf228a08f4f945b323642fb2b..51d9ecbfdc65117a0265c7de54cb30b7a3e6e8dc 100644 (file)
@@ -121,9 +121,9 @@ int kb_keymap::lookup(unsigned int key,
                unsigned int const msk0 = ((*cit).mod >> 16) & 0xffff;
                if ((*cit).code == key && (mod & ~msk0) == msk1) {
                        // math found:
-                       if ((*cit).table) {
+                       if ((*cit).table.get()) {
                                // this is a prefix key - set new map
-                               seq->curmap = (*cit).table;
+                               seq->curmap = (*cit).table.get();
                                return 0;
                        } else {
                                // final key - reset map
@@ -191,13 +191,12 @@ int kb_keymap::defkey(kb_sequence * seq, int action, int idx /*= 0*/)
                                        << buf
                                        << "' is overriding old binding..."
                                        << endl;
-                               if ((*it).table) {
-                                       delete (*it).table;
-                                       (*it).table = 0;
+                               if ((*it).table.get()) {
+                                       (*it).table.reset(0);
                                }
                                (*it).action = action;
                                return 0;
-                       } else if (!(*it).table) {
+                       } else if (!(*it).table.get()) {
                                string buf;
                                seq->print(buf, true);
                                lyxerr << "Error: New binding for '" << buf
@@ -217,33 +216,15 @@ int kb_keymap::defkey(kb_sequence * seq, int action, int idx /*= 0*/)
        (*newone).mod = modmsk;
        if (idx + 1 == seq->length) {
                (*newone).action = action;
-               (*newone).table = 0;
+               (*newone).table.reset(0);
                return 0;
        } else {
-               (*newone).table = new kb_keymap;
+               (*newone).table.reset(new kb_keymap);
                return (*newone).table->defkey(seq, action, idx + 1);
        }
 }
 
 
-/* ---F+------------------------------------------------------------------ *\
-    Function  : kb_keymap::~kb_keymap
-    Called by : [destructor]
-    Purpose   : free keymap and its descendents
-    Parameters: none
-    Returns   : nothing
-\* ---F------------------------------------------------------------------- */
-
-kb_keymap::~kb_keymap()
-{
-       // This could be done by a destructor in kb_key.
-       Table::iterator end = table.end();
-       for (Table::iterator it = table.begin(); it != end; ++it) {
-               delete (*it).table;
-       }
-}
-
-
 string const kb_keymap::keyname(kb_key const & k)
 {
        string buf;
@@ -261,7 +242,7 @@ string const kb_keymap::findbinding(int act) const
        Table::const_iterator end = table.end();
        for (Table::const_iterator cit = table.begin();
            cit != end; ++cit) {
-               if ((*cit).table) {
+               if ((*cit).table.get()) {
                        string suffix = (*cit).table->findbinding(act);
                        suffix = strip(suffix, ' ');
                        suffix = strip(suffix, ']');
index 015bce9c3713953403cf45c60c103e6f1a1ab806..3bc02f6a52c706367dac76c10a61285873ce5fb2 100644 (file)
@@ -14,6 +14,7 @@
 #endif
 
 #include <list>
+#include <boost/smart_ptr.hpp>
 
 #include "LString.h"
 
@@ -22,9 +23,6 @@ class kb_sequence;
 /// Defines key maps and actions for key sequences
 class kb_keymap {
 public:
-       ///
-       ~kb_keymap();
-       
        /** Bind a key-sequence to an action.
            Returns 0 on success. Otherwise, position in string where
            error occured. */
@@ -49,7 +47,7 @@ private:
                unsigned int mod;
                
                /// Keymap for prefix keys
-               kb_keymap * table;
+               boost::shared_ptr<kb_keymap> table;
                
                /// Action for !prefix keys
                int action;
index eee229e9bc21eb895c5318699c0372811a79e629..306d8749e918fff0488e29fff4bea5f7c513f190 100644 (file)
@@ -151,7 +151,7 @@ LyXGUI::LyXGUI(LyX * owner, int * argc, char * argv[], bool GUI)
                ypos += HeightOfScreen(ScreenOfDisplay(fl_get_display(), fl_screen)) - height; //DefaultScreen(fl_get_display())) - height;
 
        // Initialize the LyXColorHandler
-       lyxColorHandler = new LyXColorHandler;
+       lyxColorHandler.reset(new LyXColorHandler);
 }
 
 
index 0a02da911d4a32d980d03851bcc620565cfc12e1..82dd64cbf9db6d70c1117adda9ca69a613d5f5c1 100644 (file)
@@ -64,7 +64,7 @@ LyXServer * lyxserver = 0;
 bool finished = false; // flag, that we are quitting the program
 
 // convenient to have it here.
-kb_keymap * toplevel_keymap;
+boost::scoped_ptr<kb_keymap> toplevel_keymap;
 
 
 LyX::LyX(int * argc, char * argv[])
@@ -78,8 +78,8 @@ LyX::LyX(int * argc, char * argv[])
        bool gui = easyParse(argc, argv);
 
        // Global bindings (this must be done as early as possible.) (Lgb)
-       toplevel_keymap = new kb_keymap;
-       defaultKeyBindings(toplevel_keymap);
+       toplevel_keymap.reset(new kb_keymap);
+       defaultKeyBindings(toplevel_keymap.get());
        
        // Make the GUI object, and let it take care of the
        // command line arguments that concerns it.
@@ -432,7 +432,7 @@ void LyX::init(int */*argc*/, char **argv, bool gui)
        // Bind the X dead keys to the corresponding LyX functions if
        // necessary. 
        if (lyxrc.override_x_deadkeys)
-               deadKeyBindings(toplevel_keymap);
+               deadKeyBindings(toplevel_keymap.get());
 
        if (lyxerr.debugging(Debug::LYXRC)) {
                lyxrc.print();
index ce6ff5a939170fc5a6e67659b84cf5a706708404..6a031f73b12416d873627c10e76cde0de56d85f4 100644 (file)
@@ -102,7 +102,7 @@ extern int greek_kb_flag;
 extern bool selection_possible;
 extern void MenuSendto();
 
-extern kb_keymap * toplevel_keymap;
+extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
 
 extern void show_symbols_form(LyXFunc *);
 
@@ -1519,8 +1519,8 @@ exit_with_message:
 
 void LyXFunc::setupLocalKeymap()
 {
-       keyseq.stdmap = keyseq.curmap = toplevel_keymap;
-       cancel_meta_seq.stdmap = cancel_meta_seq.curmap = toplevel_keymap;
+       keyseq.stdmap = keyseq.curmap = toplevel_keymap.get();
+       cancel_meta_seq.stdmap = cancel_meta_seq.curmap = toplevel_keymap.get();
 }
 
 
index bfdb1ad4ce123c694f666ba390a765823440774c..b025554e312e9bf78c74a4b22f2964ae470d697f 100644 (file)
@@ -40,7 +40,7 @@ using std::endl;
 using std::vector;
 
 extern LyXAction lyxaction;
-extern kb_keymap * toplevel_keymap;
+extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
 
 
 static
index b0b5390e63661ea235cba889d04dc41ef76ea8de..51dc3eb9d02d357e75032daf1531992d78762bbc 100644 (file)
@@ -65,7 +65,7 @@ LyXScreen::LyXScreen(WorkArea & o)
 
 void LyXScreen::setCursorColor() 
 {
-       if (!lyxColorHandler) return;
+       if (!lyxColorHandler.get()) return;
 
        GC gc = lyxColorHandler->getGCForeground(LColor::cursor);