Skip to content

Commit

Permalink
Merge pull request #115 from d-j-a-y/djay_window_menu
Browse files Browse the repository at this point in the history
Fix issue #588 - Window menu doesn't remove a closed document
  • Loading branch information
morevnaproject committed Mar 16, 2014
2 parents 38aa9d9 + ee2ca53 commit a8f1563
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 3 deletions.
24 changes: 24 additions & 0 deletions synfig-studio/src/gui/canvasview.cpp
Expand Up @@ -3887,6 +3887,30 @@ CanvasView::set_ext_widget(const synfig::String& x, Gtk::Widget* y)
keyframe_tree=dynamic_cast<KeyframeTree*>(y);
}

Gtk::UIManager::ui_merge_id
CanvasView::get_popup_id()
{
return merge_id_popup_;
}

void
CanvasView::set_popup_id(Gtk::UIManager::ui_merge_id popup_id)
{
merge_id_popup_ = popup_id;
}

Gtk::UIManager::ui_merge_id
CanvasView::get_toolbar_id()
{
return merge_id_toolbar_;
}

void
CanvasView::set_toolbar_id(Gtk::UIManager::ui_merge_id toolbar_id)
{
merge_id_toolbar_ = toolbar_id;
}

bool
CanvasView::on_delete_event(GdkEventAny* event __attribute__ ((unused)))
{
Expand Down
8 changes: 8 additions & 0 deletions synfig-studio/src/gui/canvasview.h
Expand Up @@ -373,6 +373,9 @@ class CanvasView : public Dockable, public etl::shared_object
//! Menu members
Gtk::Menu parammenu;

Gtk::UIManager::ui_merge_id merge_id_popup_;
Gtk::UIManager::ui_merge_id merge_id_toolbar_;

Glib::RefPtr<Gtk::ToggleAction> grid_snap_toggle;
Glib::RefPtr<Gtk::ToggleAction> grid_show_toggle;
Glib::RefPtr<Gtk::ToggleAction> onion_skin_toggle;
Expand Down Expand Up @@ -522,6 +525,11 @@ class CanvasView : public Dockable, public etl::shared_object
Gtk::Widget* get_ext_widget(const synfig::String& x);
void set_ext_widget(const synfig::String& x, Gtk::Widget* y);

Gtk::UIManager::ui_merge_id get_popup_id();
void set_popup_id(Gtk::UIManager::ui_merge_id popup_id);
Gtk::UIManager::ui_merge_id get_toolbar_id();
void set_toolbar_id(Gtk::UIManager::ui_merge_id toolbar_id);

//std::map<synfig::String,Gtk::Widget*>& tree_view_book() { return tree_view_book_; }
//std::map<synfig::String,Gtk::Widget*>& ext_widget_book() { return tree_view_book_; }

Expand Down
1 change: 1 addition & 0 deletions synfig-studio/src/gui/docks/dockmanager.cpp
Expand Up @@ -205,6 +205,7 @@ DockManager::unregister_dockable(Dockable& x)
{
remove_widget_recursive(x);
dockable_list_.erase(iter);
signal_dockable_unregistered()(&x);
synfig::info("DockManager::unregister_dockable(): \"%s\" has been Unregistered",x.get_name().c_str());
update_window_titles();
return true;
Expand Down
7 changes: 6 additions & 1 deletion synfig-studio/src/gui/docks/dockmanager.h
Expand Up @@ -60,6 +60,7 @@ class DockManager : public sigc::trackable
std::list<DockDialog*> dock_dialog_list_;

sigc::signal<void,Dockable*> signal_dockable_registered_;
sigc::signal<void,Dockable*> signal_dockable_unregistered_;

etl::smart_ptr<DockSettings> dock_settings;

Expand All @@ -84,8 +85,12 @@ class DockManager : public sigc::trackable

DockDialog& find_dock_dialog(int id);
const DockDialog& find_dock_dialog(int id)const;

//! Connect to that signal to get the info a dock has been registred
/*! \see studio::DockManager::register_dockable */
sigc::signal<void,Dockable*>& signal_dockable_registered() { return signal_dockable_registered_; }
//! Connect to that signal to get the info that a dock has been unregistred
/*! \see studio::DockManager::unregister_dockable */
sigc::signal<void,Dockable*>& signal_dockable_unregistered() { return signal_dockable_unregistered_; }

void register_dockable(Dockable& x);
bool unregister_dockable(Dockable& x);
Expand Down
26 changes: 24 additions & 2 deletions synfig-studio/src/gui/mainwindow.cpp
Expand Up @@ -134,6 +134,9 @@ MainWindow::MainWindow()
App::dock_manager->signal_dockable_registered().connect(
sigc::mem_fun(*this,&MainWindow::on_dockable_registered) );

App::dock_manager->signal_dockable_unregistered().connect(
sigc::mem_fun(*this,&MainWindow::on_dockable_unregistered) );

GRAB_HINT_DATA("mainwindow");
}

Expand Down Expand Up @@ -335,8 +338,27 @@ MainWindow::on_dockable_registered(Dockable* dockable)
std::string ui_info_menubar =
"<ui><menubar action='menubar-main'>" + ui_info + "</menubar></ui>";

App::ui_manager()->add_ui_from_string(ui_info_popup);
App::ui_manager()->add_ui_from_string(ui_info_menubar);
Gtk::UIManager::ui_merge_id merge_id_popup = App::ui_manager()->add_ui_from_string(ui_info_popup);
Gtk::UIManager::ui_merge_id merge_id_menubar = App::ui_manager()->add_ui_from_string(ui_info_menubar);

// record CanvasView toolbar and popup id's
CanvasView *canvas_view = dynamic_cast<CanvasView*>(dockable);
if(canvas_view)
{
canvas_view->set_popup_id(merge_id_popup);
canvas_view->set_toolbar_id(merge_id_menubar);
}
}

void
MainWindow::on_dockable_unregistered(Dockable* dockable)
{
// remove the document from the menus
CanvasView *canvas_view = dynamic_cast<CanvasView*>(dockable);
if(canvas_view)
{
App::ui_manager()->remove_ui(canvas_view->get_popup_id());
App::ui_manager()->remove_ui(canvas_view->get_toolbar_id());
}
}
/* === E N T R Y P O I N T ================================================= */
1 change: 1 addition & 0 deletions synfig-studio/src/gui/mainwindow.h
Expand Up @@ -58,6 +58,7 @@ namespace studio {
static void show_dialog_input();
void on_recent_files_changed();
void on_dockable_registered(Dockable* dockable);
void on_dockable_unregistered(Dockable* dockable);
void toggle_show_maintoolbar();
void toggle_show_menubar();

Expand Down

0 comments on commit a8f1563

Please sign in to comment.