Changeset 3da60b7045c13b5d6d3156113bd36d2b7390e552

Show
Ignore:
Timestamp:
04/27/09 19:12:39 (4 years ago)
Author:
Benjamin Herr <ben@…>
Parents:
2f98c8dc4105d1f90e7cd4a58d3013369e77b311
Children:
83d481283330829f52cdfed0a4316e07f1e0c5d6
git-committer:
Benjamin Herr <ben@0x539.de> / 2009-04-27T19:12:39Z+0200
Message:

tasks: fixed starting tasks while an old task exists

2009-04-27 Benjamin Herr <ben@…>

  • code/commands/file-commands.cpp:
  • code/commands/file-commands.hpp:
  • code/commands/file-tasks/task-new.cpp:
  • code/commands/file-tasks/task-new.hpp:
  • code/commands/file-tasks/task-open-file.cpp:
  • code/commands/file-tasks/task-open-file.hpp:
  • code/commands/file-tasks/task-open-location.cpp:
  • code/commands/file-tasks/task-open-location.hpp:
  • code/commands/file-tasks/task-open.cpp:
  • code/commands/file-tasks/task-open.hpp:
  • code/commands/file-tasks/task-save-all.cpp:
  • code/commands/file-tasks/task-save-all.hpp:
  • code/commands/file-tasks/task-save.cpp:
  • code/commands/file-tasks/task-save.hpp: Split most of all Task constructors into a separate run() member function that is called by FileCommands::set_task after resetting its current task. This ensures that a new task only gets to mess with stuff after the old one's destructor has been run.
Files:
15 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r2f98c8d r3da60b7  
     12009-04-27  Benjamin Herr  <ben@0x539.de> 
     2 
     3        * code/commands/file-commands.cpp: 
     4        * code/commands/file-commands.hpp: 
     5        * code/commands/file-tasks/task-new.cpp: 
     6        * code/commands/file-tasks/task-new.hpp: 
     7        * code/commands/file-tasks/task-open-file.cpp: 
     8        * code/commands/file-tasks/task-open-file.hpp: 
     9        * code/commands/file-tasks/task-open-location.cpp: 
     10        * code/commands/file-tasks/task-open-location.hpp: 
     11        * code/commands/file-tasks/task-open.cpp: 
     12        * code/commands/file-tasks/task-open.hpp: 
     13        * code/commands/file-tasks/task-save-all.cpp: 
     14        * code/commands/file-tasks/task-save-all.hpp: 
     15        * code/commands/file-tasks/task-save.cpp: 
     16        * code/commands/file-tasks/task-save.hpp: Split most of all Task 
     17        constructors into a separate run() member function that is called by 
     18        FileCommands::set_task after resetting its current task. This ensures 
     19        that a new task only gets to mess with stuff after the old one's 
     20        destructor has been run. 
     21 
    1222009-04-26  Armin Burgmeier  <armin@arbur.net> 
    223 
  • code/commands/file-commands.cpp

    r9f4b8f3 r3da60b7  
    147147                *this, &FileCommands::on_task_finished)); 
    148148        m_task.reset(task); 
     149  task->run(); 
    149150} 
    150151 
  • code/commands/file-commands.hpp

    rd9e7c10 r3da60b7  
    5151                virtual ~Task() = 0; 
    5252 
     53                virtual void run() = 0; 
    5354                void finish(); 
    5455 
  • code/commands/file-tasks/task-new.cpp

    re6d3292 r3da60b7  
    2323        Task(file_commands) 
    2424{ 
     25} 
     26 
     27Gobby::TaskNew::~TaskNew() 
     28{ 
     29        get_document_location_dialog().hide(); 
     30} 
     31 
     32void Gobby::TaskNew::run() 
     33{ 
    2534        DocumentLocationDialog& dialog = get_document_location_dialog(); 
    2635 
     
    2938        dialog.set_document_name(_("New Document")); 
    3039        dialog.present(); 
    31 } 
    32  
    33 Gobby::TaskNew::~TaskNew() 
    34 { 
    35         get_document_location_dialog().hide(); 
    3640} 
    3741 
  • code/commands/file-tasks/task-new.hpp

    r9f4b8f3 r3da60b7  
    3030        TaskNew(FileCommands& file_commands); 
    3131        virtual ~TaskNew(); 
     32        virtual void run(); 
    3233 
    3334protected: 
  • code/commands/file-tasks/task-open-file.cpp

    r9f4b8f3 r3da60b7  
    2525                Gtk::FILE_CHOOSER_ACTION_OPEN) 
    2626{ 
     27} 
     28 
     29void Gobby::TaskOpenFile::run() 
     30{ 
    2731        m_file_dialog.signal_response().connect(sigc::mem_fun( 
    2832                *this, &TaskOpenFile::on_file_response)); 
     
    4448                m_open_task->signal_finished().connect( 
    4549                        sigc::mem_fun(*this, &TaskOpenFile::finish)); 
     50                m_open_task->run(); 
    4651        } 
    4752        else 
  • code/commands/file-tasks/task-open-file.hpp

    r9f4b8f3 r3da60b7  
    3131        TaskOpenFile(FileCommands& file_commands); 
    3232 
     33        virtual void run(); 
     34 
    3335private: 
    3436        void on_file_response(int response_id); 
  • code/commands/file-tasks/task-open-location.cpp

    r9f4b8f3 r3da60b7  
    2424        Task(file_commands), m_location_dialog(get_parent()) 
    2525{ 
     26} 
     27 
     28void Gobby::TaskOpenLocation::run() 
     29{ 
    2630        m_location_dialog.signal_response().connect( 
    2731                sigc::mem_fun( *this, &TaskOpenLocation::on_response)); 
     
    4549                m_open_task->signal_finished().connect( 
    4650                        sigc::mem_fun(*this, &TaskOpenLocation::finish)); 
     51                m_open_task->run(); 
    4752        } 
    4853        else 
  • code/commands/file-tasks/task-open-location.hpp

    rd9e7c10 r3da60b7  
    3232        TaskOpenLocation(FileCommands& file_commands); 
    3333 
     34        virtual void run(); 
     35 
    3436private: 
    3537        void on_response(int response_id); 
  • code/commands/file-tasks/task-open.cpp

    r9f4b8f3 r3da60b7  
    2323                          const Glib::RefPtr<Gio::File>& file): 
    2424        Task(file_commands), m_file(file) 
     25{ 
     26} 
     27 
     28Gobby::TaskOpen::~TaskOpen() 
     29{ 
     30        if(m_handle != get_status_bar().invalid_handle()) 
     31                get_status_bar().remove_message(m_handle); 
     32        get_document_location_dialog().hide(); 
     33} 
     34 
     35void Gobby::TaskOpen::run() 
    2536{ 
    2637        static const gchar* const ATTR_DISPLAY_NAME = 
     
    5061                                ex.what()), false)); 
    5162        } 
    52 } 
    53  
    54 Gobby::TaskOpen::~TaskOpen() 
    55 { 
    56         if(m_handle != get_status_bar().invalid_handle()) 
    57                 get_status_bar().remove_message(m_handle); 
    58         get_document_location_dialog().hide(); 
    5963} 
    6064 
  • code/commands/file-tasks/task-open.hpp

    r9f4b8f3 r3da60b7  
    3232        virtual ~TaskOpen(); 
    3333 
     34        virtual void run(); 
     35 
    3436private: 
    3537        void on_query_info(const Glib::RefPtr<Gio::AsyncResult>& result); 
  • code/commands/file-tasks/task-save-all.cpp

    r9f4b8f3 r3da60b7  
    2222        Task(file_commands) 
    2323{ 
     24} 
     25 
     26void Gobby::TaskSaveAll::run() { 
    2427        typedef Gtk::Notebook_Helpers::PageList PageList; 
    2528        PageList& pages = get_folder().pages(); 
     
    9295                        m_task->signal_finished().connect(sigc::mem_fun( 
    9396                                *this, &TaskSaveAll::on_finished)); 
     97                        m_task->run(); 
    9498                } 
    9599        } 
  • code/commands/file-tasks/task-save-all.hpp

    r9f4b8f3 r3da60b7  
    3131        TaskSaveAll(FileCommands& file_commands); 
    3232 
     33        virtual void run(); 
     34 
    3335private: 
    3436        void on_document_removed(DocWindow& document); 
  • code/commands/file-tasks/task-save.cpp

    r9f4b8f3 r3da60b7  
    2929        m_document(&document) 
    3030{ 
     31        get_folder().signal_document_removed().connect( 
     32                sigc::mem_fun( *this, &TaskSave::on_document_removed)); 
     33} 
     34 
     35void Gobby::TaskSave::run() { 
     36        if(!m_document) 
     37        { 
     38                finish(); 
     39                return; 
     40        } 
     41 
    3142        m_file_dialog.signal_response().connect(sigc::mem_fun( 
    3243                *this, &TaskSave::on_response)); 
    33         get_folder().signal_document_removed().connect( 
    34                 sigc::mem_fun( *this, &TaskSave::on_document_removed)); 
    3544 
    3645        const DocumentInfoStorage::Info* info = 
    3746                get_document_info_storage().get_info( 
    38                         document.get_info_storage_key()); 
     47                        m_document->get_info_storage_key()); 
    3948 
    4049        if(info != NULL && !info->uri.empty()) 
     
    4554        { 
    4655                m_file_dialog.set_current_name( 
    47                         document.get_title()); 
     56                        m_document->get_title()); 
    4857        } 
    4958 
     
    7786        // The document we are about to save was removed. 
    7887        if(m_document == &document) 
    79                 finish(); 
     88        { 
     89                if(m_running) 
     90                        finish(); 
     91                else 
     92                        m_document = NULL; 
     93        } 
    8094} 
  • code/commands/file-tasks/task-save.hpp

    r9f4b8f3 r3da60b7  
    3030        FileChooser::Dialog m_file_dialog; 
    3131        DocWindow* m_document; 
     32        bool m_running; 
    3233 
    3334public: 
    3435        TaskSave(FileCommands& file_commands, DocWindow& document); 
     36        virtual void run(); 
    3537 
    3638        void on_response(int response_id);