summaryrefslogtreecommitdiffstats
path: root/src/widgets
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
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')
-rw-r--r--src/widgets/box3d-toolbar.cpp4
-rw-r--r--src/widgets/desktop-widget.cpp10
-rw-r--r--src/widgets/gradient-vector.cpp53
-rw-r--r--src/widgets/icon.cpp6
-rw-r--r--src/widgets/select-toolbar.cpp2
-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
8 files changed, 121 insertions, 66 deletions
diff --git a/src/widgets/box3d-toolbar.cpp b/src/widgets/box3d-toolbar.cpp
index 02d102a11..e0fa591f4 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(INKSCAPE.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 2aab68812..989b060c9 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;
@@ -1672,7 +1672,7 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview)
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.
@@ -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/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 80fe93356..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));
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..24288299f 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 = INKSCAPE.active_desktop();
doc = sp_desktop_document(desktop);
modified_connection = doc->getDefs()->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&MarkerComboBox::handleDefsModified), this))) );