summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2010-07-06 09:15:40 +0000
committerJon A. Cruz <jon@joncruz.org>2010-07-06 09:15:40 +0000
commitc08d3bc95f873450ce0f31b3c920b1b8fd8412f9 (patch)
treecff95e87e360bb4565725063e6a0f579a4520e05 /src
parentMinor cruft cleanup. (diff)
downloadinkscape-c08d3bc95f873450ce0f31b3c920b1b8fd8412f9.tar.gz
inkscape-c08d3bc95f873450ce0f31b3c920b1b8fd8412f9.zip
If 'Edit' on a swatch matches the current selection, invoke Fill-and-Stroke instead of gradient dialog.
(bzr r9584)
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/swatches.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 2f24fe2c4..29e480e24 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -50,7 +50,7 @@
#include "widgets/eek-preview.h"
#include "display/nr-plain-stuff.h"
#include "sp-gradient-reference.h"
-
+#include "dialog-manager.h"
namespace Inkscape {
namespace UI {
@@ -113,11 +113,37 @@ static void redirSecondaryClick( GtkMenuItem *menuitem, gpointer /*user_data*/ )
}
}
-static void editGradientImpl( SPGradient* gr )
+static void editGradientImpl( SPDesktop* desktop, SPGradient* gr )
{
if ( gr ) {
- GtkWidget *dialog = sp_gradient_vector_editor_new( gr );
- gtk_widget_show( dialog );
+ bool shown = false;
+ if ( desktop && desktop->doc() ) {
+ Inkscape::Selection *selection = sp_desktop_selection( desktop );
+ GSList const *items = selection->itemList();
+ if (items) {
+ SPStyle *query = sp_style_new( desktop->doc() );
+ int result = objects_query_fillstroke(const_cast<GSList *>(items), query, true);
+ if ( (result == QUERY_STYLE_MULTIPLE_SAME) || (result == QUERY_STYLE_SINGLE) ) {
+ // could be pertinent
+ if (query->fill.isPaintserver()) {
+ SPPaintServer* server = query->getFillPaintServer();
+ if ( SP_IS_GRADIENT(server) ) {
+ SPGradient* grad = SP_GRADIENT(server);
+ if ( grad->isSwatch() && grad->getId() == gr->getId()) {
+ desktop->_dlg_mgr->showDialog("FillAndStroke");
+ shown = true;
+ }
+ }
+ }
+ }
+ sp_style_unref(query);
+ }
+ }
+
+ if (!shown) {
+ GtkWidget *dialog = sp_gradient_vector_editor_new( gr );
+ gtk_widget_show( dialog );
+ }
}
}
@@ -133,7 +159,7 @@ static void editGradient( GtkMenuItem */*menuitem*/, gpointer /*user_data*/ )
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
- editGradientImpl( grad );
+ editGradientImpl( desktop, grad );
break;
}
}