summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-12-02 18:39:33 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-12-02 18:39:33 +0000
commit09e2f7b62d13537a0f006fc9953c533802fd9c12 (patch)
tree78c1a72538f0e60e38c3ca1845a909fcad53f394 /src/widgets
parentadding fussion improvements (diff)
parentExtensions. Fix for Bug #1192746 (e key does not start export on firefox [Jes... (diff)
downloadinkscape-09e2f7b62d13537a0f006fc9953c533802fd9c12.tar.gz
inkscape-09e2f7b62d13537a0f006fc9953c533802fd9c12.zip
update to trunk
(bzr r13708.1.4)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/box3d-toolbar.cpp4
-rw-r--r--src/widgets/desktop-widget.cpp24
-rw-r--r--src/widgets/gradient-vector.cpp53
-rw-r--r--src/widgets/icon.cpp6
-rw-r--r--src/widgets/lpe-toolbar.cpp2
-rw-r--r--src/widgets/node-toolbar.cpp2
-rw-r--r--src/widgets/rect-toolbar.cpp17
-rw-r--r--src/widgets/select-toolbar.cpp4
-rw-r--r--src/widgets/sp-widget.cpp97
-rw-r--r--src/widgets/sp-widget.h13
-rw-r--r--src/widgets/stroke-marker-selector.cpp2
-rw-r--r--src/widgets/stroke-style.cpp6
12 files changed, 143 insertions, 87 deletions
diff --git a/src/widgets/box3d-toolbar.cpp b/src/widgets/box3d-toolbar.cpp
index 02d102a11..4cc2976f8 100644
--- a/src/widgets/box3d-toolbar.cpp
+++ b/src/widgets/box3d-toolbar.cpp
@@ -195,7 +195,7 @@ static void box3d_toolbox_selection_changed(Inkscape::Selection *selection, GObj
sp_repr_synthesize_events(persp_repr, &box3d_persp_tb_repr_events, tbl);
}
- inkscape_active_document()->setCurrentPersp3D(persp3d_get_from_repr(persp_repr));
+ SP_ACTIVE_DOCUMENT->setCurrentPersp3D(persp3d_get_from_repr(persp_repr));
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setString("/tools/shapes/3dbox/persp", persp_repr->attribute("id"));
@@ -255,7 +255,7 @@ static void box3d_angle_z_value_changed(GtkAdjustment *adj, GObject *dataKludge)
static void box3d_vp_state_changed( GtkToggleAction *act, GtkAction * /*box3d_angle*/, Proj::Axis axis )
{
// TODO: Take all selected perspectives into account
- std::list<Persp3D *> sel_persps = sp_desktop_selection(inkscape_active_desktop())->perspList();
+ std::list<Persp3D *> sel_persps = sp_desktop_selection(SP_ACTIVE_DESKTOP)->perspList();
if (sel_persps.empty()) {
// this can happen when the document is created; we silently ignore it
return;
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 9c8dac7dc..e117e7f60 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -45,7 +45,7 @@
#include "helper/action-context.h"
#include "util/units.h"
#include "ui/widget/unit-tracker.h"
-#include "inkscape-private.h"
+#include "inkscape.h"
#include "ui/interface.h"
#include "macros.h"
#include "preferences.h"
@@ -795,7 +795,7 @@ static void sp_desktop_widget_dispose(GObject *object)
dtw->layer_selector->setDesktop(NULL);
dtw->layer_selector->unreference();
- inkscape_remove_desktop (dtw->desktop); // clears selection too
+ INKSCAPE.remove_desktop (dtw->desktop); // clears selection too
dtw->modified_connection.disconnect();
dtw->desktop->destroy();
Inkscape::GC::release (dtw->desktop);
@@ -1091,7 +1091,7 @@ SPDesktopWidget::shutdown()
{
g_assert(desktop != NULL);
- if (inkscape_is_sole_desktop_for_document(*desktop)) {
+ if (INKSCAPE.sole_desktop_for_document(*desktop)) {
SPDocument *doc = desktop->doc();
if (doc->isModifiedSinceSave()) {
GtkWidget *dialog;
@@ -1665,14 +1665,14 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview)
{
SPDesktopWidget *dtw = static_cast<SPDesktopWidget*>(g_object_new(SP_TYPE_DESKTOP_WIDGET, NULL));
- dtw->dt2r = 1. / namedview->doc_units->factor;
+ dtw->dt2r = 1. / namedview->display_units->factor;
dtw->ruler_origin = Geom::Point(0,0); //namedview->gridorigin; Why was the grid origin used here?
dtw->desktop = new SPDesktop();
dtw->stub = new SPDesktopWidget::WidgetStub (dtw);
dtw->desktop->init (namedview, dtw->canvas, dtw->stub);
- inkscape_add_desktop (dtw->desktop);
+ INKSCAPE.add_desktop (dtw->desktop);
// Add the shape geometry to libavoid for autorouting connectors.
// This needs desktop set for its spacing preferences.
@@ -1737,11 +1737,11 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
SPNamedView *nv=SP_NAMEDVIEW(obj);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- this->dt2r = 1. / nv->doc_units->factor;
+ this->dt2r = 1. / nv->display_units->factor;
this->ruler_origin = Geom::Point(0,0); //nv->gridorigin; Why was the grid origin used here?
- sp_ruler_set_unit(SP_RULER (this->vruler), nv->getDefaultUnit());
- sp_ruler_set_unit(SP_RULER (this->hruler), nv->getDefaultUnit());
+ sp_ruler_set_unit(SP_RULER (this->vruler), nv->getDisplayUnit());
+ sp_ruler_set_unit(SP_RULER (this->hruler), nv->getDisplayUnit());
/* This loops through all the grandchildren of aux toolbox,
* and for each that it finds, it performs an sp_search_by_data_recursive(),
@@ -1771,14 +1771,14 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
if (tracker == NULL) // it's null when inkscape is first opened
continue;
- tracker->setActiveUnit( nv->doc_units );
+ tracker->setActiveUnit( nv->display_units );
} // grandchildren
} // if child is a container
} // children
} // if aux_toolbox is a container
- gtk_widget_set_tooltip_text(this->hruler_box, gettext(nv->doc_units->name_plural.c_str()));
- gtk_widget_set_tooltip_text(this->vruler_box, gettext(nv->doc_units->name_plural.c_str()));
+ gtk_widget_set_tooltip_text(this->hruler_box, gettext(nv->display_units->name_plural.c_str()));
+ gtk_widget_set_tooltip_text(this->vruler_box, gettext(nv->display_units->name_plural.c_str()));
sp_desktop_widget_update_rulers(this);
ToolboxFactory::updateSnapToolbox(this->desktop, 0, this->snap_toolbox);
@@ -1818,7 +1818,7 @@ bool SPDesktopWidget::onFocusInEvent(GdkEventFocus*)
}
}
- inkscape_activate_desktop (desktop);
+ INKSCAPE.activate_desktop (desktop);
return false;
}
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 6607c90d2..d2c46ffec 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -1012,13 +1012,28 @@ GtkWidget * sp_gradient_vector_editor_new(SPGradient *gradient, SPStop *stop)
sp_transientize(dlg);
wd.win = dlg;
wd.stop = 0;
- g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(sp_transientize_callback), &wd);
- g_signal_connect(G_OBJECT(dlg), "event", G_CALLBACK(sp_dialog_event_handler), dlg);
- g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(sp_gradient_vector_dialog_destroy), dlg);
- g_signal_connect(G_OBJECT(dlg), "delete_event", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
- g_signal_connect(G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
- g_signal_connect( G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(sp_dialog_hide), dlg );
- g_signal_connect( G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(sp_dialog_unhide), dlg );
+
+ GObject *obj = G_OBJECT(dlg);
+ sigc::connection *conn = NULL;
+
+ conn = new sigc::connection(INKSCAPE.signal_activate_desktop.connect(sigc::bind(sigc::ptr_fun(&sp_transientize_callback), &wd)));
+ g_object_set_data(obj, "desktop-activate-connection", conn);
+
+ g_signal_connect(obj, "event", G_CALLBACK(sp_dialog_event_handler), dlg);
+ g_signal_connect(obj, "destroy", G_CALLBACK(sp_gradient_vector_dialog_destroy), dlg);
+ g_signal_connect(obj, "delete_event", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
+
+ conn = new sigc::connection(INKSCAPE.signal_shut_down.connect(
+ sigc::hide_return(
+ sigc::bind(sigc::ptr_fun(&sp_gradient_vector_dialog_delete), (GtkWidget *) NULL, (GdkEvent *) NULL, (GtkWidget *) NULL)
+ )));
+ g_object_set_data(obj, "shutdown-connection", conn);
+
+ conn = new sigc::connection(INKSCAPE.signal_dialogs_hide.connect(sigc::bind(sigc::ptr_fun(&gtk_widget_hide), dlg)));
+ g_object_set_data(obj, "dialog-hide-connection", conn);
+
+ conn = new sigc::connection(INKSCAPE.signal_dialogs_unhide.connect(sigc::bind(sigc::ptr_fun(&gtk_widget_show), dlg)));
+ g_object_set_data(obj, "dialog-unhide-connection", conn);
gtk_container_set_border_width(GTK_CONTAINER(dlg), PAD);
@@ -1141,7 +1156,29 @@ static void sp_gradient_vector_dialog_destroy(GtkWidget * /*object*/, gpointer /
static void sp_gradient_vector_dialog_destroy(GtkObject * /*object*/, gpointer /*data*/)
#endif
{
- sp_signal_disconnect_by_data(INKSCAPE, dlg);
+ GObject *obj = G_OBJECT(dlg);
+ assert(obj != NULL);
+
+ sigc::connection *conn = static_cast<sigc::connection *>(g_object_get_data(obj, "desktop-activate-connection"));
+ assert(conn != NULL);
+ conn->disconnect();
+ delete conn;
+
+ conn = static_cast<sigc::connection *>(g_object_get_data(obj, "shutdown-connection"));
+ assert(conn != NULL);
+ conn->disconnect();
+ delete conn;
+
+ conn = static_cast<sigc::connection *>(g_object_get_data(obj, "dialog-hide-connection"));
+ assert(conn != NULL);
+ conn->disconnect();
+ delete conn;
+
+ conn = static_cast<sigc::connection *>(g_object_get_data(obj, "dialog-unhide-connection"));
+ assert(conn != NULL);
+ conn->disconnect();
+ delete conn;
+
wd.win = dlg = NULL;
wd.stop = 0;
}
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index a6e53d638..afc4fcfb0 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -1261,7 +1261,7 @@ std::list<gchar*> &IconImpl::icons_svg_paths()
static bool initialized = false;
if (!initialized) {
// Fall back from user prefs dir into system locations.
- gchar *userdir = profile_path("icons");
+ gchar *userdir = Inkscape::Application::profile_path("icons");
sources.push_back(g_build_filename(userdir,"icons.svg", NULL));
sources.push_back(g_build_filename(INKSCAPE_PIXMAPDIR, "icons.svg", NULL));
g_free(userdir);
@@ -1572,7 +1572,7 @@ void IconImpl::addPreRender( GtkIconSize lsize, gchar const *name )
}
gboolean IconImpl::prerenderTask(gpointer /*data*/) {
- if ( inkscapeIsCrashing() ) {
+ if ( Inkscape::Application::isCrashing() ) {
// stop
} else if (!pendingRenders.empty()) {
bool workDone = false;
@@ -1584,7 +1584,7 @@ gboolean IconImpl::prerenderTask(gpointer /*data*/) {
} while (!pendingRenders.empty() && !workDone);
}
- if (!inkscapeIsCrashing() && !pendingRenders.empty()) {
+ if (!Inkscape::Application::isCrashing() && !pendingRenders.empty()) {
return TRUE;
} else {
callbackHooked = false;
diff --git a/src/widgets/lpe-toolbar.cpp b/src/widgets/lpe-toolbar.cpp
index a85f3ae78..c6da46956 100644
--- a/src/widgets/lpe-toolbar.cpp
+++ b/src/widgets/lpe-toolbar.cpp
@@ -280,7 +280,7 @@ static void lpetool_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBas
void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
- tracker->setActiveUnit(sp_desktop_namedview(desktop)->doc_units);
+ tracker->setActiveUnit(sp_desktop_namedview(desktop)->display_units);
g_object_set_data(holder, "tracker", tracker);
Unit const *unit = tracker->getActiveUnit();
g_return_if_fail(unit != NULL);
diff --git a/src/widgets/node-toolbar.cpp b/src/widgets/node-toolbar.cpp
index 467325d08..1224ab355 100644
--- a/src/widgets/node-toolbar.cpp
+++ b/src/widgets/node-toolbar.cpp
@@ -330,7 +330,7 @@ static void node_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase*
void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
- Unit doc_units = *sp_desktop_namedview(desktop)->doc_units;
+ Unit doc_units = *sp_desktop_namedview(desktop)->display_units;
tracker->setActiveUnit(&doc_units);
g_object_set_data( holder, "tracker", tracker );
diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp
index e1ce01eaf..5356ebb0d 100644
--- a/src/widgets/rect-toolbar.cpp
+++ b/src/widgets/rect-toolbar.cpp
@@ -109,7 +109,7 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *
for (GSList const *items = selection->itemList(); items != NULL; items = items->next) {
if (SP_IS_RECT(items->data)) {
if (gtk_adjustment_get_value(adj) != 0) {
- (SP_RECT(items->data)->*setter)(Quantity::convert(gtk_adjustment_get_value(adj), unit, sp_desktop_namedview(desktop)->doc_units));
+ (SP_RECT(items->data)->*setter)(Quantity::convert(gtk_adjustment_get_value(adj), unit, sp_desktop_namedview(desktop)->svg_units));
} else {
SP_OBJECT(items->data)->getRepr()->setAttribute(value_name, NULL);
}
@@ -181,7 +181,7 @@ static void rect_tb_event_attr_changed(Inkscape::XML::Node * /*repr*/, gchar con
UnitTracker* tracker = reinterpret_cast<UnitTracker*>( g_object_get_data( tbl, "tracker" ) );
Unit const *unit = tracker->getActiveUnit();
- Unit const *doc_unit = sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units;
+ Unit const *svg_unit = sp_desktop_namedview(SP_ACTIVE_DESKTOP)->svg_units;
g_return_if_fail(unit != NULL);
gpointer item = g_object_get_data( tbl, "item" );
@@ -190,28 +190,28 @@ static void rect_tb_event_attr_changed(Inkscape::XML::Node * /*repr*/, gchar con
GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "rx" ) );
gdouble rx = SP_RECT(item)->getVisibleRx();
- gtk_adjustment_set_value(adj, Quantity::convert(rx, doc_unit, unit));
+ gtk_adjustment_set_value(adj, Quantity::convert(rx, svg_unit, unit));
}
{
GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "ry" ) );
gdouble ry = SP_RECT(item)->getVisibleRy();
- gtk_adjustment_set_value(adj, Quantity::convert(ry, doc_unit, unit));
+ gtk_adjustment_set_value(adj, Quantity::convert(ry, svg_unit, unit));
}
{
GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "width" ) );
gdouble width = SP_RECT(item)->getVisibleWidth();
- gtk_adjustment_set_value(adj, Quantity::convert(width, doc_unit, unit));
+ gtk_adjustment_set_value(adj, Quantity::convert(width, svg_unit, unit));
}
{
GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "height" ) );
gdouble height = SP_RECT(item)->getVisibleHeight();
- gtk_adjustment_set_value(adj, Quantity::convert(height, doc_unit, unit));
+ gtk_adjustment_set_value(adj, Quantity::convert(height, svg_unit, unit));
}
}
@@ -307,7 +307,7 @@ void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
//tracker->addUnit( SP_UNIT_PERCENT, 0 );
// fixme: add % meaning per cent of the width/height
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ tracker->setActiveUnit( sp_desktop_namedview(desktop)->display_units );
g_object_set_data( holder, "tracker", tracker );
/* W */
@@ -404,7 +404,8 @@ static void rect_toolbox_watch_ec(SPDesktop* desktop, Inkscape::UI::Tools::ToolB
{
static sigc::connection changed;
- if (SP_IS_RECT_CONTEXT(ec)) {
+ // TODO fixme: use of dynamic_cast<> seems wrong here.
+ if (dynamic_cast<Inkscape::UI::Tools::RectTool *>(ec)) {
changed = sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_rect_toolbox_selection_changed), holder));
} else {
if (changed)
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 08a46354e..e59d459b9 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -470,7 +470,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
contextActions->push_back( act );
// Create the parent widget for x y w h tracker.
- GtkWidget *spw = sp_widget_new_global(INKSCAPE);
+ GtkWidget *spw = sp_widget_new_global();
// Remember the desktop's canvas widget, to be used for defocusing.
g_object_set_data(G_OBJECT(spw), "dtw", sp_desktop_canvas(desktop));
@@ -488,7 +488,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
// Create the units menu.
UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
tracker->addUnit(unit_table.getUnit("%"));
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ tracker->setActiveUnit( sp_desktop_namedview(desktop)->display_units );
g_object_set_data( G_OBJECT(spw), "tracker", tracker );
g_signal_connect( G_OBJECT(spw), "destroy", G_CALLBACK(destroy_tracker), spw );
diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp
index fdf5ec500..5ab6b1bb5 100644
--- a/src/widgets/sp-widget.cpp
+++ b/src/widgets/sp-widget.cpp
@@ -15,6 +15,7 @@
#include "macros.h"
#include "document.h"
+#include "inkscape.h"
#include "sp-widget.h"
#include "helper/sp-marshal.h"
@@ -55,15 +56,15 @@ public:
#endif
static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation);
- static void modifySelectionCB(Application *inkscape, Selection *selection, guint flags, SPWidget *spw);
- static void changeSelectionCB(Application *inkscape, Selection *selection, SPWidget *spw);
- static void setSelectionCB(Application *inkscape, Selection *selection, SPWidget *spw);
+ static void modifySelectionCB(Selection *selection, guint flags, SPWidget *spw);
+ static void changeSelectionCB(Selection *selection, SPWidget *spw);
+ static void setSelectionCB(Selection *selection, SPWidget *spw);
- static GtkWidget *constructGlobal(SPWidget *spw, InkscapeApplication *inkscape);
+ static GtkWidget *constructGlobal(SPWidget *spw);
- void modifySelection(Application *inkscape, Selection *selection, guint flags);
- void changeSelection(Application *inkscape, Selection *selection);
- void setSelection(Application *inkscape, Selection *selection);
+ void modifySelection(Selection *selection, guint flags);
+ void changeSelection(Selection *selection);
+ void setSelection(Selection *selection);
private:
SPWidget &_target;
@@ -132,7 +133,6 @@ sp_widget_class_init(SPWidgetClass *klass)
static void sp_widget_init(SPWidget *spw)
{
- spw->inkscape = NULL;
spw->_impl = new SPWidgetImpl(*spw); // ctor invoked after all other init
}
@@ -151,16 +151,12 @@ void SPWidgetImpl::dispose(GObject *object)
{
SPWidget *spw = reinterpret_cast<SPWidget *>(object);
- if (spw->inkscape) {
- // Disconnect signals
-
- // the checks are necessary because when destroy is caused by the program shutting down,
- // the inkscape object may already be (partly?) invalid --bb
- if (G_IS_OBJECT(spw->inkscape) && G_OBJECT_GET_CLASS(spw->inkscape)) {
- sp_signal_disconnect_by_data(spw->inkscape, spw);
- }
- spw->inkscape = NULL;
- }
+ // Disconnect signals
+ if (Application::exists()) {
+ spw->selModified.disconnect();
+ spw->selChanged.disconnect();
+ spw->selSet.disconnect();
+ }
delete spw->_impl;
spw->_impl = 0;
@@ -174,11 +170,20 @@ void SPWidgetImpl::show(GtkWidget *widget)
{
SPWidget *spw = SP_WIDGET(widget);
- if (spw->inkscape) {
+ if (Application::exists()) {
// Connect signals
- g_signal_connect(spw->inkscape, "modify_selection", G_CALLBACK(SPWidgetImpl::modifySelectionCB), spw);
- g_signal_connect(spw->inkscape, "change_selection", G_CALLBACK(SPWidgetImpl::changeSelectionCB), spw);
- g_signal_connect(spw->inkscape, "set_selection", G_CALLBACK(SPWidgetImpl::setSelectionCB), spw);
+ spw->selModified = INKSCAPE.signal_selection_modified.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::modifySelectionCB), spw)
+ );
+ spw->selChanged = INKSCAPE.signal_selection_changed.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::changeSelectionCB), spw)
+ );
+ spw->selSet = INKSCAPE.signal_selection_set.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::setSelectionCB), spw)
+ );
}
if (GTK_WIDGET_CLASS(sp_widget_parent_class)->show) {
@@ -190,9 +195,11 @@ void SPWidgetImpl::hide(GtkWidget *widget)
{
SPWidget *spw = SP_WIDGET (widget);
- if (spw->inkscape) {
+ if (Application::exists()) {
// Disconnect signals
- sp_signal_disconnect_by_data(spw->inkscape, spw);
+ spw->selModified.disconnect();
+ spw->selChanged.disconnect();
+ spw->selSet.disconnect();
}
if (GTK_WIDGET_CLASS(sp_widget_parent_class)->hide) {
@@ -264,15 +271,21 @@ void SPWidgetImpl::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation)
}
}
-GtkWidget *SPWidgetImpl::constructGlobal(SPWidget *spw, InkscapeApplication *inkscape)
+GtkWidget *SPWidgetImpl::constructGlobal(SPWidget *spw)
{
- g_return_val_if_fail(!spw->inkscape, NULL);
-
- spw->inkscape = inkscape;
if (gtk_widget_get_visible(GTK_WIDGET(spw))) {
- g_signal_connect(inkscape, "modify_selection", G_CALLBACK(SPWidgetImpl::modifySelectionCB), spw);
- g_signal_connect(inkscape, "change_selection", G_CALLBACK(SPWidgetImpl::changeSelectionCB), spw);
- g_signal_connect(inkscape, "set_selection", G_CALLBACK(SPWidgetImpl::setSelectionCB), spw);
+ spw->selModified = INKSCAPE.signal_selection_modified.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::modifySelectionCB), spw)
+ );
+ spw->selChanged = INKSCAPE.signal_selection_changed.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::changeSelectionCB), spw)
+ );
+ spw->selSet = INKSCAPE.signal_selection_set.connect(
+ sigc::bind(
+ sigc::ptr_fun(SPWidgetImpl::setSelectionCB), spw)
+ );
}
g_signal_emit(spw, signals[CONSTRUCT], 0);
@@ -280,32 +293,32 @@ GtkWidget *SPWidgetImpl::constructGlobal(SPWidget *spw, InkscapeApplication *ink
return GTK_WIDGET(spw);
}
-void SPWidgetImpl::modifySelectionCB(Application *inkscape, Selection *selection, guint flags, SPWidget *spw)
+void SPWidgetImpl::modifySelectionCB(Selection *selection, guint flags, SPWidget *spw)
{
- spw->_impl->modifySelection(inkscape, selection, flags);
+ spw->_impl->modifySelection(selection, flags);
}
-void SPWidgetImpl::changeSelectionCB(Application *inkscape, Selection *selection, SPWidget *spw)
+void SPWidgetImpl::changeSelectionCB(Selection *selection, SPWidget *spw)
{
- spw->_impl->changeSelection(inkscape, selection);
+ spw->_impl->changeSelection(selection);
}
-void SPWidgetImpl::setSelectionCB(Application *inkscape, Selection *selection, SPWidget *spw)
+void SPWidgetImpl::setSelectionCB(Selection *selection, SPWidget *spw)
{
- spw->_impl->setSelection(inkscape, selection);
+ spw->_impl->setSelection(selection);
}
-void SPWidgetImpl::modifySelection(Application * /*inkscape*/, Selection *selection, guint flags)
+void SPWidgetImpl::modifySelection(Selection *selection, guint flags)
{
g_signal_emit(&_target, signals[MODIFY_SELECTION], 0, selection, flags);
}
-void SPWidgetImpl::changeSelection(Application * /*inkscape*/, Selection *selection)
+void SPWidgetImpl::changeSelection(Selection *selection)
{
g_signal_emit(&_target, signals[CHANGE_SELECTION], 0, selection);
}
-void SPWidgetImpl::setSelection(Application * /*inkscape*/, Selection *selection)
+void SPWidgetImpl::setSelection(Selection *selection)
{
// Emit "set_selection" signal
g_signal_emit(&_target, signals[SET_SELECTION], 0, selection);
@@ -316,11 +329,11 @@ void SPWidgetImpl::setSelection(Application * /*inkscape*/, Selection *selection
// Methods
-GtkWidget *sp_widget_new_global(InkscapeApplication *inkscape)
+GtkWidget *sp_widget_new_global()
{
SPWidget *spw = reinterpret_cast<SPWidget*>(g_object_new(SP_TYPE_WIDGET, NULL));
- if (!SPWidgetImpl::constructGlobal(spw, inkscape)) {
+ if (!SPWidgetImpl::constructGlobal(spw)) {
g_object_unref(spw);
spw = 0;
}
diff --git a/src/widgets/sp-widget.h b/src/widgets/sp-widget.h
index 6227c3a72..a53062cf4 100644
--- a/src/widgets/sp-widget.h
+++ b/src/widgets/sp-widget.h
@@ -16,6 +16,7 @@
*/
#include <gtk/gtk.h>
+#include "inkscape.h"
#define SP_TYPE_WIDGET (sp_widget_get_type())
#define SP_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_WIDGET, SPWidget))
@@ -23,9 +24,8 @@
#define SP_IS_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_WIDGET))
#define SP_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_WIDGET))
-struct InkscapeApplication;
-
namespace Inkscape {
+
class Selection;
class SPWidgetImpl;
}
@@ -33,10 +33,15 @@ class SPWidgetImpl;
struct SPWidget {
friend class Inkscape::SPWidgetImpl;
+ static GType getType();
+
GtkBin bin;
- InkscapeApplication *inkscape;
Inkscape::SPWidgetImpl *_impl;
+private:
+ sigc::connection selModified;
+ sigc::connection selChanged;
+ sigc::connection selSet;
};
struct SPWidgetClass {
@@ -53,7 +58,7 @@ struct SPWidgetClass {
GType sp_widget_get_type();
/** Generic constructor for global widget. */
-GtkWidget *sp_widget_new_global(InkscapeApplication *inkscape);
+GtkWidget *sp_widget_new_global();
#endif // SEEN_SP_WIDGET_H
/*
diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp
index 23da54e94..c62262e81 100644
--- a/src/widgets/stroke-marker-selector.cpp
+++ b/src/widgets/stroke-marker-selector.cpp
@@ -64,7 +64,7 @@ MarkerComboBox::MarkerComboBox(gchar const *id, int l) :
sp_pixbuf_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("no-marker") ) ) );
sandbox = ink_markers_preview_doc ();
- desktop = inkscape_active_desktop();
+ desktop = SP_ACTIVE_DESKTOP;
doc = sp_desktop_document(desktop);
modified_connection = doc->getDefs()->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&MarkerComboBox::handleDefsModified), this))) );
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index 02dd5df6e..51880ba85 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -204,8 +204,8 @@ StrokeStyle::StrokeStyle() :
unitSelector->addUnit(*unit_table.getUnit("%"));
_old_unit = unitSelector->getUnit();
if (desktop) {
- unitSelector->setUnit(sp_desktop_namedview(desktop)->doc_units->abbr);
- _old_unit = sp_desktop_namedview(desktop)->doc_units;
+ unitSelector->setUnit(sp_desktop_namedview(desktop)->display_units->abbr);
+ _old_unit = sp_desktop_namedview(desktop)->display_units;
}
widthSpin->setUnitMenu(unitSelector);
unitChangedConn = unitSelector->signal_changed().connect(sigc::mem_fun(*this, &StrokeStyle::unitChangedCB));
@@ -839,7 +839,7 @@ StrokeStyle::updateLine()
// same width, or only one object; no sense to keep percent, switch to absolute
Inkscape::Util::Unit const *tempunit = unitSelector->getUnit();
if (tempunit->type != Inkscape::Util::UNIT_TYPE_LINEAR) {
- unitSelector->setUnit(sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units->abbr);
+ unitSelector->setUnit(sp_desktop_namedview(SP_ACTIVE_DESKTOP)->display_units->abbr);
}
}