Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix 588-Window menu doesn't remove a closed document #115

Merged
merged 4 commits into from Mar 16, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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