summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam P. White <inkscapebrony@gmail.com>2014-06-25 20:21:44 +0000
committerLiam P. White <inkscapebrony@gmail.com>2014-06-25 20:21:44 +0000
commit60f288cc584bf34c65698341427cf377b88c7138 (patch)
treeb8b7e6d3c24f95350e85e4c1754a27d5dc9bde6c
parent1. make it compile (diff)
downloadinkscape-60f288cc584bf34c65698341427cf377b88c7138.tar.gz
inkscape-60f288cc584bf34c65698341427cf377b88c7138.zip
2. connect signals
(bzr r13341.5.2)
-rw-r--r--src/document-private.h2
-rw-r--r--src/document-undo.cpp3
-rw-r--r--src/document-undo.h2
-rw-r--r--src/document.cpp35
-rw-r--r--src/inkscape.cpp10
-rw-r--r--src/ui/dialog/align-and-distribute.cpp14
-rw-r--r--src/ui/dialog/clonetiler.cpp40
-rw-r--r--src/ui/dialog/clonetiler.h5
-rw-r--r--src/ui/dialog/desktop-tracker.cpp21
-rw-r--r--src/ui/dialog/desktop-tracker.h4
-rw-r--r--src/ui/dialog/dialog.cpp31
-rw-r--r--src/ui/dialog/grid-arrange-tab.cpp3
-rw-r--r--src/ui/dialog/panel-dialog.h6
-rw-r--r--src/ui/dialog/transformation.cpp13
-rw-r--r--src/ui/widget/dock.cpp7
-rw-r--r--src/widgets/sp-widget.cpp33
-rw-r--r--src/widgets/sp-widget.h3
17 files changed, 145 insertions, 87 deletions
diff --git a/src/document-private.h b/src/document-private.h
index 4560aa28f..ae189c2c0 100644
--- a/src/document-private.h
+++ b/src/document-private.h
@@ -74,6 +74,8 @@ struct SPDocumentPrivate {
Inkscape::ConsoleOutputUndoObserver console_output_undo_observer;
bool seeking;
+ sigc::connection selChangeConnection;
+ sigc::connection desktopActivatedConnection;
};
#endif // SEEN_SP_DOCUMENT_PRIVATE_H
diff --git a/src/document-undo.cpp b/src/document-undo.cpp
index da40dcd4d..a40b2fb81 100644
--- a/src/document-undo.cpp
+++ b/src/document-undo.cpp
@@ -112,9 +112,8 @@ void Inkscape::DocumentUndo::done(SPDocument *doc, const unsigned int event_type
maybeDone(doc, NULL, event_type, event_description);
}
-void Inkscape::DocumentUndo::resetKey( Inkscape::Application * /*inkscape*/, SPDesktop * /*desktop*/, GObject *base )
+void Inkscape::DocumentUndo::resetKey( SPDocument *doc )
{
- SPDocument *doc = reinterpret_cast<SPDocument *>(base);
doc->actionkey.clear();
}
diff --git a/src/document-undo.h b/src/document-undo.h
index 38e575a34..8333e715a 100644
--- a/src/document-undo.h
+++ b/src/document-undo.h
@@ -42,7 +42,7 @@ public:
static void maybeDone(SPDocument *document, const gchar *keyconst, unsigned int event_type, Glib::ustring const &event_description);
- static void resetKey(Inkscape::Application *inkscape, SPDesktop *desktop, GObject *base);
+ static void resetKey(SPDocument *doc);
static void cancel(SPDocument *document);
diff --git a/src/document.cpp b/src/document.cpp
index 80e9bfe4f..ee1a48eb6 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -154,6 +154,17 @@ SPDocument::~SPDocument() {
router = NULL;
}
+ if (oldSignalsConnected) {
+ priv->selChangeConnection.disconnect();
+ priv->desktopActivatedConnection.disconnect();
+ //g_signal_handlers_disconnect_by_func(G_OBJECT(INKSCAPE),
+ //reinterpret_cast<gpointer>(DocumentUndo::resetKey),
+ //static_cast<gpointer>(this));
+ } else {
+ _selection_changed_connection.disconnect();
+ _desktop_activated_connection.disconnect();
+ }
+
if (priv) {
if (priv->partial) {
sp_repr_free_log(priv->partial);
@@ -208,15 +219,6 @@ SPDocument::~SPDocument() {
rerouting_handler_id = 0;
}
- if (oldSignalsConnected) {
- g_signal_handlers_disconnect_by_func(G_OBJECT(INKSCAPE),
- reinterpret_cast<gpointer>(DocumentUndo::resetKey),
- static_cast<gpointer>(this));
- } else {
- _selection_changed_connection.disconnect();
- _desktop_activated_connection.disconnect();
- }
-
if (keepalive) {
inkscape_unref(INKSCAPE);
keepalive = FALSE;
@@ -463,10 +465,21 @@ SPDocument *SPDocument::createDoc(Inkscape::XML::Document *rdoc,
DocumentUndo::setUndoSensitive(document, true);
// reset undo key when selection changes, so that same-key actions on different objects are not coalesced
- g_signal_connect(G_OBJECT(INKSCAPE), "change_selection",
+ document->priv->selChangeConnection = INKSCAPE->signal_selection_changed.connect(
+ sigc::hide( // hide unused first and second args
+ sigc::hide(sigc::bind(
+ sigc::ptr_fun(&DocumentUndo::resetKey), document)
+ )));
+ document->priv->desktopActivatedConnection = INKSCAPE->signal_activate_desktop.connect(
+ sigc::hide( // hide unused first and second args
+ sigc::hide(sigc::bind(
+ sigc::ptr_fun(&DocumentUndo::resetKey), document)
+ )));
+
+ /*g_signal_connect(G_OBJECT(INKSCAPE), "change_selection",
G_CALLBACK(DocumentUndo::resetKey), document);
g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop",
- G_CALLBACK(DocumentUndo::resetKey), document);
+ G_CALLBACK(DocumentUndo::resetKey), document);*/
document->oldSignalsConnected = true;
return document;
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 23c2b001a..4e8b06ef4 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -506,7 +506,7 @@ Application::Application()
}
this->menus = NULL;
- //this->desktops = NULL;
+ this->desktops = NULL;
this->_dialogs_toggle = TRUE;
this->_mapalt = GDK_MOD1_MASK;
this->_trackalt = FALSE;
@@ -976,6 +976,10 @@ void
Application::add_desktop (SPDesktop * desktop)
{
g_return_if_fail (desktop != NULL);
+ if (desktops == NULL) {
+ desktops = new std::list<SPDesktop*>;
+ g_message("Creating new desktop list.");
+ }
//g_return_if_fail (inkscape != NULL);
g_assert (std::find(desktops->begin(), desktops->end(), desktop) == desktops->end());
@@ -1030,7 +1034,9 @@ Application::remove_desktop (SPDesktop * desktop)
// if this was the last desktop, shut down the program
if (desktops->empty()) {
+ g_message("Shutting down.");
this->exit();
+ delete desktops;
}
}
@@ -1285,7 +1291,7 @@ Application::remove_document (SPDocument *document)
SPDesktop *
Application::active_desktop()
{
- if (desktops == NULL) {
+ if (!desktops || desktops->empty()) {
return NULL;
}
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index e02ccd3f1..527f4d59c 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -829,14 +829,14 @@ private :
-static void on_tool_changed(Inkscape::Application */*inkscape*/, Inkscape::UI::Tools::ToolBase */*context*/, AlignAndDistribute *daad)
+static void on_tool_changed(AlignAndDistribute *daad)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
if (desktop && desktop->getEventContext())
daad->setMode(tools_active(desktop) == TOOLS_NODES);
}
-static void on_selection_changed(Inkscape::Application */*inkscape*/, Inkscape::Selection */*selection*/, AlignAndDistribute *daad)
+static void on_selection_changed(AlignAndDistribute *daad)
{
daad->randomize_bbox = Geom::OptRect();
}
@@ -1044,10 +1044,12 @@ AlignAndDistribute::AlignAndDistribute()
contents->pack_start(_nodesFrame, true, true);
//Connect to the global tool change signal
- g_signal_connect (G_OBJECT (INKSCAPE), "set_eventcontext", G_CALLBACK (on_tool_changed), this);
+ INKSCAPE->signal_eventcontext_set.connect(sigc::hide<0>(sigc::hide<0>(sigc::bind(sigc::ptr_fun(&on_tool_changed), this))));
+ //g_signal_connect (G_OBJECT (INKSCAPE), "set_eventcontext", G_CALLBACK (on_tool_changed), this);
// Connect to the global selection change, to invalidate cached randomize_bbox
- g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this);
+ INKSCAPE->signal_selection_changed.connect(sigc::hide<0>(sigc::hide<0>(sigc::bind(sigc::ptr_fun(&on_selection_changed), this))));
+ //g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this);
randomize_bbox = Geom::OptRect();
_desktopChangeConn = _deskTrack.connectDesktopChanged( sigc::mem_fun(*this, &AlignAndDistribute::setDesktop) );
@@ -1055,7 +1057,7 @@ AlignAndDistribute::AlignAndDistribute()
show_all_children();
- on_tool_changed (NULL, NULL, this); // set current mode
+ on_tool_changed (this); // set current mode
}
AlignAndDistribute::~AlignAndDistribute()
@@ -1075,7 +1077,7 @@ void AlignAndDistribute::setTargetDesktop(SPDesktop *desktop)
{
if (_desktop != desktop) {
_desktop = desktop;
- on_tool_changed (NULL, NULL, this);
+ on_tool_changed (this);
}
}
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index fb131d8da..b0298afa6 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -75,15 +75,12 @@ static gdouble trace_zoom;
static SPDocument *trace_doc = NULL;
-CloneTiler::CloneTiler (void) :
+CloneTiler::CloneTiler () :
UI::Widget::Panel ("", "/dialogs/clonetiler/", SP_VERB_DIALOG_CLONETILER),
dlg(NULL),
desktop(NULL),
deskTrack(),
- table_row_labels(NULL),
- selectChangedConn(),
- subselChangedConn(),
- selectModifiedConn()
+ table_row_labels(NULL)
{
Gtk::Box *contents = _getContents();
contents->set_spacing(0);
@@ -1272,12 +1269,14 @@ CloneTiler::CloneTiler (void) :
// connect to global selection changed signal (so we can change desktops) and
// external_change (so we're not fooled by undo)
- g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (clonetiler_change_selection), dlg);
- g_signal_connect (G_OBJECT (INKSCAPE), "external_change", G_CALLBACK (clonetiler_external_change), dlg);
- g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(clonetiler_disconnect_gsignal), G_OBJECT (INKSCAPE));
+ selectChangedConn = INKSCAPE->signal_selection_changed.connect(sigc::hide<0>(sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_change_selection), dlg)));
+ externChangedConn = INKSCAPE->signal_external_change.connect (sigc::hide<0>(sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_external_change), dlg)));
+ //g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (clonetiler_change_selection), dlg);
+ //g_signal_connect (G_OBJECT (INKSCAPE), "external_change", G_CALLBACK (clonetiler_external_change), dlg);
+ g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(clonetiler_disconnect_gsignal), this);
// update now
- clonetiler_change_selection (NULL, sp_desktop_selection(SP_ACTIVE_DESKTOP), dlg);
+ clonetiler_change_selection (sp_desktop_selection(SP_ACTIVE_DESKTOP), dlg);
}
{
@@ -1349,7 +1348,7 @@ void CloneTiler::on_picker_color_changed(guint rgba)
is_updating = false;
}
-void CloneTiler::clonetiler_change_selection(Inkscape::Application * /*inkscape*/, Inkscape::Selection *selection, GtkWidget *dlg)
+void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg)
{
GtkWidget *buttons = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "buttons_on_tiles"));
GtkWidget *status = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "status"));
@@ -1378,16 +1377,21 @@ void CloneTiler::clonetiler_change_selection(Inkscape::Application * /*inkscape*
}
}
-void CloneTiler::clonetiler_external_change(Inkscape::Application * /*inkscape*/, GtkWidget *dlg)
+void CloneTiler::clonetiler_external_change(GtkWidget *dlg)
{
- clonetiler_change_selection (NULL, sp_desktop_selection(SP_ACTIVE_DESKTOP), dlg);
+ clonetiler_change_selection (sp_desktop_selection(SP_ACTIVE_DESKTOP), dlg);
}
-void CloneTiler::clonetiler_disconnect_gsignal(GObject *widget, gpointer source)
+void CloneTiler::clonetiler_disconnect_gsignal(GObject *, gpointer source)
{
- if (source && G_IS_OBJECT(source)) {
- sp_signal_disconnect_by_data (source, widget);
- }
+ //if (source && G_IS_OBJECT(source)) {
+ //sp_signal_disconnect_by_data (source, widget);
+ //}
+ g_return_if_fail(source != NULL);
+
+ CloneTiler* dlg = reinterpret_cast<CloneTiler*>(source);
+ dlg->selectChangedConn.disconnect();
+ dlg->externChangedConn.disconnect();
}
Geom::Affine CloneTiler::clonetiler_get_transform(
@@ -2164,7 +2168,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d
}
g_slist_free (to_delete);
- clonetiler_change_selection (NULL, selection, dlg);
+ clonetiler_change_selection (selection, dlg);
if (do_undo) {
DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_CLONETILER,
@@ -2630,7 +2634,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
clonetiler_trace_finish ();
}
- clonetiler_change_selection (NULL, selection, dlg);
+ clonetiler_change_selection (selection, dlg);
desktop->clearWaitingCursor();
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index e2a0240ee..879fed8c2 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -58,8 +58,8 @@ protected:
static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
static void clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg);
static void clonetiler_unclump(GtkWidget */*widget*/, void *);
- static void clonetiler_change_selection(Inkscape::Application * /*inkscape*/, Inkscape::Selection *selection, GtkWidget *dlg);
- static void clonetiler_external_change(Inkscape::Application * /*inkscape*/, GtkWidget *dlg);
+ static void clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg);
+ static void clonetiler_external_change(GtkWidget *dlg);
static void clonetiler_disconnect_gsignal(GObject *widget, gpointer source);
static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg);
static guint clonetiler_number_of_clones(SPObject *obj);
@@ -130,6 +130,7 @@ private:
sigc::connection desktopChangeConn;
sigc::connection selectChangedConn;
+ sigc::connection externChangedConn;
sigc::connection subselChangedConn;
sigc::connection selectModifiedConn;
sigc::connection color_changed_connection;
diff --git a/src/ui/dialog/desktop-tracker.cpp b/src/ui/dialog/desktop-tracker.cpp
index 8a359dd2d..3a8f5176e 100644
--- a/src/ui/dialog/desktop-tracker.cpp
+++ b/src/ui/dialog/desktop-tracker.cpp
@@ -22,7 +22,6 @@ DesktopTracker::DesktopTracker() :
desktop(0),
widget(0),
hierID(0),
- inkID(0),
trackActive(false),
desktopChangedSig()
{
@@ -41,7 +40,12 @@ void DesktopTracker::connect(GtkWidget *widget)
// Use C/gobject callbacks to avoid gtkmm rewrap-during-destruct issues:
hierID = g_signal_connect( G_OBJECT(widget), "hierarchy-changed", G_CALLBACK(hierarchyChangeCB), this );
- inkID = g_signal_connect( G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(activateDesktopCB), this );
+ inkID = INKSCAPE->signal_activate_desktop.connect(
+ sigc::hide<0>(
+ sigc::bind(
+ sigc::ptr_fun(&DesktopTracker::activateDesktopCB), this)
+ ));
+ //inkID = g_signal_connect( G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(activateDesktopCB), this );
GtkWidget *wdgt = gtk_widget_get_ancestor(widget, SP_TYPE_DESKTOP_WIDGET);
if (wdgt && !base) {
@@ -60,11 +64,10 @@ void DesktopTracker::disconnect()
}
hierID = 0;
}
- if (inkID) {
- if (INKSCAPE) {
- g_signal_handler_disconnect(G_OBJECT(INKSCAPE), inkID);
- }
- inkID = 0;
+ if (inkID.connected()) {
+ inkID.disconnect();
+ //g_signal_handler_disconnect(G_OBJECT(INKSCAPE), inkID);
+ //inkID = 0;
}
}
@@ -94,12 +97,12 @@ sigc::connection DesktopTracker::connectDesktopChanged( const sigc::slot<void, S
return desktopChangedSig.connect(slot);
}
-gboolean DesktopTracker::activateDesktopCB(Inkscape::Application */*inkscape*/, SPDesktop *desktop, DesktopTracker *self )
+void DesktopTracker::activateDesktopCB(SPDesktop *desktop, DesktopTracker *self )
{
if (self && self->trackActive) {
self->setDesktop(desktop);
}
- return FALSE;
+ //return FALSE;
}
bool DesktopTracker::hierarchyChangeCB(GtkWidget * /*widget*/, GtkWidget* /*prev*/, DesktopTracker *self)
diff --git a/src/ui/dialog/desktop-tracker.h b/src/ui/dialog/desktop-tracker.h
index 7da55cf2f..a58666c0d 100644
--- a/src/ui/dialog/desktop-tracker.h
+++ b/src/ui/dialog/desktop-tracker.h
@@ -37,7 +37,7 @@ public:
sigc::connection connectDesktopChanged( const sigc::slot<void, SPDesktop*> & slot );
private:
- static gboolean activateDesktopCB(Inkscape::Application *inkscape, SPDesktop *desktop, DesktopTracker *self );
+ static void activateDesktopCB(SPDesktop *desktop, DesktopTracker *self );
static bool hierarchyChangeCB(GtkWidget *widget, GtkWidget* prev, DesktopTracker *self);
void handleHierarchyChange();
@@ -47,7 +47,7 @@ private:
SPDesktop *desktop;
GtkWidget *widget;
gulong hierID;
- gulong inkID;
+ sigc::connection inkID;
bool trackActive;
sigc::signal<void, SPDesktop*> desktopChangedSig;
};
diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp
index 645294bb5..e98befc89 100644
--- a/src/ui/dialog/dialog.cpp
+++ b/src/ui/dialog/dialog.cpp
@@ -41,27 +41,28 @@ namespace Inkscape {
namespace UI {
namespace Dialog {
-void sp_retransientize(Inkscape::Application */*inkscape*/, SPDesktop *desktop, gpointer dlgPtr)
+gboolean sp_retransientize_again(gpointer dlgPtr)
{
Dialog *dlg = static_cast<Dialog *>(dlgPtr);
- dlg->onDesktopActivated (desktop);
+ dlg->retransientize_suppress = false;
+ return FALSE; // so that it is only called once
}
-gboolean sp_retransientize_again(gpointer dlgPtr)
+#if 0
+void sp_retransientize(SPDesktop *desktop, Dialog * dlgPtr)
{
Dialog *dlg = static_cast<Dialog *>(dlgPtr);
- dlg->retransientize_suppress = false;
- return FALSE; // so that it is only called once
+ dlg->onDesktopActivated (desktop);
}
-void sp_dialog_shutdown(GObject * /*object*/, gpointer dlgPtr)
+void sp_dialog_shutdown(GObject * /*object*/, Dialog * dlgPtr)
{
Dialog *dlg = static_cast<Dialog *>(dlgPtr);
dlg->onShutdown();
}
-static void hideCallback(GObject * /*object*/, gpointer dlgPtr)
+static void hideCallback(GObject * /*object*/, Dialog * dlgPtr)
{
g_return_if_fail( dlgPtr != NULL );
@@ -69,14 +70,14 @@ static void hideCallback(GObject * /*object*/, gpointer dlgPtr)
dlg->onHideF12();
}
-static void unhideCallback(GObject * /*object*/, gpointer dlgPtr)
+static void unhideCallback(GObject * /*object*/, Dialog* dlgPtr)
{
g_return_if_fail( dlgPtr != NULL );
Dialog *dlg = static_cast<Dialog *>(dlgPtr);
dlg->onShowF12();
}
-
+#endif
//=====================================================================
@@ -103,10 +104,14 @@ Dialog::Dialog(Behavior::BehaviorFactory behavior_factory, const char *prefs_pat
_behavior = behavior_factory(*this);
_desktop = SP_ACTIVE_DESKTOP;
- g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(sp_retransientize), (void *)this);
- g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(hideCallback), (void *)this);
- g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(unhideCallback), (void *)this);
- g_signal_connect(G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(sp_dialog_shutdown), (void *)this);
+ INKSCAPE->signal_activate_desktop.connect(sigc::hide<0>(sigc::mem_fun(*this, &Dialog::onDesktopActivated)));
+ INKSCAPE->signal_dialogs_hide.connect(sigc::hide<0>(sigc::mem_fun(*this, &Dialog::onHideF12)));
+ INKSCAPE->signal_dialogs_unhide.connect(sigc::hide<0>(sigc::mem_fun(*this, &Dialog::onShowF12)));
+ INKSCAPE->signal_shut_down.connect(sigc::hide<0>(sigc::mem_fun(*this, &Dialog::onShutdown)));
+ //g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(sp_retransientize), (void *)this);
+ //g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(hideCallback), (void *)this);
+ //g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(unhideCallback), (void *)this);
+ //g_signal_connect(G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(sp_dialog_shutdown), (void *)this);
Glib::wrap(gobj())->signal_event().connect(sigc::mem_fun(*this, &Dialog::_onEvent));
Glib::wrap(gobj())->signal_key_press_event().connect(sigc::mem_fun(*this, &Dialog::_onKeyPress));
diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp
index 72217c729..117420b47 100644
--- a/src/ui/dialog/grid-arrange-tab.cpp
+++ b/src/ui/dialog/grid-arrange-tab.cpp
@@ -605,7 +605,8 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent)
{
// Selection Change signal
- g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (updateSelectionCallback), this);
+ INKSCAPE->signal_selection_changed.connect(sigc::hide<0>(sigc::hide<0>(sigc::mem_fun(*this, &GridArrangeTab::updateSelection))));
+ //g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (updateSelectionCallback), this);
}
Gtk::Box *contents = this;
diff --git a/src/ui/dialog/panel-dialog.h b/src/ui/dialog/panel-dialog.h
index 1fefd811e..1589c7058 100644
--- a/src/ui/dialog/panel-dialog.h
+++ b/src/ui/dialog/panel-dialog.h
@@ -247,8 +247,10 @@ PanelDialog<Behavior::FloatingBehavior> *PanelDialog<Behavior::FloatingBehavior>
new PanelDialog<Behavior::FloatingBehavior>(panel, panel.getPrefsPath(),
panel.getVerb(), panel.getApplyLabel());
- g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(_handle_activate_desktop), instance);
- g_signal_connect(G_OBJECT(INKSCAPE), "deactivate_desktop", G_CALLBACK(handle_deactivate_desktop), instance);
+ INKSCAPE->signal_activate_desktop.connect (sigc::mem_fun(*instance, &PanelDialog<Behavior::FloatingBehavior>::_propagateDesktopActivated));
+ INKSCAPE->signal_deactivate_desktop.connect(sigc::mem_fun(*instance, &PanelDialog<Behavior::FloatingBehavior>::_propagateDesktopDeactivated));
+ //g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(_handle_activate_desktop), instance);
+ //g_signal_connect(G_OBJECT(INKSCAPE), "deactivate_desktop", G_CALLBACK(handle_deactivate_desktop), instance);
return instance;
}
diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp
index a7f0b068e..9df328566 100644
--- a/src/ui/dialog/transformation.cpp
+++ b/src/ui/dialog/transformation.cpp
@@ -47,16 +47,13 @@ namespace Inkscape {
namespace UI {
namespace Dialog {
-static void on_selection_changed(Inkscape::Application */*inkscape*/, Inkscape::Selection *selection, Transformation *daad)
+static void on_selection_changed(Inkscape::Selection *selection, Transformation *daad)
{
int page = daad->getCurrentPage();
daad->updateSelection((Inkscape::UI::Dialog::Transformation::PageType)page, selection);
}
-static void on_selection_modified( Inkscape::Application */*inkscape*/,
- Inkscape::Selection *selection,
- guint /*flags*/,
- Transformation *daad )
+static void on_selection_modified(Inkscape::Selection *selection, Transformation *daad)
{
int page = daad->getCurrentPage();
daad->updateSelection((Inkscape::UI::Dialog::Transformation::PageType)page, selection);
@@ -159,8 +156,10 @@ Transformation::Transformation()
}
// Connect to the global selection changed & modified signals
- g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this);
- g_signal_connect (G_OBJECT (INKSCAPE), "modify_selection", G_CALLBACK (on_selection_modified), this);
+ INKSCAPE->signal_selection_changed.connect(sigc::hide<0>(sigc::bind(sigc::ptr_fun(&on_selection_changed), this)));
+ INKSCAPE->signal_selection_modified.connect(sigc::hide<0>(sigc::hide<1>(sigc::bind(sigc::ptr_fun(&on_selection_modified), this))));
+ //g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this);
+ //g_signal_connect (G_OBJECT (INKSCAPE), "modify_selection", G_CALLBACK (on_selection_modified), this);
_desktopChangeConn = _deskTrack.connectDesktopChanged( sigc::mem_fun(*this, &Transformation::setDesktop) );
_deskTrack.connect(GTK_WIDGET(gobj()));
diff --git a/src/ui/widget/dock.cpp b/src/ui/widget/dock.cpp
index 52e9ea605..4b22bba67 100644
--- a/src/ui/widget/dock.cpp
+++ b/src/ui/widget/dock.cpp
@@ -119,8 +119,11 @@ Dock::Dock(Gtk::Orientation orientation)
gdl_dock_bar_set_style(_gdl_dock_bar, gdl_dock_bar_style);
- g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(hideCallback), (void *)this);
- g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(unhideCallback), (void *)this);
+
+ //g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(hideCallback), (void *)this);
+ //g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(unhideCallback), (void *)this);
+ INKSCAPE->signal_dialogs_hide.connect(sigc::hide(sigc::mem_fun(*this, &Dock::hide)));
+ INKSCAPE->signal_dialogs_unhide.connect(sigc::hide(sigc::mem_fun(*this, &Dock::show)));
g_signal_connect(_paned->gobj(), "button-press-event", G_CALLBACK(_on_paned_button_event), (void *)this);
g_signal_connect(_paned->gobj(), "button-release-event", G_CALLBACK(_on_paned_button_event), (void *)this);
diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp
index 0e2295e36..98d528d4a 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"
@@ -185,9 +186,14 @@ void SPWidgetImpl::dispose(GObject *object)
// 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);
+ if (dynamic_cast<Inkscape::Application *>(spw->inkscape)) {
+ spw->selModified.disconnect();
+ spw->selChanged.disconnect();
+ spw->selSet.disconnect();
}
+ //if (G_IS_OBJECT(spw->inkscape) && G_OBJECT_GET_CLASS(spw->inkscape)) {
+ //sp_signal_disconnect_by_data(spw->inkscape, spw);
+ //}
spw->inkscape = NULL;
}
@@ -205,9 +211,12 @@ void SPWidgetImpl::show(GtkWidget *widget)
if (spw->inkscape) {
// 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 = spw->inkscape->signal_selection_modified.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::modifySelectionCB), spw));
+ spw->selChanged = spw->inkscape->signal_selection_changed.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::changeSelectionCB), spw));
+ spw->selSet = spw->inkscape->signal_selection_set.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::setSelectionCB), spw));
+ //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);
}
if (reinterpret_cast<GtkWidgetClass *>(parentClass)->show) {
@@ -221,7 +230,10 @@ void SPWidgetImpl::hide(GtkWidget *widget)
if (spw->inkscape) {
// Disconnect signals
- sp_signal_disconnect_by_data(spw->inkscape, spw);
+ spw->selModified.disconnect();
+ spw->selChanged.disconnect();
+ spw->selSet.disconnect();
+ //sp_signal_disconnect_by_data(spw->inkscape, spw);
}
if (reinterpret_cast<GtkWidgetClass *>(parentClass)->hide) {
@@ -299,9 +311,12 @@ GtkWidget *SPWidgetImpl::constructGlobal(SPWidget *spw, Inkscape::Application *i
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 = spw->inkscape->signal_selection_modified.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::modifySelectionCB), spw));
+ spw->selChanged = spw->inkscape->signal_selection_changed.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::changeSelectionCB), spw));
+ spw->selSet = spw->inkscape->signal_selection_set.connect(sigc::bind(sigc::ptr_fun(SPWidgetImpl::setSelectionCB), 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);
}
g_signal_emit(spw, signals[CONSTRUCT], 0);
diff --git a/src/widgets/sp-widget.h b/src/widgets/sp-widget.h
index 3a23a92c5..469ab2d92 100644
--- a/src/widgets/sp-widget.h
+++ b/src/widgets/sp-widget.h
@@ -43,6 +43,9 @@ struct SPWidget {
GtkBin bin;
Inkscape::Application *inkscape;
+ sigc::connection selModified;
+ sigc::connection selChanged;
+ sigc::connection selSet;
private:
Inkscape::SPWidgetImpl *_impl;
};