summaryrefslogtreecommitdiffstats
path: root/src/extension/dbus/dbus-init.cpp
diff options
context:
space:
mode:
authorEric Greveson <eric@greveson.co.uk>2013-07-04 22:51:56 +0000
committerEric Greveson <eric@greveson.co.uk>2013-07-04 22:51:56 +0000
commit036013caefc09f34ef9b418e1ca148a821c777d6 (patch)
tree75c64b01ea3d650b820b926d091e42a737d6be56 /src/extension/dbus/dbus-init.cpp
parentCode readability improvements and licence changes for action-context.* (diff)
downloadinkscape-036013caefc09f34ef9b418e1ca148a821c777d6.tar.gz
inkscape-036013caefc09f34ef9b418e1ca148a821c777d6.zip
Further renaming of DBus variables (object -> app_interface/doc_interface
and doc_context -> target) Fixes to application interface for document_new (now only works in console mode, and behaves as expected) (bzr r12387.1.8)
Diffstat (limited to 'src/extension/dbus/dbus-init.cpp')
-rw-r--r--src/extension/dbus/dbus-init.cpp107
1 files changed, 54 insertions, 53 deletions
diff --git a/src/extension/dbus/dbus-init.cpp b/src/extension/dbus/dbus-init.cpp
index fe59fc154..eb62f4b3a 100644
--- a/src/extension/dbus/dbus-init.cpp
+++ b/src/extension/dbus/dbus-init.cpp
@@ -78,6 +78,44 @@ dbus_register_object (DBusGConnection *connection,
return object;
}
+/*
+ * PRIVATE register a document interface for the document in the given ActionContext, if none exists.
+ * Return the DBus path to the interface (something like /org/inkscape/document_0).
+ * Note that while a DocumentInterface could be used either for a document with no desktop, or a
+ * document with a desktop, this function is only used for creating interfaces in the former case.
+ * Desktop-associated DocumentInterfaces are named /org/inkscape/desktop_0, etc.
+ * FIXME: This state of affairs probably needs tidying up at some point in the future.
+ */
+static gchar *
+dbus_register_document(Inkscape::ActionContext const & target)
+{
+ SPDocument *doc = target.getDocument();
+ g_assert(doc != NULL);
+
+ // Document name is not suitable for DBus name, as it might contain invalid chars
+ std::string name("/org/inkscape/document_");
+ std::stringstream ss;
+ ss << doc->serial();
+ name.append(ss.str());
+
+ DBusGConnection *connection = dbus_get_connection();
+ DBusGProxy *proxy = dbus_get_proxy(connection);
+
+ // Has the document already been registered?
+ if (!dbus_g_connection_lookup_g_object(connection, name.c_str())) {
+ // No - register it
+ DocumentInterface *doc_interface = (DocumentInterface*) dbus_register_object (connection,
+ proxy,
+ TYPE_DOCUMENT_INTERFACE,
+ &dbus_glib_document_interface_object_info,
+ name.c_str());
+
+ // Set the document info for this interface
+ doc_interface->target = target;
+ }
+ return strdup(name.c_str());
+}
+
/* Initialize a Dbus service */
void
init (void)
@@ -97,34 +135,19 @@ init (void)
TYPE_APPLICATION_INTERFACE,
&dbus_glib_application_interface_object_info,
DBUS_APPLICATION_INTERFACE_PATH);
-} //init
+}
gchar *
-init_document (void) {
- DBusGConnection *connection;
- DBusGProxy *proxy;
- SPDocument *doc;
-
- doc = SPDocument::createNewDoc(NULL, 1, TRUE);
-
- std::string name("/org/inkscape/");
- // This only works because a new document's name happens to contain
- // only valid DBus characters [A-Z][a-z][0-9]_
- // TODO: use the document->serial() instead, like below, and similar to
- // how desktops work?
- name.append(doc->getName());
- std::replace(name.begin(), name.end(), ' ', '_');
-
- connection = dbus_get_connection();
- proxy = dbus_get_proxy(connection);
+init_document (void)
+{
+ // This is for command-line use only
+ g_assert(!inkscape_use_gui());
- dbus_register_object (connection,
- proxy,
- TYPE_DOCUMENT_INTERFACE,
- &dbus_glib_document_interface_object_info,
- name.c_str());
- return strdup(name.c_str());
-} //init_document
+ // Create a blank document and get its selection model etc in an ActionContext
+ SPDocument *doc = SPDocument::createNewDoc(NULL, 1, TRUE);
+ inkscape_add_document(doc);
+ return dbus_register_document(inkscape_action_context_for_document(doc));
+}
gchar *
init_active_document()
@@ -134,28 +157,7 @@ init_active_document()
return NULL;
}
- // Document name is not suitable for DBus name, as it might contain invalid chars
- std::string name("/org/inkscape/document_");
- std::stringstream ss;
- ss << doc->serial();
- name.append(ss.str());
-
- DBusGConnection *connection = dbus_get_connection();
- DBusGProxy *proxy = dbus_get_proxy(connection);
-
- // Has the active document already been registered?
- if (!dbus_g_connection_lookup_g_object(connection, name.c_str())) {
- // No - register it
- DocumentInterface *obj = (DocumentInterface*) dbus_register_object (connection,
- proxy,
- TYPE_DOCUMENT_INTERFACE,
- &dbus_glib_document_interface_object_info,
- name.c_str());
-
- // Set the document info for this interface
- obj->doc_context = inkscape_active_action_context();
- }
- return strdup(name.c_str());
+ return dbus_register_document(inkscape_active_action_context());
}
gchar *
@@ -163,7 +165,6 @@ dbus_init_desktop_interface (SPDesktop * dt)
{
DBusGConnection *connection;
DBusGProxy *proxy;
- DocumentInterface *obj;
std::string name("/org/inkscape/desktop_");
std::stringstream out;
@@ -175,12 +176,12 @@ dbus_init_desktop_interface (SPDesktop * dt)
connection = dbus_get_connection();
proxy = dbus_get_proxy(connection);
- obj = (DocumentInterface*) dbus_register_object (connection,
+ DocumentInterface *doc_interface = (DocumentInterface*) dbus_register_object (connection,
proxy, TYPE_DOCUMENT_INTERFACE,
&dbus_glib_document_interface_object_info, name.c_str());
- obj->doc_context = Inkscape::ActionContext(dt);
- obj->updates = TRUE;
- dt->dbus_document_interface=obj;
+ doc_interface->target = Inkscape::ActionContext(dt);
+ doc_interface->updates = TRUE;
+ dt->dbus_document_interface=doc_interface;
return strdup(name.c_str());
}
@@ -195,7 +196,7 @@ init_desktop (void) {
out << dt->dkey;
name.append(out.str());
return strdup(name.c_str());
-} //init_desktop
+}