diff options
| author | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-03-04 02:23:52 +0000 |
|---|---|---|
| committer | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-03-04 02:23:52 +0000 |
| commit | d627dc64423f864c9320c73a52b47836c696bceb (patch) | |
| tree | 6dd2947cf2adc65ae0afb361e081a1fd0ae31928 /src/ui | |
| parent | Fixed path color when changed by Objects Dialog (diff) | |
| parent | Remove dom/* code and replace two uses of dom/uri with uri. (diff) | |
| download | inkscape-d627dc64423f864c9320c73a52b47836c696bceb.tar.gz inkscape-d627dc64423f864c9320c73a52b47836c696bceb.zip | |
Merge to trunk
(bzr r13090.1.12)
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/dialog/Makefile_insert | 2 | ||||
| -rw-r--r-- | src/ui/dialog/dialog-manager.cpp | 3 | ||||
| -rw-r--r-- | src/ui/dialog/filter-effects-dialog.cpp | 5 | ||||
| -rw-r--r-- | src/ui/dialog/swatches.cpp | 103 | ||||
| -rw-r--r-- | src/ui/dialog/swatches.h | 2 | ||||
| -rw-r--r-- | src/ui/dialog/tags.cpp | 2 | ||||
| -rw-r--r-- | src/ui/widget/Makefile_insert | 4 |
7 files changed, 88 insertions, 33 deletions
diff --git a/src/ui/dialog/Makefile_insert b/src/ui/dialog/Makefile_insert index 1cf667f2a..bdb1abcda 100644 --- a/src/ui/dialog/Makefile_insert +++ b/src/ui/dialog/Makefile_insert @@ -113,4 +113,6 @@ ink_common_sources += \ ui/dialog/lpe-powerstroke-properties.h \ ui/dialog/objects.cpp \ ui/dialog/objects.h \ + ui/dialog/tags.cpp \ + ui/dialog/tags.h \ $(inkboard_dialogs) diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp index bbb55ceee..bbfea8cf0 100644 --- a/src/ui/dialog/dialog-manager.cpp +++ b/src/ui/dialog/dialog-manager.cpp @@ -55,6 +55,7 @@ #include "ui/dialog/clonetiler.h" #include "ui/dialog/svg-fonts-dialog.h" #include "ui/dialog/objects.h" +#include "ui/dialog/tags.h" namespace Inkscape { namespace UI { @@ -110,6 +111,7 @@ DialogManager::DialogManager() { registerFactory("InkscapePreferences", &create<InkscapePreferences, FloatingBehavior>); registerFactory("LayersPanel", &create<LayersPanel, FloatingBehavior>); registerFactory("ObjectsPanel", &create<ObjectsPanel, FloatingBehavior>); + registerFactory("TagsPanel", &create<TagsPanel, FloatingBehavior>); registerFactory("LivePathEffect", &create<LivePathEffectEditor, FloatingBehavior>); registerFactory("Memory", &create<Memory, FloatingBehavior>); registerFactory("Messages", &create<Messages, FloatingBehavior>); @@ -145,6 +147,7 @@ DialogManager::DialogManager() { registerFactory("InkscapePreferences", &create<InkscapePreferences, DockBehavior>); registerFactory("LayersPanel", &create<LayersPanel, DockBehavior>); registerFactory("ObjectsPanel", &create<ObjectsPanel, DockBehavior>); + registerFactory("TagsPanel", &create<TagsPanel, FloatingBehavior>); registerFactory("LivePathEffect", &create<LivePathEffectEditor, DockBehavior>); registerFactory("Memory", &create<Memory, DockBehavior>); registerFactory("Messages", &create<Messages, DockBehavior>); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index b763776c6..65bebbd14 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -1430,7 +1430,10 @@ void FilterEffectsDialog::FilterModifier::on_document_replaced(SPDesktop * /*des if (_resource_changed) { _resource_changed.disconnect(); } - _resource_changed = document->connectResourcesChanged("filter",sigc::mem_fun(*this, &FilterModifier::update_filters)); + if (document) + { + _resource_changed = document->connectResourcesChanged("filter",sigc::mem_fun(*this, &FilterModifier::update_filters)); + } update_filters(); } diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 807618b4d..5e77a28ab 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -745,10 +745,11 @@ void SwatchesPanel::setDesktop( SPDesktop* desktop ) class DocTrack { public: - DocTrack(SPDocument *doc, sigc::connection &gradientRsrcChanged, sigc::connection &defsChanged, sigc::connection &defsModified) : - doc(doc->doRef()), + DocTrack(SPDocument *doc, sigc::connection &docDestroy, sigc::connection &gradientRsrcChanged, sigc::connection &defsChanged, sigc::connection &defsModified) : + doc(doc), updatePending(false), lastGradientUpdate(0.0), + docDestroy(docDestroy), gradientRsrcChanged(gradientRsrcChanged), defsChanged(defsChanged), defsModified(defsModified) @@ -773,10 +774,10 @@ public: } } if (doc) { + docDestroy.disconnect(); gradientRsrcChanged.disconnect(); defsChanged.disconnect(); defsModified.disconnect(); - doc->doUnref(); doc = NULL; } } @@ -797,6 +798,7 @@ public: SPDocument *doc; bool updatePending; double lastGradientUpdate; + sigc::connection docDestroy; sigc::connection gradientRsrcChanged; sigc::connection defsChanged; sigc::connection defsModified; @@ -892,11 +894,12 @@ void SwatchesPanel::_trackDocument( SwatchesPanel *panel, SPDocument *document ) } docPerPanel[panel] = document; if (!found) { + sigc::connection conn0 = document->connectDestroy(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDocumentDestroy), document)); sigc::connection conn1 = document->connectResourcesChanged( "gradient", sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleGradientsChange), document) ); sigc::connection conn2 = document->getDefs()->connectRelease( sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document)) ); sigc::connection conn3 = document->getDefs()->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document))) ); - DocTrack *dt = new DocTrack(document, conn1, conn2, conn3); + DocTrack *dt = new DocTrack(document, conn0, conn1, conn2, conn3); docTrackings.push_back(dt); if (docPalettes.find(document) == docPalettes.end()) { @@ -925,11 +928,13 @@ static void recalcSwatchContents(SPDocument* doc, { std::vector<SPGradient*> newList; - const GSList *gradients = doc->getResourceList("gradient"); - for (const GSList *item = gradients; item; item = item->next) { - SPGradient* grad = SP_GRADIENT(item->data); - if ( grad->isSwatch() ) { - newList.push_back(SP_GRADIENT(item->data)); + if (doc) { + const GSList *gradients = doc->getResourceList("gradient"); + for (const GSList *item = gradients; item; item = item->next) { + SPGradient* grad = SP_GRADIENT(item->data); + if ( grad->isSwatch() ) { + newList.push_back(SP_GRADIENT(item->data)); + } } } @@ -968,6 +973,37 @@ static void recalcSwatchContents(SPDocument* doc, } } +void SwatchesPanel::handleDocumentDestroy(SPDocument *document) +{ + if (document) { + for (std::vector<DocTrack*>::iterator it = docTrackings.begin(); it != docTrackings.end(); ++it){ + if ((*it)->doc == document) { + delete *it; + docTrackings.erase(it); + break; + } + } + + if (docPalettes.find(document) != docPalettes.end()) { + docPalettes.erase(document); + } + + for (std::map<SwatchesPanel*, SPDocument*>::iterator it = docPerPanel.begin(); it != docPerPanel.end(); ++it) { + if (it->second == document) { + SwatchesPanel* swp = it->first; + std::vector<SwatchPage*> pages = swp->_getSwatchSets(); + if ((swp->_currentIndex >= static_cast<int>(pages.size())) && (pages.size() > 0)) + { + swp->_setSelectedIndex(swp->_getSwatchSets().size() - 1); + } + swp->_rebuild(); + docPerPanel.erase(it); + break; + } + } + } +} + void SwatchesPanel::handleGradientsChange(SPDocument *document) { SwatchPage *docPalette = (docPalettes.find(document) != docPalettes.end()) ? docPalettes[document] : 0; @@ -1142,38 +1178,45 @@ void SwatchesPanel::_handleAction( int setId, int itemId ) switch( setId ) { case 3: { - std::vector<SwatchPage*> pages = _getSwatchSets(); - if ( itemId >= 0 && itemId < static_cast<int>(pages.size()) ) { - _currentIndex = itemId; + _setSelectedIndex(itemId); + } + break; + } +} - if ( !_prefs_path.empty() ) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setString(_prefs_path + "/palette", pages[_currentIndex]->_name); - } +void SwatchesPanel::_setSelectedIndex( int index ) +{ + std::vector<SwatchPage*> pages = _getSwatchSets(); + if ( index >= 0 && index < static_cast<int>(pages.size()) ) { + _currentIndex = index; - _rebuild(); - } + if ( !_prefs_path.empty() ) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setString(_prefs_path + "/palette", pages[_currentIndex]->_name); } - break; + + _rebuild(); } } void SwatchesPanel::_rebuild() { std::vector<SwatchPage*> pages = _getSwatchSets(); - SwatchPage* curr = pages[_currentIndex]; - _holder->clear(); + if (_currentIndex < static_cast<int>(pages.size())) { + SwatchPage* curr = pages[_currentIndex]; + _holder->clear(); - if ( curr->_prefWidth > 0 ) { - _holder->setColumnPref( curr->_prefWidth ); - } - _holder->freezeUpdates(); - // TODO restore once 'clear' works _holder->addPreview(_clear); - _holder->addPreview(_remove); - for ( boost::ptr_vector<ColorItem>::iterator it = curr->_colors.begin(); it != curr->_colors.end(); ++it) { - _holder->addPreview(&*it); + if ( curr->_prefWidth > 0 ) { + _holder->setColumnPref( curr->_prefWidth ); + } + _holder->freezeUpdates(); + // TODO restore once 'clear' works _holder->addPreview(_clear); + _holder->addPreview(_remove); + for ( boost::ptr_vector<ColorItem>::iterator it = curr->_colors.begin(); it != curr->_colors.end(); ++it) { + _holder->addPreview(&*it); + } + _holder->thawUpdates(); } - _holder->thawUpdates(); } } //namespace Dialogs diff --git a/src/ui/dialog/swatches.h b/src/ui/dialog/swatches.h index ca4c1687d..3abb81d98 100644 --- a/src/ui/dialog/swatches.h +++ b/src/ui/dialog/swatches.h @@ -43,11 +43,13 @@ public: virtual int getSelectedIndex() {return _currentIndex;} // temporary protected: + static void handleDocumentDestroy(SPDocument *document); static void handleGradientsChange(SPDocument *document); virtual void _updateFromSelection(); virtual void _handleAction( int setId, int itemId ); virtual void _setDocument( SPDocument *document ); + virtual void _setSelectedIndex( int index ); virtual void _rebuild(); virtual std::vector<SwatchPage*> _getSwatchSets() const; diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index f994b571f..116f9eb0b 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -42,7 +42,7 @@ #include "xml/node-observer.h" #include "xml/repr.h" #include "sp-root.h" -#include "event-context.h" +//#include "event-context.h" #include "selection.h" #include "dialogs/dialog-events.h" #include "widgets/sp-color-notebook.h" diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert index 2c543c5cc..196004df1 100644 --- a/src/ui/widget/Makefile_insert +++ b/src/ui/widget/Makefile_insert @@ -89,4 +89,6 @@ ink_common_sources += \ ui/widget/layertypeicon.cpp \ ui/widget/layertypeicon.h \ ui/widget/insertordericon.cpp \ - ui/widget/insertordericon.h + ui/widget/insertordericon.h \ + ui/widget/addtoicon.cpp \ + ui/widget/addtoicon.h |
