summaryrefslogtreecommitdiffstats
path: root/src/widgets/sp-widget.cpp
diff options
context:
space:
mode:
authorLiam P. White <inkscapebrony@gmail.com>2014-11-26 01:17:02 +0000
committerLiam P. White <inkscapebrony@gmail.com>2014-11-26 01:17:02 +0000
commitbed3cc55fe40330718204c540b328d95407b00fa (patch)
treee4269aab0a32957163935ec6b828b25d00613d68 /src/widgets/sp-widget.cpp
parentAdd CMake file to find LCMS2 (diff)
parentUpdate to trunk r13766 (diff)
downloadinkscape-bed3cc55fe40330718204c540b328d95407b00fa.tar.gz
inkscape-bed3cc55fe40330718204c540b328d95407b00fa.zip
Merge inkscape-cppify branch
(bzr r13767)
Diffstat (limited to 'src/widgets/sp-widget.cpp')
-rw-r--r--src/widgets/sp-widget.cpp97
1 files changed, 55 insertions, 42 deletions
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;
}