diff --git a/src/interface.cpp b/src/interface.cpp
index 164b66f3388213c7e8eaf2960bd9870c82d84942..a751608c582bc80c6f9b1741860e87414e107a92 100644 (file)
--- a/src/interface.cpp
+++ b/src/interface.cpp
#include "widgets/desktop-widget.h"
#include "sp-item-group.h"
#include "sp-text.h"
+#include "sp-gradient-fns.h"
+#include "sp-gradient.h"
#include "sp-flowtext.h"
#include "sp-namedview.h"
#include "ui/view/view.h"
#include "style.h"
#include "event-context.h"
#include "gradient-drag.h"
-#include "widgets/eek-color-def.h"
+#include "widgets/ege-paint-def.h"
// Include Mac OS X menu synchronization on native OSX build
#ifdef GDK_WINDOWING_QUARTZ
gint h = MIN(gdk_screen_height(), ph);
gint x = MIN(gdk_screen_width() - MIN_ONSCREEN_DISTANCE, px);
gint y = MIN(gdk_screen_height() - MIN_ONSCREEN_DISTANCE, py);
- if (w>0 && h>0 && x>0 && y>0) {
+ if (w>0 && h>0) {
x = MIN(gdk_screen_width() - w, x);
y = MIN(gdk_screen_height() - h, y);
- }
- if (w>0 && h>0) {
desktop->setWindowSize(w, h);
}
// Empirically it seems that active_desktop==this desktop only the first time a
// desktop is created.
- if (x>0 && y>0) {
- SPDesktop *active_desktop = SP_ACTIVE_DESKTOP;
- if (active_desktop == desktop || active_desktop==NULL) {
- desktop->setWindowPosition(Geom::Point(x, y));
- }
+ SPDesktop *active_desktop = SP_ACTIVE_DESKTOP;
+ if (active_desktop == desktop || active_desktop==NULL) {
+ desktop->setWindowPosition(Geom::Point(x, y));
}
}
if (maxed) {
void
sp_ui_close_view(GtkWidget */*widget*/)
{
- if (SP_ACTIVE_DESKTOP == NULL) {
+ SPDesktop *dt = SP_ACTIVE_DESKTOP;
+
+ if (dt == NULL) {
return;
}
- if ((SP_ACTIVE_DESKTOP)->shutdown()) {
- return;
+
+ if (dt->shutdown()) {
+ return; // Shutdown operation has been canceled, so do nothing
}
- SP_ACTIVE_DESKTOP->destroyWidget();
+
+ // Shutdown can proceed; use the stored reference to the desktop here instead of the current SP_ACTIVE_DESKTOP,
+ // because the user might have changed the focus in the meantime (see bug #381357 on Launchpad)
+ dt->destroyWidget();
}
/* Iterate through all the windows, destroying each in the order they
become active */
while (SP_ACTIVE_DESKTOP) {
- if ((SP_ACTIVE_DESKTOP)->shutdown()) {
- /* The user cancelled the operation, so end doing the close */
+ SPDesktop *dt = SP_ACTIVE_DESKTOP;
+ if (dt->shutdown()) {
+ /* The user canceled the operation, so end doing the close */
return FALSE;
}
- SP_ACTIVE_DESKTOP->destroyWidget();
+ // Shutdown can proceed; use the stored reference to the desktop here instead of the current SP_ACTIVE_DESKTOP,
+ // because the user might have changed the focus in the meantime (see bug #381357 on Launchpad)
+ dt->destroyWidget();
}
return TRUE;
// checkitem_toggled, checkitem_update, 0);
sp_ui_menu_append_check_item_from_verb(m, view, _("Commands Bar"), _("Show or hide the Commands bar (under the menu)"), "commands",
checkitem_toggled, checkitem_update, 0);
- sp_ui_menu_append_check_item_from_verb(m, view, _("Snap controls Bar"), _("Show or hide the snapping controls"), "snaptoolbox",
+ sp_ui_menu_append_check_item_from_verb(m, view, _("Snap Controls Bar"), _("Show or hide the snapping controls"), "snaptoolbox",
checkitem_toggled, checkitem_update, 0);
sp_ui_menu_append_check_item_from_verb(m, view, _("Tool Controls Bar"), _("Show or hide the Tool Controls bar"), "toppanel",
checkitem_toggled, checkitem_update, 0);
bool worked = false;
Glib::ustring colorspec;
if ( data->format == 8 ) {
- eek::ColorDef color;
+ ege::PaintDef color;
worked = color.fromMIMEData("application/x-oswb-color",
reinterpret_cast<char*>(data->data),
data->length,
data->format);
if ( worked ) {
- if ( color.getType() == eek::ColorDef::CLEAR ) {
+ if ( color.getType() == ege::PaintDef::CLEAR ) {
colorspec = ""; // TODO check if this is sufficient
- } else if ( color.getType() == eek::ColorDef::NONE ) {
+ } else if ( color.getType() == ege::PaintDef::NONE ) {
colorspec = "none";
} else {
- gchar* tmp = g_strdup_printf("#%02x%02x%02x", color.getR(), color.getG(), color.getB());
- colorspec = tmp;
- g_free(tmp);
+ unsigned int r = color.getR();
+ unsigned int g = color.getG();
+ unsigned int b = color.getB();
+
+ SPGradient* matches = 0;
+ const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ for (const GSList *item = gradients; item; item = item->next) {
+ SPGradient* grad = SP_GRADIENT(item->data);
+ if ( color.descr == grad->id ) {
+ if ( grad->has_stops ) {
+ matches = grad;
+ break;
+ }
+ }
+ }
+ if (matches) {
+ colorspec = "url(#";
+ colorspec += matches->id;
+ colorspec += ")";
+ } else {
+ gchar* tmp = g_strdup_printf("#%02x%02x%02x", r, g, b);
+ colorspec = tmp;
+ g_free(tmp);
+ }
}
}
}
Inkscape::Selection *selection = sp_desktop_selection(desktop);
selection->set(SP_ITEM(new_obj));
- // To move the imported object, we must temporarily set the "transform pattern with
- // object" option.
+
+ // move to mouse pointer
{
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool const saved_pref = prefs->getBool("/options/transform/pattern", true);
- prefs->setBool("/options/transform/pattern", true);
sp_document_ensure_up_to_date(sp_desktop_document(desktop));
Geom::OptRect sel_bbox = selection->bounds();
if (sel_bbox) {
Geom::Point m( desktop->point() - sel_bbox->midpoint() );
- sp_selection_move_relative(selection, m);
+ sp_selection_move_relative(selection, m, false);
}
- prefs->setBool("/options/transform/pattern", saved_pref);
}
Inkscape::GC::release(newgroup);