diff options
Diffstat (limited to 'src/ui/uxmanager.cpp')
| -rw-r--r-- | src/ui/uxmanager.cpp | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index a3ccb3471..05a40bd42 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -1,5 +1,5 @@ /** \file - * Desktop widget implementation + * Desktop widget implementation. */ /* Authors: * Jon A. Cruz <jon@joncruz.org> @@ -27,7 +27,6 @@ #include <gdk/gdkx.h> #endif // GDK_WINDOWING_X11 -using std::map; using std::vector; @@ -35,12 +34,35 @@ gchar const* KDE_WINDOW_MANAGER_NAME = "KWin"; gchar const* UNKOWN_WINDOW_MANAGER_NAME = "unknown"; +class TrackItem +{ +public: + TrackItem() : + destroyConn(), + boxes() + {} + + sigc::connection destroyConn; + std::vector<GtkWidget*> boxes; +}; + static vector<SPDesktop*> desktops; static vector<SPDesktopWidget*> dtws; -static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes; +static std::map<SPDesktop*, TrackItem> trackedBoxes; namespace { + +void desktopDestructHandler(SPDesktop *desktop) +{ + std::map<SPDesktop*, TrackItem>::iterator it = trackedBoxes.find(desktop); + if (it != trackedBoxes.end()) + { + trackedBoxes.erase(it); + } +} + + // TODO unify this later: static Glib::ustring getLayoutPrefPath( Inkscape::UI::View::View *view ) { @@ -222,13 +244,17 @@ void UXManagerImpl::delTrack( SPDesktopWidget* dtw ) void UXManagerImpl::connectToDesktop( vector<GtkWidget *> const & toolboxes, SPDesktop *desktop ) { - //static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes; + TrackItem &tracker = trackedBoxes[desktop]; + vector<GtkWidget*>& tracked = tracker.boxes; + if (desktop) + { + tracker.destroyConn = desktop->connectDestroy(&desktopDestructHandler); + } for (vector<GtkWidget*>::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { GtkWidget* toolbox = *it; ToolboxFactory::setToolboxDesktop( toolbox, desktop ); - vector<GtkWidget*>& tracked = trackedBoxes[desktop]; if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) { tracked.push_back(toolbox); } |
