unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* DBus methods without name grabbing
@ 2011-01-02 21:06 Jan Moringen
  2011-01-03 12:55 ` Michael Albinus
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-02 21:06 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1072 bytes --]

Hi,

recently I ran into the following DBus-related problem: In order to
write a telepathy client [1], it is required to provide a certain
DBus-Interface under a special well-known name. Some telepathy component
seems to start calling methods immediately after the well-known name is
taken. Since the interface consists of multiple methods/properties, it
cannot be ensured that the interface is completely available when the
name is taken and the first calls are made using Emacs' current
DBus-interface. This is due to the fact that the function
`dbus-register-method' immediately takes the name.

To allow Emacs to work with this kind of DBus-interfaces, I suggest the
changes implemented in the attached patch. I don't known the Emacs C
code well very well, so it probably needs revision.

An example for which this change is necessary can be found in the
function `telepathy-client-register' in the attached file client.el from
my telepathy bindings.

Do you think this patch could be applied?

Kind regards,
Jan

[1] http://telepathy.freedesktop.org/spec/Client.html

[-- Attachment #2: dbus-dont-request-name.diff --]
[-- Type: text/x-patch, Size: 3732 bytes --]

=== modified file 'lisp/net/dbus.el'
--- lisp/net/dbus.el	2010-08-30 13:03:05 +0000
+++ lisp/net/dbus.el	2010-10-03 02:25:51 +0000
@@ -868,7 +868,8 @@
 	(add-to-list 'result (cons (car dict) (caadr dict)) 'append)))))
 
 (defun dbus-register-property
-  (bus service path interface property access value &optional emits-signal)
+  (bus service path interface property access value
+   &optional emits-signal dont-request-name)
   "Register property PROPERTY on the D-Bus BUS.
 
 BUS is either a Lisp symbol, `:system' or `:session', or a string
@@ -899,7 +900,8 @@
     (signal 'dbus-error (list "Access type invalid" access)))
 
   ;; Register SERVICE.
-  (unless (member service (dbus-list-names bus))
+  (unless (or dont-request-name
+	      (member service (dbus-list-names bus)))
     (dbus-call-method
      bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
      "RequestName" service 0))
@@ -907,11 +909,14 @@
   ;; Add the handler.  We use `dbus-service-emacs' as service name, in
   ;; order to let unregister SERVICE despite of this default handler.
   (dbus-register-method
-   bus service path dbus-interface-properties "Get" 'dbus-property-handler)
+   bus service path dbus-interface-properties "Get" 'dbus-property-handler
+   dont-request-name)
   (dbus-register-method
-   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler)
+   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler
+   dont-request-name)
   (dbus-register-method
-   bus service path dbus-interface-properties "Set" 'dbus-property-handler)
+   bus service path dbus-interface-properties "Set" 'dbus-property-handler
+   dont-request-name)
 
   ;; Send the PropertiesChanged signal.
   (when emits-signal

=== modified file 'src/dbusbind.c'
--- src/dbusbind.c	2010-10-01 13:56:33 +0000
+++ src/dbusbind.c	2010-10-03 02:17:34 +0000
@@ -1947,7 +1947,7 @@
 }
 
 DEFUN ("dbus-register-method", Fdbus_register_method, Sdbus_register_method,
-       6, 6, 0,
+       6, 7, 0,
        doc: /* Register for method METHOD on the D-Bus BUS.
 
 BUS is either a Lisp symbol, `:system' or `:session', or a string
@@ -1961,7 +1961,7 @@
 Lisp function to be called when a method call is received.  It must
 accept the input arguments of METHOD.  The return value of HANDLER is
 used for composing the returning D-Bus message.  */)
-  (Lisp_Object bus, Lisp_Object service, Lisp_Object path, Lisp_Object interface, Lisp_Object method, Lisp_Object handler)
+  (Lisp_Object bus, Lisp_Object service, Lisp_Object path, Lisp_Object interface, Lisp_Object method, Lisp_Object handler, Lisp_Object dont_request_name)
 {
   Lisp_Object key, key1, value;
   DBusConnection *connection;
@@ -1983,10 +1983,16 @@
 
   /* Request the known name from the bus.  We can ignore the result,
      it is set to -1 if there is an error - kind of redundancy.  */
-  dbus_error_init (&derror);
-  result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
-  if (dbus_error_is_set (&derror))
-    XD_ERROR (derror);
+  if (!dont_request_name || NILP (dont_request_name))
+    {
+      dbus_error_init (&derror);
+      result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
+      if (dbus_error_is_set (&derror))
+	XD_ERROR (derror);
+
+      /* Cleanup.  */
+      dbus_error_free (&derror);
+    }
 
   /* Create a hash table entry.  We use nil for the unique name,
      because the method might be called from anybody.  */
@@ -1997,9 +2003,6 @@
   if (NILP (Fmember (key1, value)))
     Fputhash (key, Fcons (key1, value), Vdbus_registered_objects_table);
 
-  /* Cleanup.  */
-  dbus_error_free (&derror);
-
   /* Return object.  */
   return list2 (key, list3 (service, path, handler));
 }


[-- Attachment #3: client.el --]
[-- Type: text/x-emacs-lisp, Size: 8494 bytes --]

;;; client.el ---
;;
;; Copyright (C) 2010, 2011 Jan Moringen
;;
;; Author: Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
;; Keywords: telepathy, communication, instant messaging
;;
;; This Program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This Program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses>.

\f
;;; Commentary:
;;

\f
;;; History:
;;
;; 0.1 - Initial version

\f
;;; Code:
;;

(require 'dbus)

(require 'telepathy/util)

\f
;;;
;;

(defconst telepathy-client-introspection-data
  "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"
\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">
<node name=\"/org/freedesktop/Telepathy/Client/%s\">
  <interface name=\"org.freedesktop.DBus.Introspectable\">
    <method name=\"Introspect\">
      <arg name=\"data\" direction=\"out\" type=\"s\"/>
    </method>
  </interface>
  <interface name=\"org.freedesktop.DBus.Properties\">
    <method name=\"Get\">
      <arg name=\"interface\" direction=\"in\" type=\"s\"/>
      <arg name=\"propname\" direction=\"in\" type=\"s\"/>
      <arg name=\"value\" direction=\"out\" type=\"v\"/>
    </method>
    <method name=\"Set\">
      <arg name=\"interface\" direction=\"in\" type=\"s\"/>
      <arg name=\"propname\" direction=\"in\" type=\"s\"/>
      <arg name=\"value\" direction=\"in\" type=\"v\"/>
    </method>
    <method name=\"GetAll\">
      <arg name=\"interface\" direction=\"in\" type=\"s\"/>
      <arg name=\"props\" direction=\"out\" type=\"a{sv}\"/>
    </method>
  </interface>
  <interface name=\"org.freedesktop.Telepathy.Client.Handler\">
    <method name=\"HandleChannels\">
      <arg name=\"Account\" type=\"o\" direction=\"in\"/>
      <arg name=\"Connection\" type=\"o\" direction=\"in\"/>
      <arg name=\"Channels\" type=\"a(oa{sv})\" direction=\"in\"/>
      <arg name=\"Requests_Satisfied\" type=\"ao\" direction=\"in\"/>
      <arg name=\"User_Action_Time\" type=\"t\" direction=\"in\"/>
      <arg name=\"Handler_Info\" type=\"a{sv}\" direction=\"in\"/>
    </method>
  </interface>
</node>"
  "")

\f
;;;
;;

(defvar telepathy-client-handlers (make-hash-table :test 'equal)
  "")

(defun telepathy-client-handler-services ()
  ""
  (let ((result))
    (maphash (lambda (key value) (push key result))
	     telepathy-client-handlers)
    result))

(defun telepathy-client-add-handler (service handler &optional client)
  ""
  (unless client
    (setq client "Emacs"))

  (unless (zerop (hash-table-count telepathy-client-handlers))
    (telepathy-client-unregister client))

  (puthash service handler telepathy-client-handlers)

  (telepathy-client-register client))

(defun telepathy-client-remove-handler (service &optional client)
  ""
  (unless client
    (setq client "Emacs"))

  (unless (zerop (hash-table-count telepathy-client-handlers))
    (telepathy-client-unregister client))

  (remhash service telepathy-client-handlers)

  (unless (zerop (hash-table-count telepathy-client-handlers))
    (telepathy-client-register client)))

\f
;;;
;;

(defun telepath-client-channel-handler (account connection-path channels &rest args)
  ""
  (dolist (channel-data channels)
    (let* ((connection         (telepathy-make-remote-proxy-from-path
				:session connection-path))

	   ;; Analyze the properties of the channel.
	   (channel-properties (second channel-data))

	   (contact-handle     (telepathy-prop-get
				telepathy-key-target-handle channel-properties))
	   (contact            (telepathy-make-contact
				connection contact-handle))

	   (service            (telepathy-prop-get
				telepathy-key-service channel-properties))
	   (handler            (gethash service telepathy-client-handlers))

	   ;; Obtain object path of channel object.
	   (channel-path       (first channel-data))
	   (channel-service    (let ((bla (telepathy-path->service channel-path)))
				 (substring bla 0 (position ?. bla :from-end t))))
	   (channel-object     (dbus-proxy-make-remote-proxy
				:session channel-service channel-path
				nil 'telepathy-tube))) ;; TODO could be a different kind of channel
      (oset channel-object :contact contact)

      (message "Channel")
      (message "  Path       %s" channel-path)
      (message "  Service    %s" service)
      (message "  Contact    %s" contact)
      (funcall handler channel-object)))
  :ignore)

(defun telepathy-client-register (name)
  ""
  ;; Create a DBus object to handle tube requests.
  (let ((service (format "org.freedesktop.Telepathy.Client.%s" name))
	(path    (format "/org/freedesktop/Telepathy/Client/%s" name)))
    ;; Install introspection information.
    (lexical-let ((introspection-data
		   (format telepathy-client-introspection-data name)))
      (dbus-register-method
       :session service path
       "org.freedesktop.DBus.Introspectable"
       "Introspect"
       (lambda (&rest args) introspection-data)
       t)) ;; don't request the name, yet

    ;; Register all properties belonging to the handler object.
    (dolist (name-and-value `(("HandlerChannelFilter"
			       ,(mapcar
				 #'telepathy-client-make-channel-filter
				 (telepathy-client-handler-services)))
			      ("BypassApproval"  t) ;; TODO was nil
			      ("Capabilities"    (:array :signature "as"))
			      ("HandledChannels" (:array :signature "ao"))))
      (destructuring-bind (name value) name-and-value
	(dbus-register-property
	 :session service path
	 "org.freedesktop.Telepathy.Client.Handler"
	 name :read value nil t))) ;; don't request the name, yet

    ;; TODO store the dbus objects for unregistering?
    (dbus-register-method
     :session service path
     "org.freedesktop.Telepathy.Client.Handler"
     "HandleChannels" #'telepath-client-channel-handler
     t) ;; don't request the name, yet

    (dbus-register-property
     :session service path
     "org.freedesktop.Telepathy.Client"
     "Interfaces"
     :read
     '("org.freedesktop.Telepathy.Client.Handler")
     nil t) ;; don't request the name, yet

    ;; Now that everything is in place, request the name.
    (dbus-call-method
     :session dbus-service-dbus dbus-path-dbus dbus-interface-dbus
     "RequestName" service 0)))

;; (/org/freedesktop/Telepathy/Connection/gabble/jabber/scymtym_2dtest_40jabber_2eorg_2fbe153d1c/StreamTubeChannel_2_1273735221
;;  ((org.freedesktop.Telepathy.Channel.InitiatorID
;;    (scymtym@jabber.org))
;;   (org.freedesktop.Telepathy.Channel.TargetHandleType
;;    (1))
;;   (org.freedesktop.Telepathy.Channel.TargetHandle
;;    (2))
;;   (org.freedesktop.Telepathy.Channel.TargetID
;;    (scymtym@jabber.org))
;;   (org.freedesktop.Telepathy.Channel.Requested
;;    (nil))
;;   (org.freedesktop.Telepathy.Channel.Type.StreamTube.SupportedSocketTypes
;;    (((0 (0 3)) (2 (0 1)) (3 (0 1)))))
;;   (org.freedesktop.Telepathy.Channel.Type.StreamTube.Service
;;    (org.gnu.emacs.rudel.announce))
;;   (org.freedesktop.Telepathy.Channel.Interface.Tube.Parameters
;;    (nil))
;;   (org.freedesktop.Telepathy.Channel.ChannelType
;;    (org.freedesktop.Telepathy.Channel.Type.StreamTube))
;;   (org.freedesktop.Telepathy.Channel.InitiatorHandle
;;    (2))
;;   (org.freedesktop.Telepathy.Channel.Interfaces
;;    ((org.freedesktop.Telepathy.Channel.Interface.Tube)))))

(defun telepathy-client-unregister (name)
  ""
  (dbus-unregister-service
   :session
   (format "org.freedesktop.Telepathy.Client.%s" name)))

\f
;;; Helper functions
;;

(defun telepathy-client-make-channel-filter (service)
  ""
  `((:dict-entry
     "org.freedesktop.Telepathy.Channel.ChannelType"
     (:variant :string "org.freedesktop.Telepathy.Channel.Type.StreamTube"))
    (:dict-entry
     "org.freedesktop.Telepathy.Channel.TargetHandleType"
     (:variant :uint32 1))
    (:dict-entry
     "org.freedesktop.Telepathy.Channel.Requested"
     (:variant :boolean nil))
    (:dict-entry
     "org.freedesktop.Telepathy.Channel.Type.StreamTube.Service"
     (:variant :string ,service))
    ))

(provide 'telepathy/client)
;;; client.el ends here

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-02 21:06 DBus methods without name grabbing Jan Moringen
@ 2011-01-03 12:55 ` Michael Albinus
  2011-01-04  2:42   ` Jan Moringen
  0 siblings, 1 reply; 13+ messages in thread
From: Michael Albinus @ 2011-01-03 12:55 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel

Jan Moringen <jan.moringen@uni-bielefeld.de> writes:

> Hi,

Hi Jan,

> recently I ran into the following DBus-related problem: In order to
> write a telepathy client [1], it is required to provide a certain
> DBus-Interface under a special well-known name. Some telepathy component
> seems to start calling methods immediately after the well-known name is
> taken. Since the interface consists of multiple methods/properties, it
> cannot be ensured that the interface is completely available when the
> name is taken and the first calls are made using Emacs' current
> DBus-interface. This is due to the fact that the function
> `dbus-register-method' immediately takes the name.

In general, I agree with your proposal. I have some few comments:

- The optional parameter in `dbus-register-method' and
  `dbus-register-property' shall be called `dont-register-service'. This
  would fit the dbus terminology we use so far.

- We might introduce a new function `dbus-register-service' (in dbusbind.c).
  It could offer optional argument flags, a list of the supported flags
  of "org.freedesktop.DBus.RequestName"
  (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
  DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
  `dbus-register-method' and `dbus-register-property' when
  `dont-register-service' is nil. Btw, the function
  `dbus-unregister-service' exists already ...

- It would be great, if you could add also changed doc strings, changed
  dbus.texi, ChangeLog and etc/NEWS entries.

> To allow Emacs to work with this kind of DBus-interfaces, I suggest the
> changes implemented in the attached patch. I don't known the Emacs C
> code well very well, so it probably needs revision.
>
> === modified file 'src/dbusbind.c'
> --- src/dbusbind.c	2010-10-01 13:56:33 +0000
> +++ src/dbusbind.c	2010-10-03 02:17:34 +0000
> @@ -1983,10 +1983,16 @@
>  
>    /* Request the known name from the bus.  We can ignore the result,
>       it is set to -1 if there is an error - kind of redundancy.  */
> -  dbus_error_init (&derror);
> -  result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
> -  if (dbus_error_is_set (&derror))
> -    XD_ERROR (derror);
> +  if (!dont_request_name || NILP (dont_request_name))

dont_request_name is a Lisp object, it is nil when not used in the
call. You shall use

if (NILP (dont_request_name))

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-03 12:55 ` Michael Albinus
@ 2011-01-04  2:42   ` Jan Moringen
  2011-01-04 10:10     ` Michael Albinus
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-04  2:42 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1837 bytes --]

Hi Michael,

thanks for the helpful reply.

An updated patch is attached.

There seems to be some oddities concerning the ChangeLog, I don't know
where these come from.

> In general, I agree with your proposal. I have some few comments:
> 
> - The optional parameter in `dbus-register-method' and
>   `dbus-register-property' shall be called `dont-register-service'. This
>   would fit the dbus terminology we use so far.

Done.

> - We might introduce a new function `dbus-register-service' (in dbusbind.c).
>   It could offer optional argument flags, a list of the supported flags
>   of "org.freedesktop.DBus.RequestName"
>   (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
>   DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
>   `dbus-register-method' and `dbus-register-property' when
>   `dont-register-service' is nil. Btw, the function
>   `dbus-unregister-service' exists already ...

I would rather tackle this change in a separate patch later.

> - It would be great, if you could add also changed doc strings, changed
>   dbus.texi, ChangeLog and etc/NEWS entries.

Done.

> > === modified file 'src/dbusbind.c'
> > --- src/dbusbind.c	2010-10-01 13:56:33 +0000
> > +++ src/dbusbind.c	2010-10-03 02:17:34 +0000
> > @@ -1983,10 +1983,16 @@
> >  
> >    /* Request the known name from the bus.  We can ignore the result,
> >       it is set to -1 if there is an error - kind of redundancy.  */
> > -  dbus_error_init (&derror);
> > -  result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
> > -  if (dbus_error_is_set (&derror))
> > -    XD_ERROR (derror);
> > +  if (!dont_request_name || NILP (dont_request_name))
> 
> dont_request_name is a Lisp object, it is nil when not used in the
> call. You shall use
> 
> if (NILP (dont_request_name))

Done.

Kind regards,
Jan


[-- Attachment #2: dbus-dont-register-service.patch --]
[-- Type: text/x-patch, Size: 16782 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jan.moringen@uni-bielefeld.de-20110104023841-\
#   k6faivnl513kq9ng
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: f899596030b46b47165b0dff53cb9e67f28ceaff
# timestamp: 2011-01-04 03:40:18 +0100
# base_revision_id: yamaoka@jpl.org-20110104022415-mkhshvn1pqc40zw6
# 
# Begin patch
=== modified file 'doc/misc/dbus.texi'
--- doc/misc/dbus.texi	2010-11-10 08:41:53 +0000
+++ doc/misc/dbus.texi	2011-01-04 02:38:41 +0000
@@ -1264,7 +1264,7 @@
 string.
 @end deffn
 
-@defun dbus-register-method bus service path interface method handler
+@defun dbus-register-method bus service path interface method handler dont-register-service
 With this function, an application registers @var{method} on the D-Bus
 @var{bus}.
 
@@ -1272,10 +1272,11 @@
 @code{:session}.
 
 @var{service} is the D-Bus service name of the D-Bus object
-@var{method} is registered for.  It must be a known name.
+@var{method} is registered for.  It must be a known name (See
+discussion of @var{dont-register-service} below).
 
-@var{path} is the D-Bus object path @var{service} is
-registered.
+@var{path} is the D-Bus object path @var{service} is registered (See
+discussion of @var{dont-register-service} below).
 
 @var{interface} is the interface offered by @var{service}.  It must
 provide @var{method}.
@@ -1294,6 +1295,13 @@
 In case @var{handler} shall return a reply message with an empty
 argument list, @var{handler} must return the symbol @code{:ignore}.
 
+When @var{dont-register-service} is non-nil, the known name
+@var{service} is not registered.  This means that other D-Bus clients
+have no way of noticing the newly registered method.  When interfaces
+are constructed incrementally by adding single methods or properties
+at a time, @var{dont-register-service} can be use to prevent other
+clients from discovering the still incomplete interface.
+
 The default D-Bus timeout when waiting for a message reply is 25
 seconds.  This value could be even smaller, depending on the calling
 client.  Therefore, @var{handler} shall not last longer than

=== modified file 'etc/NEWS'
--- etc/NEWS	2011-01-03 01:18:33 +0000
+++ etc/NEWS	2011-01-04 02:38:41 +0000
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2010, 2011  Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
@@ -556,7 +556,7 @@
 
 *** It is possible now, to access alternative buses than the default
 system or session bus.
-
+*** dbus-register-{method,property} do not necessarily register names anymore
 ** Tramp
 
 *** There exists a new inline access method "ksu" (kerberized su).
@@ -713,8 +713,8 @@
 
 *** If Emacs is compiled with libxml2 support (which is the default),
 two new Emacs Lisp-level functions are defined:
-`libxml-parse-html-region' (which will parse "real world" HTML)
-and `libxml-parse-xml-region' (which parses XML).  Both return an
+`xml-parse-html-string-internal' (which will parse "real world" HTML)
+and `xml-parse-string-internal' (which parses XML).  Both return an
 Emacs Lisp parse tree.
 
 FIXME: These should be front-ended by xml.el.

=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2011-01-03 20:50:05 +0000
+++ lisp/ChangeLog	2011-01-04 02:38:41 +0000
@@ -1,3 +1,8 @@
+2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
+
+	* net/dbus.el (dbus-register-property): Added optional parameter
+	dont-register-service.  Updated docstring accordingly.
+
 2011-01-02  Eli Zaretskii  <eliz@gnu.org>
 
 	* term/w32-win.el (dynamic-library-alist): Set up correctly for
@@ -114,13 +119,6 @@
 	* mail/mail-utils.el (mail-mbox-from): Handle From: headers with
 	multiple addresses.  (Bug#7760)
 
-2011-01-01  Ken Manheimer  <ken.manheimer@gmail.com>
-
-	allout.el (allout-auto-fill): Do not infinitely recurse - use
-	do-auto-fill if everything points back to allout-auto-fill.
-	(allout-mode-deactivate-hook): Declare obsolete, in favor of
-	standard-formed minor-mode deactivate hook, allout-mode-off-hook.
-
 2010-12-31  Michael Albinus  <michael.albinus@gmx.de>
 
 	* net/tramp-sh.el (tramp-methods): Add recursive options to "scpc"
@@ -190,21 +188,6 @@
 	pretty-printed, so that it is mergeable by line-based text merging,
 	as suggested by Iain Dalton <iain.dalton {_AT_} gmail.com>.
 
-2010-12-28  Ken Manheimer  <ken.manheimer@gmail.com>
-
-	allout.el (allout-v18/19-file-var-hack): Obsolete, remove.
-	(allout-mode): Argument "toggle" => "force".
-	Refine the docstring.
-	Remove special provisions for reactivation, besides the 'force'
-	argument.
-	Consolidate layout provisions coce directly into the activation
-	condition branch, now that we've removed those provisions.
-	(allout-unload-function): Explicitly activate the mode before
-	deactivating, if it's initially deactivated.
-	(allout-set-buffer-multibyte): Properly prevent byte-compiler
-	warnings for version of function used only where
-	set-buffer-multibyte is unavailable.
-
 2010-12-28  Chong Yidong  <cyd@stupidchicken.com>
 
 	* tool-bar.el (tool-bar-setup): Remove :enable conditions, which

=== modified file 'lisp/net/dbus.el'
--- lisp/net/dbus.el	2010-11-03 03:49:04 +0000
+++ lisp/net/dbus.el	2011-01-04 02:38:41 +0000
@@ -868,21 +868,23 @@
 	(add-to-list 'result (cons (car dict) (caadr dict)) 'append)))))
 
 (defun dbus-register-property
-  (bus service path interface property access value &optional emits-signal)
+  (bus service path interface property access value
+   &optional emits-signal dont-register-service)
   "Register property PROPERTY on the D-Bus BUS.
 
 BUS is either a Lisp symbol, `:system' or `:session', or a string
 denoting the bus address.
 
 SERVICE is the D-Bus service name of the D-Bus.  It must be a
-known name.
+known name (See discussion of DONT-REGISTER-SERVICE below).
 
-PATH is the D-Bus object path SERVICE is registered.  INTERFACE
-is the name of the interface used at PATH, PROPERTY is the name
-of the property of INTERFACE.  ACCESS indicates, whether the
-property can be changed by other services via D-Bus.  It must be
-either the symbol `:read' or `:readwrite'.  VALUE is the initial
-value of the property, it can be of any valid type (see
+PATH is the D-Bus object path SERVICE is registered (See
+discussion of DONT-REGISTER-SERVICE below).  INTERFACE is the
+name of the interface used at PATH, PROPERTY is the name of the
+property of INTERFACE.  ACCESS indicates, whether the property
+can be changed by other services via D-Bus.  It must be either
+the symbol `:read' or `:readwrite'.  VALUE is the initial value
+of the property, it can be of any valid type (see
 `dbus-call-method' for details).
 
 If PROPERTY already exists on PATH, it will be overwritten.  For
@@ -894,12 +896,20 @@
 PATH, including a default handler for the \"Get\", \"GetAll\" and
 \"Set\" methods of this interface.  When EMITS-SIGNAL is non-nil,
 the signal \"PropertiesChanged\" is sent when the property is
-changed by `dbus-set-property'."
+changed by `dbus-set-property'. 
+
+When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is
+not registered.  This means that other D-Bus clients have no way
+of noticing the newly registered property.  When interfaces are
+constructed incrementally by adding single methods or properties
+at a time, DONT-REGISTER-SERVICE can be use to prevent other
+clients from discovering the still incomplete interface."
   (unless (member access '(:read :readwrite))
     (signal 'dbus-error (list "Access type invalid" access)))
 
   ;; Register SERVICE.
-  (unless (member service (dbus-list-names bus))
+  (unless (or dont-register-service
+	      (member service (dbus-list-names bus)))
     (dbus-call-method
      bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
      "RequestName" service 0))
@@ -907,11 +917,14 @@
   ;; Add the handler.  We use `dbus-service-emacs' as service name, in
   ;; order to let unregister SERVICE despite of this default handler.
   (dbus-register-method
-   bus service path dbus-interface-properties "Get" 'dbus-property-handler)
-  (dbus-register-method
-   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler)
-  (dbus-register-method
-   bus service path dbus-interface-properties "Set" 'dbus-property-handler)
+   bus service path dbus-interface-properties "Get" 'dbus-property-handler
+   dont-register-service)
+  (dbus-register-method
+   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler
+   dont-register-service)
+  (dbus-register-method
+   bus service path dbus-interface-properties "Set" 'dbus-property-handler
+   dont-register-service)
 
   ;; Send the PropertiesChanged signal.
   (when emits-signal

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2011-01-03 19:35:59 +0000
+++ src/ChangeLog	2011-01-04 02:38:41 +0000
@@ -1,7 +1,7 @@
-2011-01-03  Eli Zaretskii  <eliz@gnu.org>
+2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
-	* image.c (png_jmpbuf): Remove definition.
-	(my_png_error, png_load): Don't use png_jmpbuf.
+	* dbusbind.c (dbus-register-method): Added optional parameter
+	dont-register-service.  Updated docstring accordingly.
 
 2011-01-02  Eli Zaretskii  <eliz@gnu.org>
 

=== modified file 'src/dbusbind.c'
--- src/dbusbind.c	2010-11-10 09:08:05 +0000
+++ src/dbusbind.c	2011-01-04 02:38:41 +0000
@@ -1983,21 +1983,30 @@
 }
 
 DEFUN ("dbus-register-method", Fdbus_register_method, Sdbus_register_method,
-       6, 6, 0,
+       6, 7, 0,
        doc: /* Register for method METHOD on the D-Bus BUS.
 
 BUS is either a Lisp symbol, `:system' or `:session', or a string
 denoting the bus address.
 
 SERVICE is the D-Bus service name of the D-Bus object METHOD is
-registered for.  It must be a known name.
-
-PATH is the D-Bus object path SERVICE is registered.  INTERFACE is the
-interface offered by SERVICE.  It must provide METHOD.  HANDLER is a
-Lisp function to be called when a method call is received.  It must
-accept the input arguments of METHOD.  The return value of HANDLER is
-used for composing the returning D-Bus message.  */)
-  (Lisp_Object bus, Lisp_Object service, Lisp_Object path, Lisp_Object interface, Lisp_Object method, Lisp_Object handler)
+registered for.  It must be a known name (See discussion of
+DONT-REGISTER-SERVICE below).
+
+PATH is the D-Bus object path SERVICE is registered (See discussion of
+DONT-REGISTER-SERVICE below).  INTERFACE is the interface offered by
+SERVICE.  It must provide METHOD.  HANDLER is a Lisp function to be
+called when a method call is received.  It must accept the input
+arguments of METHOD.  The return value of HANDLER is used for
+composing the returning D-Bus message.
+
+When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not
+registered.  This means that other D-Bus clients have no way of
+noticing the newly registered method.  When interfaces are constructed
+incrementally by adding single methods or properties at a time,
+DONT-REGISTER-SERVICE can be use to prevent other clients from
+discovering the still incomplete interface.*/)
+  (Lisp_Object bus, Lisp_Object service, Lisp_Object path, Lisp_Object interface, Lisp_Object method, Lisp_Object handler, Lisp_Object dont_register_service)
 {
   Lisp_Object key, key1, value;
   DBusConnection *connection;
@@ -2019,10 +2028,16 @@
 
   /* Request the known name from the bus.  We can ignore the result,
      it is set to -1 if there is an error - kind of redundancy.  */
-  dbus_error_init (&derror);
-  result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
-  if (dbus_error_is_set (&derror))
-    XD_ERROR (derror);
+  if (NILP (dont_register_service))
+    {
+      dbus_error_init (&derror);
+      result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
+      if (dbus_error_is_set (&derror))
+	XD_ERROR (derror);
+
+      /* Cleanup.  */
+      dbus_error_free (&derror);
+    }
 
   /* Create a hash table entry.  We use nil for the unique name,
      because the method might be called from anybody.  */
@@ -2033,9 +2048,6 @@
   if (NILP (Fmember (key1, value)))
     Fputhash (key, Fcons (key1, value), Vdbus_registered_objects_table);
 
-  /* Cleanup.  */
-  dbus_error_free (&derror);
-
   /* Return object.  */
   return list2 (key, list3 (service, path, handler));
 }

# Begin bundle
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
h8641BlGB26NMyyaf+LuSKcKEhTJ/5Ng

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-04  2:42   ` Jan Moringen
@ 2011-01-04 10:10     ` Michael Albinus
  2011-01-04 10:29       ` Jan Moringen
                         ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Michael Albinus @ 2011-01-04 10:10 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel

Jan Moringen <jan.moringen@uni-bielefeld.de> writes:

> Hi Michael,

Hi Jan,

> An updated patch is attached.

Looks OK to me. Do you have commit rights, or shall I commit it for you?

>> - We might introduce a new function `dbus-register-service' (in dbusbind.c).
>>   It could offer optional argument flags, a list of the supported flags
>>   of "org.freedesktop.DBus.RequestName"
>>   (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
>>   DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
>>   `dbus-register-method' and `dbus-register-property' when
>>   `dont-register-service' is nil. Btw, the function
>>   `dbus-unregister-service' exists already ...
>
> I would rather tackle this change in a separate patch later.

OK, I'll do it next days (except you want to do it yourself :-)

> Kind regards,
> Jan

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-04 10:10     ` Michael Albinus
@ 2011-01-04 10:29       ` Jan Moringen
  2011-01-04 13:09         ` Michael Albinus
  2011-01-05  4:17       ` Jan Moringen
       [not found]       ` <1294201048.2508.1.camel@gunhead>
  2 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-04 10:29 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel, Jan Moringen

On Tue, 2011-01-04 at 11:10 +0100, Michael Albinus wrote:
> Jan Moringen <jan.moringen@uni-bielefeld.de> writes:
> 
> > Hi Michael,
> 
> Hi Jan,
> 
> > An updated patch is attached.
> 
> Looks OK to me. Do you have commit rights, or shall I commit it for you?

No and yes, please.

> >> - We might introduce a new function `dbus-register-service' (in dbusbind.c).
> >>   It could offer optional argument flags, a list of the supported flags
> >>   of "org.freedesktop.DBus.RequestName"
> >>   (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
> >>   DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
> >>   `dbus-register-method' and `dbus-register-property' when
> >>   `dont-register-service' is nil. Btw, the function
> >>   `dbus-unregister-service' exists already ...
> >
> > I would rather tackle this change in a separate patch later.
> 
> OK, I'll do it next days (except you want to do it yourself :-)

I would do it, but I don't know when I will get to it.

Kind regards,
Jan




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-04 10:29       ` Jan Moringen
@ 2011-01-04 13:09         ` Michael Albinus
  0 siblings, 0 replies; 13+ messages in thread
From: Michael Albinus @ 2011-01-04 13:09 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel, Jan Moringen

Jan Moringen <jmoringen@uni-bielefeld.de> writes:

Hi Jan,

>> Looks OK to me. Do you have commit rights, or shall I commit it for you?
>
> No and yes, please.

Done, with some minor tweakings.

>> > I would rather tackle this change in a separate patch later.
>> 
>> OK, I'll do it next days (except you want to do it yourself :-)
>
> I would do it, but I don't know when I will get to it.

So I let it to you. That endorses my laziness ...

> Kind regards,
> Jan

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-04 10:10     ` Michael Albinus
  2011-01-04 10:29       ` Jan Moringen
@ 2011-01-05  4:17       ` Jan Moringen
  2011-01-05 11:45         ` Michael Albinus
       [not found]       ` <1294201048.2508.1.camel@gunhead>
  2 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-05  4:17 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 782 bytes --]

Hi Michael.

> >> - We might introduce a new function `dbus-register-service' (in dbusbind.c).
> >>   It could offer optional argument flags, a list of the supported flags
> >>   of "org.freedesktop.DBus.RequestName"
> >>   (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
> >>   DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
> >>   `dbus-register-method' and `dbus-register-property' when
> >>   `dont-register-service' is nil. Btw, the function
> >>   `dbus-unregister-service' exists already ...
> >
> > I would rather tackle this change in a separate patch later.
> 
> OK, I'll do it next days (except you want to do it yourself :-)

I gave it a shot. See attached patch. Like the last patch, this probably
needs revision.

Kind regards,
Jan

[-- Attachment #2: dbus-register-service.patch --]
[-- Type: text/x-patch, Size: 8026 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jan.moringen@uni-bielefeld.de-20110105040922-\
#   vc2ma9x9190gle92
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: 951371c07f78adb5726378a78265e35c8e00f263
# timestamp: 2011-01-05 05:09:46 +0100
# base_revision_id: ken.manheimer@gmail.com-20110104195021-\
#   1x68s956czngphh2
# 
# Begin patch
=== modified file 'doc/misc/dbus.texi'
--- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
+++ doc/misc/dbus.texi	2011-01-05 04:09:22 +0000
@@ -1491,6 +1491,16 @@
 to the service from D-Bus.
 @end defun
 
+@defun dbus-register-service bus service
+Register the known name @var{service} on D-Bus @var{bus}.
+
+@var{bus} is either the symbol @code{:system} or the symbol
+@code{:session}.
+
+@var{service} is the service name to be registered on the D-Bus.  It
+must be a known name.
+@end defun
+
 @defun dbus-unregister-service bus service
 Unregister all objects from D-Bus @var{bus}, registered by Emacs for
 @var{service}.

=== modified file 'etc/NEWS'
--- etc/NEWS	2011-01-04 16:57:45 +0000
+++ etc/NEWS	2011-01-05 04:09:22 +0000
@@ -558,7 +558,9 @@
 system or session bus.
 
 *** dbus-register-{method,property} do not necessarily register names anymore.
-
+*** New function dbus-register-service
+    Register a service known name on a D-Bus without simultaneously
+    registering a property or a method
 ** Tramp
 
 *** There exists a new inline access method "ksu" (kerberized su).

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2011-01-04 11:11:43 +0000
+++ src/ChangeLog	2011-01-05 04:09:22 +0000
@@ -1,3 +1,14 @@
+2011-01-05  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	Added function dbus-register-service in dbusbind.c
+	* dbusbind.c (Qdbus_register_service): new variable; holds
+	function dbus-register-service
+	(Fdbus_register_service): new function; register a service known
+	name on a D-Bus
+	(Fdbus_register_method): use Fdbus_register_service to register
+	the service name
+	(syms_of_dbusbind): added symbol `dbus-register-service'
+
 2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
 	* dbusbind.c (Fdbus_register_method): Added optional parameter

=== modified file 'src/dbusbind.c'
--- src/dbusbind.c	2011-01-04 11:11:43 +0000
+++ src/dbusbind.c	2011-01-05 04:09:22 +0000
@@ -38,6 +38,7 @@
 Lisp_Object Qdbus_method_return_internal;
 Lisp_Object Qdbus_method_error_internal;
 Lisp_Object Qdbus_send_signal;
+Lisp_Object Qdbus_register_service;
 Lisp_Object Qdbus_register_signal;
 Lisp_Object Qdbus_register_method;
 
@@ -1835,6 +1836,43 @@
   xd_in_read_queued_messages = 0;
 }
 
+DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
+       2, 2, 0,
+       doc: /* Register known name SERVICE on the D-Bus BUS.
+
+BUS is either a Lisp symbol, `:system' or `:session', or a string
+denoting the bus address.
+
+SERVICE is the D-Bus service name that should be registered.  It must
+be a known name.
+
+Return nil.*/)
+  (Lisp_Object bus, Lisp_Object service)
+{
+  DBusConnection *connection;
+  int result;
+  DBusError derror;
+
+  /* Check parameters.  */
+  CHECK_STRING (service);
+
+  /* Open a connection to the bus.  */
+  connection = xd_initialize (bus, TRUE);
+
+  /* Request the known name from the bus.  We can ignore the result,
+     it is set to -1 if there is an error - kind of redundancy.  */
+  dbus_error_init (&derror);
+  result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
+  if (dbus_error_is_set (&derror))
+    XD_ERROR (derror);
+
+  /* Cleanup.  */
+  dbus_error_free (&derror);
+
+  /* Return object.  */
+  return Qnil;
+}
+
 DEFUN ("dbus-register-signal", Fdbus_register_signal, Sdbus_register_signal,
        6, MANY, 0,
        doc: /* Register for signal SIGNAL on the D-Bus BUS.
@@ -2028,18 +2066,8 @@
   /* Open a connection to the bus.  */
   connection = xd_initialize (bus, TRUE);
 
-  /* Request the known name from the bus.  We can ignore the result,
-     it is set to -1 if there is an error - kind of redundancy.  */
-  if (NILP (dont_register_service))
-    {
-      dbus_error_init (&derror);
-      result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
-      if (dbus_error_is_set (&derror))
-	XD_ERROR (derror);
-
-      /* Cleanup.  */
-      dbus_error_free (&derror);
-    }
+  /* Request the name.  */
+  Fdbus_register_service (bus, service);
 
   /* Create a hash table entry.  We use nil for the unique name,
      because the method might be called from anybody.  */
@@ -2091,6 +2119,10 @@
   staticpro (&Qdbus_send_signal);
   defsubr (&Sdbus_send_signal);
 
+  Qdbus_register_service = intern_c_string ("dbus-register-service");
+  staticpro (&Qdbus_register_service);
+  defsubr (&Sdbus_register_service);
+
   Qdbus_register_signal = intern_c_string ("dbus-register-signal");
   staticpro (&Qdbus_register_signal);
   defsubr (&Sdbus_register_signal);

# Begin bundle
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
LPS36A==

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
       [not found]       ` <1294201048.2508.1.camel@gunhead>
@ 2011-01-05 10:46         ` Jan Moringen
  0 siblings, 0 replies; 13+ messages in thread
From: Jan Moringen @ 2011-01-05 10:46 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

> > >> - We might introduce a new function `dbus-register-service' (in dbusbind.c).
> > >>   It could offer optional argument flags, a list of the supported flags
> > >>   of "org.freedesktop.DBus.RequestName"
> > >>   (DBUS_NAME_FLAG_ALLOW_REPLACEMENT, DBUS_NAME_FLAG_REPLACE_EXISTING,
> > >>   DBUS_NAME_FLAG_DO_NOT_QUEUE). This function shall be called in
> > >>   `dbus-register-method' and `dbus-register-property' when
> > >>   `dont-register-service' is nil. Btw, the function
> > >>   `dbus-unregister-service' exists already ...
> > >
> > > I would rather tackle this change in a separate patch later.
> > 
> > OK, I'll do it next days (except you want to do it yourself :-)
> 
> I gave it a shot. See attached patch. Like the last patch, this probably
> needs revision.

I forgot to check dont_register_service in dbus_register_method, but I
can't make an updated patch right now.

Kind regards,
Jan




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-05  4:17       ` Jan Moringen
@ 2011-01-05 11:45         ` Michael Albinus
  2011-01-08  5:48           ` Jan Moringen
  0 siblings, 1 reply; 13+ messages in thread
From: Michael Albinus @ 2011-01-05 11:45 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel

Jan Moringen <jan.moringen@uni-bielefeld.de> writes:

> Hi Michael.

Hi Jan,

> I gave it a shot. See attached patch. Like the last patch, this probably
> needs revision.

Thanks!

> --- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
> +++ doc/misc/dbus.texi	2011-01-05 04:09:22 +0000
> @@ -1491,6 +1491,16 @@
>  to the service from D-Bus.
>  @end defun
>  
> +@defun dbus-register-service bus service
> +Register the known name @var{service} on D-Bus @var{bus}.
> +
> +@var{bus} is either the symbol @code{:system} or the symbol
> +@code{:session}.
> +
> +@var{service} is the service name to be registered on the D-Bus.  It
> +must be a known name.
> +@end defun
> +
>  @defun dbus-unregister-service bus service
>  Unregister all objects from D-Bus @var{bus}, registered by Emacs for
>  @var{service}.

Maybe we shall rearrange the whole node a little bit. In the
introductionary paragraph, service names could be described more
detailed, especially their registration policies. Afterwards,
dbus-register-service shall follow.

The explanation of dont-register-service in dbus-register-method and
dbus-register-property could be shortened, referring to the explanation
in dbus-register-service.

> --- etc/NEWS	2011-01-04 16:57:45 +0000
> +++ etc/NEWS	2011-01-05 04:09:22 +0000
> @@ -558,7 +558,9 @@
>  *** dbus-register-{method,property} do not necessarily register names anymore.
> -
> +*** New function dbus-register-service
> +    Register a service known name on a D-Bus without simultaneously
> +    registering a property or a method

I guess we could join both entries.

> --- src/dbusbind.c	2011-01-04 11:11:43 +0000
> +++ src/dbusbind.c	2011-01-05 04:09:22 +0000
> +DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
> +       2, 2, 0,
> +       doc: /* Register known name SERVICE on the D-Bus BUS.
> +
> +BUS is either a Lisp symbol, `:system' or `:session', or a string
> +denoting the bus address.
> +
> +SERVICE is the D-Bus service name that should be registered.  It must
> +be a known name.
> +
> +Return nil.*/)
> +  (Lisp_Object bus, Lisp_Object service)

Your implementation looks OK to me. However, I have a more general
function in mind. Something like this:

--8<---------------cut here---------------start------------->8---
DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
       2, MANY, 0, doc: /* Register known name SERVICE on the D-Bus BUS.

BUS is either a Lisp symbol, `:system' or `:session', or a string
denoting the bus address.

SERVICE is the D-Bus service name that should be registered.

FLAGS are integers, which control how the service name is registered.
The following integer constants could be used:

`dbus-service-allow-replacement': Allow another service to become the
primary owner if requested.

`dbus-service-replace-existing': Request to replace the current
primary owner.

`dbus-service-do-not-queue': If we can not become the primary owner do
not place us in the queue.

The function returns an integer, indicating the result of the
operation.  There are predefined constants to check:

`dbus-service-primary-owner': Service has become the primary owner of
the requested name.

`dbus-service-in-queue': Service could not become the primary owner
and has been placed in the queue.

`dbus-service-exists': Service is already in the queue.

`dbus-service-already-owner': Service is already the primary owner.

Example:

\(dbus-register-service :session dbus-service-emacs)

  => 1 ;; This is `dbus-service-primary-owner'.

\(dbus-register-service
  :session "org.freedesktop.TextEditor"
  dbus-service-allow-replacement dbus-service-replace-existing)

  => 4 ;; This is `dbus-service-already-owner'.

usage: (dbus-register-service BUS SERVICE &rest FLAGS)  */)
  (int nargs, register Lisp_Object *args)
--8<---------------cut here---------------end--------------->8---

The constants shall be declared as well, for initialization you could
use DBUS_NAME_FLAG* and DBUS_REQUEST_NAME_REPLY* from dbus-shared.h.

And while we are at this, maybe dbus-unregister-service could also
return a similar result, based on DBUS_RELEASE_NAME_REPLY*.

> @@ -2028,18 +2066,8 @@
> +  /* Request the name.  */
> +  Fdbus_register_service (bus, service);

As you have said the other message, the check for dont-register-service
is missing.

Furthermore, I would also propose to use dbus-register-service in
dbus-register-property (in dbus.el).

> Kind regards,
> Jan

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-05 11:45         ` Michael Albinus
@ 2011-01-08  5:48           ` Jan Moringen
  2011-01-09  9:42             ` Michael Albinus
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-08  5:48 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 4798 bytes --]

Hi,

I finally got to improving my patch. Feedback would be appreciated.

> > --- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
> > +++ doc/misc/dbus.texi	2011-01-05 04:09:22 +0000
> > @@ -1491,6 +1491,16 @@
> >  to the service from D-Bus.
> >  @end defun
> >  
> > +@defun dbus-register-service bus service
> > +Register the known name @var{service} on D-Bus @var{bus}.
> > +
> > +@var{bus} is either the symbol @code{:system} or the symbol
> > +@code{:session}.
> > +
> > +@var{service} is the service name to be registered on the D-Bus.  It
> > +must be a known name.
> > +@end defun
> > +
> >  @defun dbus-unregister-service bus service
> >  Unregister all objects from D-Bus @var{bus}, registered by Emacs for
> >  @var{service}.
> 
> Maybe we shall rearrange the whole node a little bit. In the
> introductionary paragraph, service names could be described more
> detailed, especially their registration policies. Afterwards,
> dbus-register-service shall follow.

Done.

> The explanation of dont-register-service in dbus-register-method and
> dbus-register-property could be shortened, referring to the explanation
> in dbus-register-service.

I don't see which parts of the these discussions could be shortened.

> > --- etc/NEWS	2011-01-04 16:57:45 +0000
> > +++ etc/NEWS	2011-01-05 04:09:22 +0000
> > @@ -558,7 +558,9 @@
> >  *** dbus-register-{method,property} do not necessarily register names anymore.
> > -
> > +*** New function dbus-register-service
> > +    Register a service known name on a D-Bus without simultaneously
> > +    registering a property or a method
> 
> I guess we could join both entries.

Done.

> > --- src/dbusbind.c	2011-01-04 11:11:43 +0000
> > +++ src/dbusbind.c	2011-01-05 04:09:22 +0000
> > +DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
> > +       2, 2, 0,
> > +       doc: /* Register known name SERVICE on the D-Bus BUS.
> > +
> > +BUS is either a Lisp symbol, `:system' or `:session', or a string
> > +denoting the bus address.
> > +
> > +SERVICE is the D-Bus service name that should be registered.  It must
> > +be a known name.
> > +
> > +Return nil.*/)
> > +  (Lisp_Object bus, Lisp_Object service)
> 
> Your implementation looks OK to me. However, I have a more general
> function in mind. Something like this:
> 
> --8<---------------cut here---------------start------------->8---
> DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
>        2, MANY, 0, doc: /* Register known name SERVICE on the D-Bus BUS.
> 
> BUS is either a Lisp symbol, `:system' or `:session', or a string
> denoting the bus address.
> 
> SERVICE is the D-Bus service name that should be registered.
> 
> FLAGS are integers, which control how the service name is registered.
> The following integer constants could be used:
> 
> `dbus-service-allow-replacement': Allow another service to become the
> primary owner if requested.
> 
> `dbus-service-replace-existing': Request to replace the current
> primary owner.
> 
> `dbus-service-do-not-queue': If we can not become the primary owner do
> not place us in the queue.
> 
> The function returns an integer, indicating the result of the
> operation.  There are predefined constants to check:
> 
> `dbus-service-primary-owner': Service has become the primary owner of
> the requested name.
> 
> `dbus-service-in-queue': Service could not become the primary owner
> and has been placed in the queue.
> 
> `dbus-service-exists': Service is already in the queue.
> 
> `dbus-service-already-owner': Service is already the primary owner.
> 
> Example:
> 
> \(dbus-register-service :session dbus-service-emacs)
> 
>   => 1 ;; This is `dbus-service-primary-owner'.
> 
> \(dbus-register-service
>   :session "org.freedesktop.TextEditor"
>   dbus-service-allow-replacement dbus-service-replace-existing)
> 
>   => 4 ;; This is `dbus-service-already-owner'.
> 
> usage: (dbus-register-service BUS SERVICE &rest FLAGS)  */)
>   (int nargs, register Lisp_Object *args)
> --8<---------------cut here---------------end--------------->8---
> 
> The constants shall be declared as well, for initialization you could
> use DBUS_NAME_FLAG* and DBUS_REQUEST_NAME_REPLY* from dbus-shared.h.

I'm not sure about the integer constant and how they would be declared.
I used keywords instead.

> And while we are at this, maybe dbus-unregister-service could also
> return a similar result, based on DBUS_RELEASE_NAME_REPLY*.

Done.

> > @@ -2028,18 +2066,8 @@
> > +  /* Request the name.  */
> > +  Fdbus_register_service (bus, service);
> 
> As you have said the other message, the check for dont-register-service
> is missing.

This is fixed now.

> Furthermore, I would also propose to use dbus-register-service in
> dbus-register-property (in dbus.el).

Done.

Kind regards,
Jan

[-- Attachment #2: dbus-un-register-service.patch --]
[-- Type: text/x-patch, Size: 22908 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jan.moringen@uni-bielefeld.de-20110108054407-\
#   33fj9wo8x4hb8oiu
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: e93dadb08dca5ffc0f5f12e68e26573ef00e56e8
# timestamp: 2011-01-08 06:44:49 +0100
# base_revision_id: ken.manheimer@gmail.com-20110104195021-\
#   1x68s956czngphh2
# 
# Begin patch
=== modified file 'doc/misc/ChangeLog'
--- doc/misc/ChangeLog	2011-01-04 12:38:33 +0000
+++ doc/misc/ChangeLog	2011-01-08 05:37:49 +0000
@@ -1,3 +1,8 @@
+2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	* dbus.texi (Receiving Method Calls): rearranged node to mention
+	dbus-register-service and dbus-unregister-service first
+
 2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
 	* dbus.texi (Receiving Method Calls): Describe new optional

=== modified file 'doc/misc/dbus.texi'
--- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
+++ doc/misc/dbus.texi	2011-01-08 05:37:49 +0000
@@ -1244,9 +1244,37 @@
 @cindex method calls, returning
 @cindex returning method calls
 
-Emacs can also offer own methods, which can be called by other
-applications.  These methods could be an implementation of an
-interface of a well known service, like @samp{org.freedesktop.TextEditor}.
+In order to register methods on the D-Bus, Emacs has to request a well
+known name on the D-Bus under which it will be available for other
+clients.  Names on the D-Bus can be registered and unregistered using
+the following functions:
+
+@defun dbus-register-service bus service &rest flags
+Register the known name @var{service} on D-Bus @var{bus}.
+
+@var{bus} is either the symbol @code{:system} or the symbol
+@code{:session}.
+
+@var{service} is the service name to be registered on the D-Bus.  It
+must be a known name.
+@end defun
+
+@defun dbus-unregister-service bus service
+Unregister all objects from D-Bus @var{bus}, registered by Emacs for
+@var{service}.
+
+@var{bus} is either the symbol @code{:system} or the symbol
+@code{:session}.
+
+@var{service} is the D-Bus service name of the D-Bus.  It must be a
+known name.  Emacs releases its association to @var{service} from
+D-Bus.
+@end defun
+
+When a name has been chosen, Emacs can offer own methods, which can be
+called by other applications.  These methods could be an
+implementation of an interface of a well known service, like
+@samp{org.freedesktop.TextEditor}.
 
 It could be also an implementation of an own interface.  In this case,
 the service name must be @samp{org.gnu.Emacs}.  The object path shall
@@ -1491,18 +1519,6 @@
 to the service from D-Bus.
 @end defun
 
-@defun dbus-unregister-service bus service
-Unregister all objects from D-Bus @var{bus}, registered by Emacs for
-@var{service}.
-
-@var{bus} is either the symbol @code{:system} or the symbol
-@code{:session}.
-
-@var{service} is the D-Bus service name of the D-Bus.  It must be a
-known name.  Emacs releases its association to @var{service} from
-D-Bus.
-@end defun
-
 
 @node Signals
 @chapter Sending and receiving signals.

=== modified file 'etc/NEWS'
--- etc/NEWS	2011-01-04 16:57:45 +0000
+++ etc/NEWS	2011-01-08 05:43:02 +0000
@@ -557,8 +557,13 @@
 *** It is possible now, to access alternative buses than the default
 system or session bus.
 
-*** dbus-register-{method,property} do not necessarily register names anymore.
+*** dbus-register-{service,method,property} 
+    The -method and -property functions do not automatically register
+    names anymore.
 
+    The new function dbus-register-service registers a service known
+    name on a D-Bus without simultaneously registering a property or a
+    method
 ** Tramp
 
 *** There exists a new inline access method "ksu" (kerberized su).

=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2011-01-04 19:50:21 +0000
+++ lisp/ChangeLog	2011-01-08 05:44:07 +0000
@@ -1,3 +1,11 @@
+2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	* net/dbus.el (dbus-unregister-service): translate returned
+	integer into a symbol
+
+	* net/dbus.el (dbus-register-property): use
+	`dbus-register-service' to do the name registration
+
 2011-01-04  Ken Manheimer  <ken.manheimer@gmail.com>
 
 	* Summary: Reconcile with changes in line movement behavior for

=== modified file 'lisp/net/dbus.el'
--- lisp/net/dbus.el	2011-01-04 10:57:24 +0000
+++ lisp/net/dbus.el	2011-01-08 05:44:07 +0000
@@ -193,9 +193,14 @@
 	       (puthash key (delete elt value) dbus-registered-objects-table)
 	     (remhash key dbus-registered-objects-table))))))
    dbus-registered-objects-table)
-  (dbus-call-method
-   bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
-   "ReleaseName" service))
+  (let ((reply (dbus-call-method
+		bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
+		"ReleaseName" service)))
+    (case reply
+      (1 :released)
+      (2 :non-existent)
+      (3 :not-owner)
+      (t reply))))
 
 (defun dbus-call-method-non-blocking-handler (&rest args)
   "Handler for reply messages of asynchronous D-Bus message calls.
@@ -917,14 +922,18 @@
   ;; Add the handler.  We use `dbus-service-emacs' as service name, in
   ;; order to let unregister SERVICE despite of this default handler.
   (dbus-register-method
-   bus service path dbus-interface-properties "Get" 'dbus-property-handler
-   dont-register-service)
-  (dbus-register-method
-   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler
-   dont-register-service)
-  (dbus-register-method
-   bus service path dbus-interface-properties "Set" 'dbus-property-handler
-   dont-register-service)
+   bus service path dbus-interface-properties "Get"
+   'dbus-property-handler nil)
+  (dbus-register-method
+   bus service path dbus-interface-properties "GetAll" 
+   'dbus-property-handler nil)
+  (dbus-register-method
+   bus service path dbus-interface-properties "Set" 
+   'dbus-property-handler nil)
+
+  ;; Register the name SERVICE with BUS.
+  (unless dont-register-service
+    (dbus-register-service bus service))
 
   ;; Send the PropertiesChanged signal.
   (when emits-signal

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2011-01-04 11:11:43 +0000
+++ src/ChangeLog	2011-01-08 05:38:56 +0000
@@ -1,3 +1,34 @@
+2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	Symbols for flags, return values in request-service in dbusbind.c
+	* dbusbind.c (QCdbus_request_name_allow_replacement): new symbol;
+	used by dbus-register-service
+	(QCdbus_request_name_replace_existing): likewise
+	(QCdbus_request_name_do_not_queue): likewise
+	(QCdbus_request_name_reply_primary_owner): likewise
+	(QCdbus_request_name_reply_in_queue): likewise
+	(QCdbus_request_name_reply_exists): likewise
+	(QCdbus_request_name_reply_already_owner): likewise
+	(Fdbus_register_service): changed number of arguments to MANY;
+	rest arguments are used to supply flags; adapted docstring
+	accordingly; translate value returned by DBus to a symbol
+	(Fdbus_register_method): use Fdbus_register_service to do the name
+	registration
+	(syms_of_dbusbind): added symbols :allow-replacement,
+	:replace-existing, :do-not-queue, :primary-owner, :existing,
+	:in-queue and :already-owner
+
+2011-01-05  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	Added function dbus-register-service in dbusbind.c
+	* dbusbind.c (Qdbus_register_service): new variable; holds
+	function dbus-register-service
+	(Fdbus_register_service): new function; register a service known
+	name on a D-Bus
+	(Fdbus_register_method): use Fdbus_register_service to register
+	the service name
+	(syms_of_dbusbind): added symbol `dbus-register-service'
+
 2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
 	* dbusbind.c (Fdbus_register_method): Added optional parameter

=== modified file 'src/dbusbind.c'
--- src/dbusbind.c	2011-01-04 11:11:43 +0000
+++ src/dbusbind.c	2011-01-08 05:38:56 +0000
@@ -38,6 +38,7 @@
 Lisp_Object Qdbus_method_return_internal;
 Lisp_Object Qdbus_method_error_internal;
 Lisp_Object Qdbus_send_signal;
+Lisp_Object Qdbus_register_service;
 Lisp_Object Qdbus_register_signal;
 Lisp_Object Qdbus_register_method;
 
@@ -50,6 +51,17 @@
 /* Lisp symbol for method call timeout.  */
 Lisp_Object QCdbus_timeout;
 
+/* Lisp symbols for name request flags.  */
+Lisp_Object QCdbus_request_name_allow_replacement;
+Lisp_Object QCdbus_request_name_replace_existing;
+Lisp_Object QCdbus_request_name_do_not_queue;
+
+/* Lisp symbols for name request replies.  */
+Lisp_Object QCdbus_request_name_reply_primary_owner;
+Lisp_Object QCdbus_request_name_reply_in_queue;
+Lisp_Object QCdbus_request_name_reply_exists;
+Lisp_Object QCdbus_request_name_reply_already_owner;
+
 /* Lisp symbols of D-Bus types.  */
 Lisp_Object QCdbus_type_byte, QCdbus_type_boolean;
 Lisp_Object QCdbus_type_int16, QCdbus_type_uint16;
@@ -1835,6 +1847,114 @@
   xd_in_read_queued_messages = 0;
 }
 
+DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
+       2, MANY, 0,
+       doc: /* Register known name SERVICE on the D-Bus BUS.
+
+BUS is either a Lisp symbol, `:system' or `:session', or a string
+denoting the bus address.
+
+SERVICE is the D-Bus service name that should be registered.  It must
+be a known name.
+
+FLAGS are keywords, which control how the service name is registered.
+The following keywords are recognized:
+
+`:allow-replacement': Allow another service to become the primary
+owner if requested.
+
+`:replace-existing': Request to replace the current primary owner.
+
+`:do-not-queue': If we can not become the primary owner do not place
+us in the queue.
+
+The function returns a keyword, indicating the result of the
+operation.  The following keyword can be returned:
+
+`:primary-owner': Service has become the primary owner of the
+requested name.
+
+`:in-queue': Service could not become the primary owner and has been
+placed in the queue.
+
+`:exists': Service is already in the queue.
+
+`:already-owner': Service is already the primary owner.
+
+Example:
+
+\(dbus-register-service :session dbus-service-emacs)
+
+  => :primary-owner.
+
+\(dbus-register-service
+:session "org.freedesktop.TextEditor"
+dbus-service-allow-replacement dbus-service-replace-existing)
+
+  => :already-owner.
+
+usage: (dbus-register-service BUS SERVICE &rest FLAGS)  */)
+  (int nargs, register Lisp_Object *args)
+{
+  Lisp_Object bus, service;
+  struct gcpro gcpro1, gcpro2;
+  DBusConnection *connection;
+  unsigned int i;
+  unsigned int value;
+  unsigned int flags = 0;
+  int result;
+  DBusError derror;
+
+  bus = args[0];
+  service = args[1];
+
+  /* Check parameters.  */
+  CHECK_STRING (service);
+
+  /* Process flags.  */
+  for (i = 2; i < nargs; ++i) {
+    value = ((EQ (args[i], QCdbus_request_name_replace_existing)) 
+	     ? DBUS_NAME_FLAG_REPLACE_EXISTING
+	     : (EQ (args[i], QCdbus_request_name_allow_replacement)) 
+	     ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT
+	     : (EQ (args[i], QCdbus_request_name_do_not_queue)) 
+	     ? DBUS_NAME_FLAG_DO_NOT_QUEUE
+	     : -1);
+    if (value == -1)
+      xsignal0 (Qdbus_error); 
+		//	"Unrecognized name request flag");
+    flags |= value;
+  }
+
+  /* Open a connection to the bus.  */
+  connection = xd_initialize (bus, TRUE);
+
+  /* Request the known name from the bus.  We can ignore the result,
+     it is set to -1 if there is an error - kind of redundancy.  */
+  dbus_error_init (&derror);
+  result = dbus_bus_request_name (connection, SDATA (service), flags, 
+				  &derror);
+  if (dbus_error_is_set (&derror))
+    XD_ERROR (derror);
+
+  /* Cleanup.  */
+  dbus_error_free (&derror);
+
+  /* Return object.  */
+  switch (result) {
+  case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER:
+    return QCdbus_request_name_reply_primary_owner;
+  case DBUS_REQUEST_NAME_REPLY_IN_QUEUE:
+    return QCdbus_request_name_reply_in_queue;
+  case DBUS_REQUEST_NAME_REPLY_EXISTS:
+    return QCdbus_request_name_reply_exists;
+  case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER:
+    return QCdbus_request_name_reply_already_owner;
+  default:
+    return Qnil;
+  }
+}
+
 DEFUN ("dbus-register-signal", Fdbus_register_signal, Sdbus_register_signal,
        6, MANY, 0,
        doc: /* Register for signal SIGNAL on the D-Bus BUS.
@@ -2014,6 +2134,7 @@
   DBusConnection *connection;
   int result;
   DBusError derror;
+  Lisp_Object args[2] = { bus, service };
 
   /* Check parameters.  */
   CHECK_STRING (service);
@@ -2028,18 +2149,9 @@
   /* Open a connection to the bus.  */
   connection = xd_initialize (bus, TRUE);
 
-  /* Request the known name from the bus.  We can ignore the result,
-     it is set to -1 if there is an error - kind of redundancy.  */
-  if (NILP (dont_register_service))
-    {
-      dbus_error_init (&derror);
-      result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
-      if (dbus_error_is_set (&derror))
-	XD_ERROR (derror);
-
-      /* Cleanup.  */
-      dbus_error_free (&derror);
-    }
+  /* Request the name.  */
+  if (!(NILP(dont_register_service)))
+    Fdbus_register_service (2, args);
 
   /* Create a hash table entry.  We use nil for the unique name,
      because the method might be called from anybody.  */
@@ -2091,6 +2203,10 @@
   staticpro (&Qdbus_send_signal);
   defsubr (&Sdbus_send_signal);
 
+  Qdbus_register_service = intern_c_string ("dbus-register-service");
+  staticpro (&Qdbus_register_service);
+  defsubr (&Sdbus_register_service);
+
   Qdbus_register_signal = intern_c_string ("dbus-register-signal");
   staticpro (&Qdbus_register_signal);
   defsubr (&Sdbus_register_signal);
@@ -2112,6 +2228,27 @@
   QCdbus_session_bus = intern_c_string (":session");
   staticpro (&QCdbus_session_bus);
 
+  QCdbus_request_name_allow_replacement = intern_c_string (":allow-replacement");
+  staticpro (&QCdbus_request_name_allow_replacement);
+
+  QCdbus_request_name_replace_existing = intern_c_string (":replace-existing");
+  staticpro (&QCdbus_request_name_replace_existing);
+
+  QCdbus_request_name_do_not_queue = intern_c_string (":do-not-queue");
+  staticpro (&QCdbus_request_name_do_not_queue);
+
+  QCdbus_request_name_reply_primary_owner = intern_c_string (":primary-owner");
+  staticpro (&QCdbus_request_name_reply_primary_owner);
+
+  QCdbus_request_name_reply_exists = intern_c_string (":exists");
+  staticpro (&QCdbus_request_name_reply_exists);
+
+  QCdbus_request_name_reply_in_queue = intern_c_string (":in-queue");
+  staticpro (&QCdbus_request_name_reply_in_queue);
+
+  QCdbus_request_name_reply_already_owner = intern_c_string (":already-owner");
+  staticpro (&QCdbus_request_name_reply_already_owner);
+
   QCdbus_timeout = intern_c_string (":timeout");
   staticpro (&QCdbus_timeout);
 

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWUh1f54AEdXfgHgwcf//////
/+7////+YB0n0jfO7687dwao7XM14q61PFC9tNA6BdboA025Xq273vc8eWnbud3s6729dje9t7MA
u64B0r0A2waAyk3Z0cTJbChKERkk8EwRMaJpkp5NT9U9Q9TI2ptQ0GTaQPUPSNBoEkQAjQJGhTJN
PJT0njRANAIDA0IDTATDgaDTIaaNDCBkNDBGhpk0aAZBiAANBJpSIBU3pDE1M01NGmjJ6IGgaMg0
AGgBoAESiAmjQI0myIxNNNJP0JGymhqbT0hNPTSNqaAeoeQSIhBNJgJkAU08jTap6p6TaMptJp6g
AAPUGgxJ5IFwoAMkRBbWQBlEVQHeC+nh2cHp+cvqQO+buF2aRiT8JYUM/o8F4BqdJ7F/6VamTcqG
dFROEr0QVYGDfhx8PT6Z+QjcGoV7IOXPnJHo7ZlMskRG4t4balpXQ5P3HDn+0wMSB7S6MblVZsHw
JJJZb6dSrssdad+nH/MUPdi6INYvFwW3SZ64qIqWU2WJgsyzip0V3NXK6i7c/xcNWCxxUDxgp13z
SsCIZc10x68+d6DpxlINymprVYFz3dPLhByOXMzm2v1nB4/7pFr9mxDjk89jS5Yjg0kZ2AE6oELp
9G+6vT83DcuR8q5ohctNBHN4+J5vMa3IpuPaMCU6za8pVjS0aFra0tFGn1aC3ObsxpjrTmrfy49g
gdlKvr4loIFyh5DFfGrRXrQvoJmESsgdBwlSsAjG5iIedurq6anJ7MoHo3gbc8F8qt0EybxROVv5
O5JQ1ynIRUq9dFe5/Z7z55LmI07/Nht28mnywCWvMhbhHKDbGDEjFkFVQBWKIvVm7X1CQ7mjek4S
ZdgZMwQeEkHoKwVu9M08bokRVz6ad7KXO8GckRJpDE53hOF4ExiUC8byw7kSMCBYd4zHNbg8LwnU
kQTJhqslFpYiPK+K2xK9JlyUfadj7WwXU5HD4SYLPaIwOyPVrUzs5W3NDwaJtSCaXmlXckth5Hl6
si9EjD3ph5y83Q41uinPIF2JrkqaDWZENGbHPZbbbXKttttrTL0E2Og8m4uQOqYfqEJWTt1BQhoP
FjUNfhlk0VKMWafUAi/9JQ2dbe00NrkoX2dY3huQd4k1WgMmh9tnKBFu83iPENyz9qSmM6a8/BmY
XhF8NgjsYIqCciuaNYJRIoaeElZcVJwwSULsD/REX24x8MMO0u9s6To1e/g1NTPq3tZWGbWGGKs0
+QLFV5cJ9H+djw158Wp/owYsotmngC4HLrm11+vSSoTdIIGbKkKZZD8UKf+uCVgqqVMM7uPrN5Eb
PGPI665dqH4O5zRVtRtD6NSFismh6yFpH1asMuiayzS6s3OSuMuIWS1qESb2IInokFlLRSIDDLNK
wpCrQioVAq2BnVkzLj+frHHMCFHJYwMD+ePgnsZiOw8A4qqQ1uVFeNaSCC1Y8Bik5SJ9HXMpOooj
UepDGJPPaXFEM1JN5BWqJ/rhFdHi4HT1KN768H9TzncKQeRB4HUfI3keqW8rZNjIvbecWrvyMXj7
o+qlYps/rHXc09fXB9brM2Vs+lzKakBNKJbltuuvghqFPMysBrEkhhCyFFNnbTs8F4HfwOmQnxCp
r21FfkSqqqqQ8TJ5RqH5IaEMx0p2uPzNxIc+jk+L8t4+/Xeu/vwmjMJnKkHkzJMtXPMtzMyy4cjL
FlFR+EXXUm6IcerRNCQH8+gPweuBPce9vRRw4vQPOoeiqrpWlnOrd/HNgsplIm2Nqy9qPJH6pMOX
hb6LvxNKaa89wH3EsZxEpD0hqA2n0kqRi2B2BqDUlvsCioGg+AEUP6AFfUGCAmHv+ct/wh0xKnSj
634KWjvHENvQcMh+oMFAxHCBhpb8CrkhkXySFVkULv2JcAWQkAoF4vZCL0g+lIrf1C8pmzhtnXWa
0K1cPpxjKFkLYaobu/jmZzdpLkxRgfilEBMROsyQEdMge0PLikcDiMXyNCyv0e3DcFa91qxFs+/e
FtLaW0tttM+maL2OXBxva8/Pzd/RJDrJAyYYMR0NLBmDCrKMC1BOAxuzGewYAgzC7UNXvCwLUBIi
JMtGg1WJeJULofsL7qlJCtvcPROCpS5ILyE2S0X0uhICRjLoxlE8BSsFdFawJa3zXnkBaGLeCNpD
VpMMCXmhQMtChaFlxeay00xXOCZI7PwtLyfz/aoX1JHsNTqBsZJnGsq/inyLQVJEikPYkVSCiDVB
U8NKO+deh5jpBXFYNOhAiyTMZdyrVaUafRd2Ikwc+RwwFgtr0KISQCOv2Ij3a0S84FFDgbcQqCOZ
xB6N55DcaHcGCInQRLnCQDpAbnurgWgu8CqY7cFyFuwtaHbF8+c+cQZpv1A1sJzQ1FpwkBKN47Tk
RnqVQKqKoTHIE/IvOSRc0PWLoXHJQmXZW14YM02fJyXGGIzruX3s/iZOK2+7WiuDJZGXu17FuMqB
cUUJsIFQhpHUowcEeu40mg0m4453kprOMfmKi+ExE0qVZi4M4YBxXYSKrUNHAFfCKI5RSESLHro5
QqiX0k6IVkHikDU3qGSxfmqHiEQEzsNSgQ4yvPQoR4mNK6goGGDI6QMSIZWsO8S5yRPJr+c5e81z
/B9N5wPKobR2oOPgivQqSZgpFHBooxaTIYTKsHDPXnMQTkkxvogxVSGOBlHNytnHMjhSoZiEshGk
rLTgikHA6Rx0XvRorqGjQdoPmjzeb+qB6Hj2LFbugtjanpuNLi3jgxGMNgtEyyPI+sGxj13CBMEE
YjUOAIzhJT0Q95T+oLs/B0VhXRI2nC+CmjlirHDpFSBEvrFsS646w0lbBcYwXPlNih6Bk8zJhpFf
POnOX+JBO2vkB7C32ULudGO72gThcNnbrvpbVr9+isAGQjRAvAhOIrtbrRC0jmqQEBBGKJaFyfFV
2oe4vQQFzDcbZi2iwFqpAcYRF4++LtCTR2icFS8qboudHp8HWCb08bWxGmYemnGdLpD1SNYBHnjj
1SFITC2RMENVjYypaGhnGSQcbd9ZFiA/zgXpi3mdt4bSiUjuTrUmRB3IsG/A+uTQKnbGqQU03Xa2
M7UDNfPOmhSm3PBOxU0noR7cPbRIdkip8gz3YSUeTTzRwqbZDUjEzMLfKVSImGW9ioYlU46PCc2v
sbYmYHcw7xctRsnDBYG0+1CugrnMtpQvtXo59f3JAbDJTM0L2qBAxDZumqnPK446yldlSzJSsg3b
TkDYWMS6CTNrMd6UNNptDaZUyZdYwZ8aiRGMwPVPwj8OedyTdbmuTYa7HMpsevjqLrQJFyJUTmTW
EB8CmVw4uEqBDSYVOJzApGKUqCJc9ZLomEfT17bnEcc8V1KQImTc+ZI7yWz7NyRIIrCTenLNwAzH
W2alDseSgMxz2jfkI1LD7JE6zpc38tep3lPn0eJUmTuh6yNh9ck5PyCbY6PIVUC7GpMvHnrnPecu
5MhwWLFtSmIuS6iCB6VOH60eUrktlS3WtFWATBClgoSL7TKlRrsQLlGsawlq4YxC6jVjYYokNfJS
dZmCmhQdW7j48VwcakXe5Ds5R5ExQ7Cc5J9aGGg5yaUWTpckpW0rySGKFaTMGxoaDe5I9yFoBYPb
74F++2rbdn5iKfDiuTHSIpAQ8Ht2HrxwUNpAjJIBmaJw39SQbUjTZILq7jCgWMDTADo47tRwtK2N
iPEQmBDPBVF9xicMnzBX1tbskQxkFcbMDsMc411hodHOYlaCafSbD+YKyyQ0kUlgo6eDHHkIyG1E
GUCVEC6qw9XX5m3fiSro8qJ2IC9oW7hq4TOoUCTFMfH93QERE9ImVE1WtSrCta8B5DPjdddiOKj2
B1DVMFC80DYg4YWNgytca4jqu+Fl38nJQ1iOdljrGo6x/b2/t3nnGI5s2iT6nRnR2TcUPneDApxf
zPL6McaY1vp+pleTLXpw4HQoRT+MF/KHLWORSJCMjIsfBKCIiJQTaCiiiqJJnMg5ifDCayo+pybm
DvDanyrcGSKFG4Iwn9T/s+aJ+R+Mn8h852+LZukNpAZIsGqZybPABRATyh/YrVnwEI3og2MFg16h
pEab/v+37AZ9Gn/mmu2o/awOBlmGgatS+9ec1hs2FLnfpf8rAozQbktJ/cD69C8V5NQoHaJN3n9o
UY6WeEAiAtamhBVPqiUAXfKX9jsRoWlWqjaZtx1U29HQpwuKEHSbT+rKWylpS2UtlLZS0wGRlhys
/7MtYRr5c1YYaMThjtHrah7f/PcRBjNFVm7keQXJMsiGTbffWayVUL/WWPqGai5domj0ohVGUMhB
Fi+Z5QnGmiLbBIHxeNPg+bHrXJO5UW9NYZXHcgiur2TRCIfl6R+A7jyA+1sGoQbB99FPzFwxaECw
bPolgjGwFP5je3CFb5JJIQqhSIXD/QYA0RT+2ABS0R+0DkvofXBH5fy+zZCsr2f7foMoFCZ+s3P0
SQrntMExz2lI+WhMiQILg0yXzgdj9JeBdfSULzH/IkFTf/uRuctHfU/3+PY8PGM2kSMEPXmlTLhr
MDhA5uBEczaW8OhMejaXFxcZMuhE0iCMiBYH6zohaGvrQzl1B5/IHYJ2j5CxLByAxQfzQVZr9I/1
3Y/kJk0kh96KF4+axd7iRLCA8wWVDrpuCXnHsqEBT/mm0j70w2YGZAQhZBoRRVrRi50YhCWgC7QE
cGdomOzWa9xz8heSHZshynHvGJaYkhg/nGkKHlEJSVoku4EMfGfEWi0Tc1ImvRqTMlyWk9To+RkG
pMoGlGE8x4lDQdiAnpAOtPij7jeYgn9uI6tRDyoB6ZJUFIQRPmIIv3j6lAsH2ncNHKAkyDuDWu8o
ETqrvOvI6zm5+oroSDtOBs35+TYTDbahjePUcbzKTkdxPPO4kLtQDFj7jd1upykOam/hB2cZw5gV
ABQWSRRAYIu1xtHlKRplLmN1TfwNhkcTQdmK8BMWw/cc4xjeoJ06psLfv+8VDzAw6RYHOcY6xmIH
81kjOYg8oG0YEZrMKI15wurAhVo09hE77EgG0EshgN8tolWVnKlCsgEWOzpN3eLGSkmIGJIcxMSr
sXM98N827abppDOJQWAhSPHTuyoFSJX2lRbjxMjMZNAA9kokjA5uWY96BKdhzLq50fBOAYNeEKGv
MfBRuYqHcFRjHMFEp40y8cMJHwLb7ZCHPNBqQ1FE4TkOXq9evb2WOg5jiYHA/Rzh3niCQdxcu6NR
QRiGxHFZujo3UfdrUI2lYl1vORMKDxIhP40QKTtGQHJdSJEOYl/dnS4tu3ox5yXphA4ITu86od9a
UWFv7Jxe4U0vwOgyvsKLguIGqTBphmZlzoJ8fixjfCUsum4qTfWmI62xEYjlBlAy1BNCrVT2GJaR
FLMLtUEqHJcRS4hDGNiYQYRhG0FCI22WMTFHx2Hx+G7su0fTW7Saz5fV7iOh399oFk1SdvZSfwZ/
xlHeMobMEN8645LkD3G5sMSSdFxeWMyQxgd/jxJrw0NtT2IXMhaBFwak2HKUiFCEYlKp13A6BxRs
EaitZmUprMcUEioqYSQ0HoKwjE1B2iJqEVkEbKr2OMrjTt1ly3VqF5ZTeS4g3q10G4KNIB8/NwNn
FHQ+3tvLJAcBdnb27uWKioLech15Zabt+czIBFF4GsOUkjEAOA8g8A3HtE9Cc3Nz6ru7iPP28see
to9PN1Z5X/kN4PN0ICcKHrQE9R3Ccf1ZKc9XRaJ5cq9/ELUUPe83ia4aINBkRj1CHnoG2xB9BFR3
sAG+szo0pGlIZFTY9JZz3WsdRYjUAIFPCo1DSFFDfdQGu6gmvAfbI1LxC1E+MJAhAF2uHaVpUDRi
a+jdcN40MJJFBqMKDW2fv0axp4GA/6EAwHgQDQqRV+wwTiDA3AdXNGB4lChQifxKABYMwtgtiW5f
KhtP9/HuKnoPDx8RHpu9BNS8r7AlqUPdWBWRU7XNCny6xNRz0SHsWqXK6JAbch1DxjnOdoDcQo8v
SniI60GOYKpC6Wh5cTkzXcaBAq5AgZSDJdIC5dAIjpix3SDbNT8Ufej7FegCP3Re6IHEe35yrssG
D9dQLhTSnGilBOLtK2tq0QgjZREG8VDpU7yKFSz3obw0EpcjaGDcSQJCCbDm74Rkg2Ic4U8hQieZ
TF+pKg7Aw7QIeuCxiEgJz3Zh8bALcA51PeH6HNTUperqvsqV+R1ipT6an4QM0BLl5Dwv/B81s09S
V2+z9IqFhCEXi3+5NQ4Abx7gAg+KAmixvpQczvhqUOAUtR0B6AhPQqHToQNwZgXNiYiOsNIvVpAG
IVLYFzAv2kLMpE0UU2Gg8yOJyh3w5wglc08B2DrHSmuASBIQZBhFCMdxgjp6A2A7VX/N6AaF1e0B
A0JgwOb4Y+AYHODK8CuQrAWOSmnYjgU8KI6lNoHyPpSBwAhRhQIUUoJYlIlGgliXqE5JJrocp3Ts
jOgEPqqPlVzGaAqDzJyEYvXGTeXI854kTXwCgUkaFXFsqFlaJAsM6gPOYKtw1Ab7yS9B51PMheF2
KfQ0QE8FMcUeER0BpUJWqPle6raICQ0u/u57JNyPEhsL8MpX5TnGUimxhuGWiZq0RsGhYhBqBv0h
WlNxAG5vgV+hQ/cFlQ/OGpA9iN+k+4E1KlQgAGAO0tC8KWHUNRp7LPKj538bG4b06H0+odQ59wbU
UMxwUJjLX9VTI4nMm9yPQ9qiDGiIL4FCkRuFCklOFYYOqorJGiud8GZjO0jEzHSwMA0NEJApNMBk
aooWgUG0cNDzEA906IC1ESlDQOhCDoZhIIlSUfcdw6QyZpG01IvQZdEkSFDQqFqhEFNwUDSgJ0je
H8C40kRtXIbThbQKXhuHHb86OtQPvMh26WjeF5qZCK2QWSisIQQ/epKVoK55l1qpLV47sQGAN940
mBB1Hy60gNIHFIsLIZd6qFgPE8Ro23AcGfnTxEuNoe0D2qYRx3NBq3BugnMBkkQgxNUEDrH22pV2
FKOGB30EMiaAlEo2VUgjvK3lDL1+vu/nUPkJEUMkfbkob8VdJOuarJ6Ch5pBbC6KdRyKm+VSowpJ
KB1J25FDWPYjRG87xiMQY4WqHBD7sFDAPit+wHVFKhhCb6sIgzszbx1JrHeprajLCJ7byiGjcoGS
pNZkRkTTLMTenYpYiosVGCJF1IWMFgsEUGSB3gfZOSQpPE5sjGIQRuvH0FwFvmS5aXFITpR0mctW
cmBV3gFREBHfIGAwzvPqocL0NwSFwak1SWII4O+0CJEJDq30X6NjZoTbBgaxvGihmmxlmlWmW7kg
QSpLgEeQlQINin+tpvb7BDcjiX4fREfWRDKIaFioi0iYhgmkDsbO2q3kUuYb80Yq6+yxVeykKvnU
GlgKvYoxWjxiggiQ5ZliBJ3KjORTMcDuCgKaJplplRv00ULlPmCthc2rBg9jBVrneNfrgBUMRg0g
zWEa0KBNnDrJyTjLbYShFsbBl6whgbix9PIMYxJfcNllC2MkjGCVR+xSz3bmhlrc1WN6OZsQ4QZC
QkCQmAXl14J8wY4P2KQHX0UwpRoxRbQIeAYCibBGByt1gUpUDruFJbZCQblIYi0B7C7B48nUa7qA
Nvg0yCZG4i68i1otmi6/EqYuuMkLBobgYsEOpfQLB03FsBV3koV4JGAokQpFYYE1L7gsPEPQX2S8
gA9IwRokIBMPaBuEchywCoB3RQ9UQzthGmCtC4bKUQ6UOcHLPKhHczpBWVWLF65sJkqAcPtG3UQm
ZArIZhgKyCOwjTLVTEFNtgTIm4AtLEKp3KBbQ+k7sO2/foJCEEIS+h/6KhgpufOOKb5kaTvC0elC
IZ7uKoHSEHaTr+dDMNm6coBx9zyKCs5mUQSMAisUgsiCAQEsAuF1tbTYFBQbetL1keOm9LcjcoG1
QgZiG5UTkdSruR/T5w12DJE4XKUHSsbAbKtVE2qBeB4B9aF4cVA/gHBPACgXqHl1GnAV/R/9QQPU
c01pCg36oWVSwsliUakjIPNB6FPSXAltkkjbbcC2gH7RnBrmBhkGbWHghdfOgNYPSF42G/thUdY+
rfRbLYcrs2JxaUhtb7v7i7kinChIJDq/zwA=

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-08  5:48           ` Jan Moringen
@ 2011-01-09  9:42             ` Michael Albinus
  2011-01-09 16:08               ` Jan Moringen
  0 siblings, 1 reply; 13+ messages in thread
From: Michael Albinus @ 2011-01-09  9:42 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel

Jan Moringen <jan.moringen@uni-bielefeld.de> writes:

> Hi,

Hi Jan,

>> Maybe we shall rearrange the whole node a little bit. In the
>> introductionary paragraph, service names could be described more
>> detailed, especially their registration policies. Afterwards,
>> dbus-register-service shall follow.
>
> Done.
>
>> The explanation of dont-register-service in dbus-register-method and
>> dbus-register-property could be shortened, referring to the explanation
>> in dbus-register-service.
>
> I don't see which parts of the these discussions could be shortened.

FTTB, let the changes as you have proposed. This we could tune later.

> I'm not sure about the integer constant and how they would be declared.
> I used keywords instead.

That's OK.

> --- doc/misc/ChangeLog	2011-01-04 12:38:33 +0000
> +++ doc/misc/ChangeLog	2011-01-08 05:37:49 +0000
> +2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
> +
> +	* dbus.texi (Receiving Method Calls): rearranged node to mention
> +	dbus-register-service and dbus-unregister-service first
> +
>  2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>

There are some conventions for ChangeLog entries: Start with capital
letter, speak in active words ("Rearrange" instead of "Rearranged"),
end with a period, etc.

Do you intend to use different email addresses?

> --- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
> +++ doc/misc/dbus.texi	2011-01-08 05:37:49 +0000
> +@defun dbus-register-service bus service &rest flags
> +Register the known name @var{service} on D-Bus @var{bus}.
> +
> +@var{bus} is either the symbol @code{:system} or the symbol
> +@code{:session}.
> +
> +@var{service} is the service name to be registered on the D-Bus.  It
> +must be a known name.
> +@end defun

A description of FLAGS is missing, also return values.

> +@defun dbus-unregister-service bus service
> +Unregister all objects from D-Bus @var{bus}, registered by Emacs for
> +@var{service}.
> +
> +@var{bus} is either the symbol @code{:system} or the symbol
> +@code{:session}.
> +
> +@var{service} is the D-Bus service name of the D-Bus.  It must be a
> +known name.  Emacs releases its association to @var{service} from
> +D-Bus.
> +@end defun

Ditto for the return values.

> --- lisp/ChangeLog	2011-01-04 19:50:21 +0000
> +++ lisp/ChangeLog	2011-01-08 05:44:07 +0000
> +2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
> +
> +	* net/dbus.el (dbus-unregister-service): translate returned
> +	integer into a symbol
> +
> +	* net/dbus.el (dbus-register-property): use
> +	`dbus-register-service' to do the name registration
> +

It will be just one commit, so you can merge the entries.

> --- lisp/net/dbus.el	2011-01-04 10:57:24 +0000
> +++ lisp/net/dbus.el	2011-01-08 05:44:07 +0000
> @@ -193,9 +193,14 @@
>  	       (puthash key (delete elt value) dbus-registered-objects-table)
>  	     (remhash key dbus-registered-objects-table))))))
>     dbus-registered-objects-table)
> -  (dbus-call-method
> -   bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
> -   "ReleaseName" service))
> +  (let ((reply (dbus-call-method
> +		bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
> +		"ReleaseName" service)))
> +    (case reply
> +      (1 :released)
> +      (2 :non-existent)
> +      (3 :not-owner)
> +      (t reply))))

In case reply is not 1, 2 or 3, there is a problem. We shall raise a
dbus-error then.

> @@ -917,14 +922,18 @@
>    ;; Add the handler.  We use `dbus-service-emacs' as service name, in
>    ;; order to let unregister SERVICE despite of this default handler.
>    (dbus-register-method
> +   bus service path dbus-interface-properties "Get"
> +   'dbus-property-handler nil)
> +  (dbus-register-method
> +   bus service path dbus-interface-properties "GetAll" 
> +   'dbus-property-handler nil)
> +  (dbus-register-method
> +   bus service path dbus-interface-properties "Set" 
> +   'dbus-property-handler nil)
> +
> +  ;; Register the name SERVICE with BUS.
> +  (unless dont-register-service
> +    (dbus-register-service bus service))
 
I guess you mean t (or better 'dont-register) as last argument of the
dbus-register-method calls.

Btw, the comment can be shortened.  "We use `dbus-service-emacs' ..." is
not true anymore.

> --- src/dbusbind.c	2011-01-04 11:11:43 +0000
> +++ src/dbusbind.c	2011-01-08 05:38:56 +0000
@@ -1835,6 +1847,114 @@
> +The function returns a keyword, indicating the result of the
> +operation.  The following keyword can be returned:

"One of the following keywords is returned:"

> +    if (value == -1)
> +      xsignal0 (Qdbus_error); 
> +		//	"Unrecognized name request flag");

XD_SIGNAL2 (build_string ("Unrecognized name request flag"), args[i]);

> +  /* Request the known name from the bus.  We can ignore the result,
> +     it is set to -1 if there is an error - kind of redundancy.  */
> +  dbus_error_init (&derror);
> +  result = dbus_bus_request_name (connection, SDATA (service), flags, 
> +				  &derror);
> +  if (dbus_error_is_set (&derror))
> +    XD_ERROR (derror);

The second sentence of the comment is not true anymore.

> @@ -2028,18 +2149,9 @@
>    /* Open a connection to the bus.  */
>    connection = xd_initialize (bus, TRUE);
>  
> +  /* Request the name.  */
> +  if (!(NILP(dont_register_service)))
> +    Fdbus_register_service (2, args);

It must be

if (NILP (dont_register_service))

> Kind regards,
> Jan

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-09  9:42             ` Michael Albinus
@ 2011-01-09 16:08               ` Jan Moringen
  2011-01-10 11:40                 ` Michael Albinus
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Moringen @ 2011-01-09 16:08 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 5424 bytes --]

Hi Michael,

sorry for the sloppy patch. I couldn't put as much time into it as I
would have liked.

> > --- doc/misc/ChangeLog	2011-01-04 12:38:33 +0000
> > +++ doc/misc/ChangeLog	2011-01-08 05:37:49 +0000
> > +2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
> > +
> > +	* dbus.texi (Receiving Method Calls): rearranged node to mention
> > +	dbus-register-service and dbus-unregister-service first
> > +
> >  2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
> 
> There are some conventions for ChangeLog entries: Start with capital
> letter, speak in active words ("Rearrange" instead of "Rearranged"),
> end with a period, etc.

I changed the entry.

> Do you intend to use different email addresses?

No, that wasn't intentional.

> > --- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
> > +++ doc/misc/dbus.texi	2011-01-08 05:37:49 +0000
> > +@defun dbus-register-service bus service &rest flags
> > +Register the known name @var{service} on D-Bus @var{bus}.
> > +
> > +@var{bus} is either the symbol @code{:system} or the symbol
> > +@code{:session}.
> > +
> > +@var{service} is the service name to be registered on the D-Bus.  It
> > +must be a known name.
> > +@end defun
> 
> A description of FLAGS is missing, also return values.

Done.

> > +@defun dbus-unregister-service bus service
> > +Unregister all objects from D-Bus @var{bus}, registered by Emacs for
> > +@var{service}.
> > +
> > +@var{bus} is either the symbol @code{:system} or the symbol
> > +@code{:session}.
> > +
> > +@var{service} is the D-Bus service name of the D-Bus.  It must be a
> > +known name.  Emacs releases its association to @var{service} from
> > +D-Bus.
> > +@end defun
> 
> Ditto for the return values.

Done.

> > --- lisp/ChangeLog	2011-01-04 19:50:21 +0000
> > +++ lisp/ChangeLog	2011-01-08 05:44:07 +0000
> > +2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
> > +
> > +	* net/dbus.el (dbus-unregister-service): translate returned
> > +	integer into a symbol
> > +
> > +	* net/dbus.el (dbus-register-property): use
> > +	`dbus-register-service' to do the name registration
> > +
> 
> It will be just one commit, so you can merge the entries.

Done.

> > --- lisp/net/dbus.el	2011-01-04 10:57:24 +0000
> > +++ lisp/net/dbus.el	2011-01-08 05:44:07 +0000
> > @@ -193,9 +193,14 @@
> >  	       (puthash key (delete elt value) dbus-registered-objects-table)
> >  	     (remhash key dbus-registered-objects-table))))))
> >     dbus-registered-objects-table)
> > -  (dbus-call-method
> > -   bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
> > -   "ReleaseName" service))
> > +  (let ((reply (dbus-call-method
> > +		bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
> > +		"ReleaseName" service)))
> > +    (case reply
> > +      (1 :released)
> > +      (2 :non-existent)
> > +      (3 :not-owner)
> > +      (t reply))))
> 
> In case reply is not 1, 2 or 3, there is a problem. We shall raise a
> dbus-error then.

Done.

> > @@ -917,14 +922,18 @@
> >    ;; Add the handler.  We use `dbus-service-emacs' as service name, in
> >    ;; order to let unregister SERVICE despite of this default handler.
> >    (dbus-register-method
> > +   bus service path dbus-interface-properties "Get"
> > +   'dbus-property-handler nil)
> > +  (dbus-register-method
> > +   bus service path dbus-interface-properties "GetAll" 
> > +   'dbus-property-handler nil)
> > +  (dbus-register-method
> > +   bus service path dbus-interface-properties "Set" 
> > +   'dbus-property-handler nil)
> > +
> > +  ;; Register the name SERVICE with BUS.
> > +  (unless dont-register-service
> > +    (dbus-register-service bus service))
>  
> I guess you mean t (or better 'dont-register) as last argument of the
> dbus-register-method calls.

I think it has to be t. The service is registered or not in the
following call to `dbus-register-service' depending on
`dont-register-service'.

> Btw, the comment can be shortened. "We use `dbus-service-emacs' ..."
> is not true anymore.

I updated the comment to read:

"Add handlers for the three property-related methods."

> > --- src/dbusbind.c	2011-01-04 11:11:43 +0000
> > +++ src/dbusbind.c	2011-01-08 05:38:56 +0000
> @@ -1835,6 +1847,114 @@
> > +The function returns a keyword, indicating the result of the
> > +operation.  The following keyword can be returned:
> 
> "One of the following keywords is returned:"

Done.

> > +    if (value == -1)
> > +      xsignal0 (Qdbus_error); 
> > +		//	"Unrecognized name request flag");
> 
> XD_SIGNAL2 (build_string ("Unrecognized name request flag"), args[i]);

I was wondering how to do that. Thanks.

> > +  /* Request the known name from the bus.  We can ignore the result,
> > +     it is set to -1 if there is an error - kind of redundancy.  */
> > +  dbus_error_init (&derror);
> > +  result = dbus_bus_request_name (connection, SDATA (service), flags, 
> > +				  &derror);
> > +  if (dbus_error_is_set (&derror))
> > +    XD_ERROR (derror);
> 
> The second sentence of the comment is not true anymore.

I removed it.

> > @@ -2028,18 +2149,9 @@
> >    /* Open a connection to the bus.  */
> >    connection = xd_initialize (bus, TRUE);
> >  
> > +  /* Request the name.  */
> > +  if (!(NILP(dont_register_service)))
> > +    Fdbus_register_service (2, args);
> 
> It must be
> 
> if (NILP (dont_register_service))

Oops.

I hope this increases the quality of the patch to bearable levels.

Kind regards,
Jan

[-- Attachment #2: dbus-un-register-service.patch --]
[-- Type: text/x-patch, Size: 27721 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jan.moringen@uni-bielefeld.de-20110109160320-\
#   c5t6kwjae2hznq8p
# target_branch: bzr://bzr.savannah.gnu.org/emacs/trunk/
# testament_sha1: 4cd4c68f62bb48cee2f221b129164f70bcd611f9
# timestamp: 2011-01-09 17:06:19 +0100
# base_revision_id: ken.manheimer@gmail.com-20110104195021-\
#   1x68s956czngphh2
# 
# Begin patch
=== modified file 'doc/misc/ChangeLog'
--- doc/misc/ChangeLog	2011-01-04 12:38:33 +0000
+++ doc/misc/ChangeLog	2011-01-09 15:56:26 +0000
@@ -1,3 +1,8 @@
+2011-01-08  Jan Moringen  <jan.moringen@uni-bielefeld.de>
+
+	* dbus.texi (Receiving Method Calls): Rearrange node to mention
+	dbus-register-service and dbus-unregister-service first.
+
 2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
 	* dbus.texi (Receiving Method Calls): Describe new optional

=== modified file 'doc/misc/dbus.texi'
--- doc/misc/dbus.texi	2011-01-04 12:38:33 +0000
+++ doc/misc/dbus.texi	2011-01-09 15:34:23 +0000
@@ -1244,9 +1244,69 @@
 @cindex method calls, returning
 @cindex returning method calls
 
-Emacs can also offer own methods, which can be called by other
-applications.  These methods could be an implementation of an
-interface of a well known service, like @samp{org.freedesktop.TextEditor}.
+In order to register methods on the D-Bus, Emacs has to request a well
+known name on the D-Bus under which it will be available for other
+clients.  Names on the D-Bus can be registered and unregistered using
+the following functions:
+
+@defun dbus-register-service bus service &rest flags
+Register the known name @var{service} on D-Bus @var{bus}.
+
+@var{bus} is either the symbol @code{:system} or the symbol
+@code{:session}.
+
+@var{service} is the service name to be registered on the D-Bus.  It
+must be a known name.
+
+@var{flags} is a subset of the following keywords:
+@itemize
+@item @code{:allow-replacement}: Allow another service to become the primary
+owner if requested.
+
+@item @code{:replace-existing}: Request to replace the current primary owner.
+
+@item @code{:do-not-queue}: If we can not become the primary owner do not
+place us in the queue.
+@end itemize
+
+One of the following keywords is returned:
+@itemize
+@item @code{:primary-owner}: We have become the primary owner of the name
+@var{service}.
+
+@item @code{:in-queue}: We could not become the primary owner and
+have been placed in the queue.
+
+@item @code{:exists}: We already are in the queue.
+
+@item @code{:already-owner}: We already are the primary
+owner.
+@end itemize
+@end defun
+
+@defun dbus-unregister-service bus service
+Unregister all objects from D-Bus @var{bus}, registered by Emacs for
+@var{service}.
+
+@var{bus} is either the symbol @code{:system} or the symbol
+@code{:session}.
+
+@var{service} is the D-Bus service name of the D-Bus.  It must be a
+known name.  Emacs releases its association to @var{service} from
+D-Bus.
+
+One of the following keywords is returned:
+@itemize
+@item @code{:released}: We successfully released the name @var{service}.
+@item @code{:non-existent}: The name @var{service} does not exist on the bus.
+@item @code{:not-owner}: We are not an owner of the name @var{service}.
+@end itemize
+@end defun
+
+When a name has been chosen, Emacs can offer own methods, which can be
+called by other applications.  These methods could be an
+implementation of an interface of a well known service, like
+@samp{org.freedesktop.TextEditor}.
 
 It could be also an implementation of an own interface.  In this case,
 the service name must be @samp{org.gnu.Emacs}.  The object path shall
@@ -1491,18 +1551,6 @@
 to the service from D-Bus.
 @end defun
 
-@defun dbus-unregister-service bus service
-Unregister all objects from D-Bus @var{bus}, registered by Emacs for
-@var{service}.
-
-@var{bus} is either the symbol @code{:system} or the symbol
-@code{:session}.
-
-@var{service} is the D-Bus service name of the D-Bus.  It must be a
-known name.  Emacs releases its association to @var{service} from
-D-Bus.
-@end defun
-
 
 @node Signals
 @chapter Sending and receiving signals.

=== modified file 'etc/NEWS'
--- etc/NEWS	2011-01-04 16:57:45 +0000
+++ etc/NEWS	2011-01-08 05:43:02 +0000
@@ -557,8 +557,13 @@
 *** It is possible now, to access alternative buses than the default
 system or session bus.
 
-*** dbus-register-{method,property} do not necessarily register names anymore.
+*** dbus-register-{service,method,property} 
+    The -method and -property functions do not automatically register
+    names anymore.
 
+    The new function dbus-register-service registers a service known
+    name on a D-Bus without simultaneously registering a property or a
+    method
 ** Tramp
 
 *** There exists a new inline access method "ksu" (kerberized su).

=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2011-01-04 19:50:21 +0000
+++ lisp/ChangeLog	2011-01-09 15:34:49 +0000
@@ -1,3 +1,10 @@
+2011-01-08  Jan Moringen  <jan.moringen@uni-bielefeld.de>
+
+	* net/dbus.el (dbus-unregister-service): translate returned
+	integer into a symbol
+	(dbus-register-property): use `dbus-register-service' to do the
+	name registration
+
 2011-01-04  Ken Manheimer  <ken.manheimer@gmail.com>
 
 	* Summary: Reconcile with changes in line movement behavior for

=== modified file 'lisp/net/dbus.el'
--- lisp/net/dbus.el	2011-01-04 10:57:24 +0000
+++ lisp/net/dbus.el	2011-01-09 16:03:20 +0000
@@ -193,9 +193,14 @@
 	       (puthash key (delete elt value) dbus-registered-objects-table)
 	     (remhash key dbus-registered-objects-table))))))
    dbus-registered-objects-table)
-  (dbus-call-method
-   bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
-   "ReleaseName" service))
+  (let ((reply (dbus-call-method
+		bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
+		"ReleaseName" service)))
+    (case reply
+      (1 :released)
+      (2 :non-existent)
+      (3 :not-owner)
+      (t (signal 'dbus-error "Could not unregister service")))))
 
 (defun dbus-call-method-non-blocking-handler (&rest args)
   "Handler for reply messages of asynchronous D-Bus message calls.
@@ -914,17 +919,20 @@
      bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
      "RequestName" service 0))
 
-  ;; Add the handler.  We use `dbus-service-emacs' as service name, in
-  ;; order to let unregister SERVICE despite of this default handler.
-  (dbus-register-method
-   bus service path dbus-interface-properties "Get" 'dbus-property-handler
-   dont-register-service)
-  (dbus-register-method
-   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler
-   dont-register-service)
-  (dbus-register-method
-   bus service path dbus-interface-properties "Set" 'dbus-property-handler
-   dont-register-service)
+  ;; Add handlers for the three property-related methods.
+  (dbus-register-method
+   bus service path dbus-interface-properties "Get"
+   'dbus-property-handler t)
+  (dbus-register-method
+   bus service path dbus-interface-properties "GetAll" 
+   'dbus-property-handler t)
+  (dbus-register-method
+   bus service path dbus-interface-properties "Set" 
+   'dbus-property-handler t)
+
+  ;; Register the name SERVICE with BUS.
+  (unless dont-register-service
+    (dbus-register-service bus service))
 
   ;; Send the PropertiesChanged signal.
   (when emits-signal

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2011-01-04 11:11:43 +0000
+++ src/ChangeLog	2011-01-08 05:38:56 +0000
@@ -1,3 +1,34 @@
+2011-01-08  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	Symbols for flags, return values in request-service in dbusbind.c
+	* dbusbind.c (QCdbus_request_name_allow_replacement): new symbol;
+	used by dbus-register-service
+	(QCdbus_request_name_replace_existing): likewise
+	(QCdbus_request_name_do_not_queue): likewise
+	(QCdbus_request_name_reply_primary_owner): likewise
+	(QCdbus_request_name_reply_in_queue): likewise
+	(QCdbus_request_name_reply_exists): likewise
+	(QCdbus_request_name_reply_already_owner): likewise
+	(Fdbus_register_service): changed number of arguments to MANY;
+	rest arguments are used to supply flags; adapted docstring
+	accordingly; translate value returned by DBus to a symbol
+	(Fdbus_register_method): use Fdbus_register_service to do the name
+	registration
+	(syms_of_dbusbind): added symbols :allow-replacement,
+	:replace-existing, :do-not-queue, :primary-owner, :existing,
+	:in-queue and :already-owner
+
+2011-01-05  Jan Moringen  <jmoringe@techfak.uni-bielefeld.de>
+
+	Added function dbus-register-service in dbusbind.c
+	* dbusbind.c (Qdbus_register_service): new variable; holds
+	function dbus-register-service
+	(Fdbus_register_service): new function; register a service known
+	name on a D-Bus
+	(Fdbus_register_method): use Fdbus_register_service to register
+	the service name
+	(syms_of_dbusbind): added symbol `dbus-register-service'
+
 2011-01-04  Jan Moringen  <jan.moringen@uni-bielefeld.de>
 
 	* dbusbind.c (Fdbus_register_method): Added optional parameter

=== modified file 'src/dbusbind.c'
--- src/dbusbind.c	2011-01-04 11:11:43 +0000
+++ src/dbusbind.c	2011-01-09 15:53:12 +0000
@@ -38,6 +38,7 @@
 Lisp_Object Qdbus_method_return_internal;
 Lisp_Object Qdbus_method_error_internal;
 Lisp_Object Qdbus_send_signal;
+Lisp_Object Qdbus_register_service;
 Lisp_Object Qdbus_register_signal;
 Lisp_Object Qdbus_register_method;
 
@@ -50,6 +51,17 @@
 /* Lisp symbol for method call timeout.  */
 Lisp_Object QCdbus_timeout;
 
+/* Lisp symbols for name request flags.  */
+Lisp_Object QCdbus_request_name_allow_replacement;
+Lisp_Object QCdbus_request_name_replace_existing;
+Lisp_Object QCdbus_request_name_do_not_queue;
+
+/* Lisp symbols for name request replies.  */
+Lisp_Object QCdbus_request_name_reply_primary_owner;
+Lisp_Object QCdbus_request_name_reply_in_queue;
+Lisp_Object QCdbus_request_name_reply_exists;
+Lisp_Object QCdbus_request_name_reply_already_owner;
+
 /* Lisp symbols of D-Bus types.  */
 Lisp_Object QCdbus_type_byte, QCdbus_type_boolean;
 Lisp_Object QCdbus_type_int16, QCdbus_type_uint16;
@@ -1835,6 +1847,112 @@
   xd_in_read_queued_messages = 0;
 }
 
+DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service,
+       2, MANY, 0,
+       doc: /* Register known name SERVICE on the D-Bus BUS.
+
+BUS is either a Lisp symbol, `:system' or `:session', or a string
+denoting the bus address.
+
+SERVICE is the D-Bus service name that should be registered.  It must
+be a known name.
+
+FLAGS are keywords, which control how the service name is registered.
+The following keywords are recognized:
+
+`:allow-replacement': Allow another service to become the primary
+owner if requested.
+
+`:replace-existing': Request to replace the current primary owner.
+
+`:do-not-queue': If we can not become the primary owner do not place
+us in the queue.
+
+The function returns a keyword, indicating the result of the
+operation.  One of the following keywords is returned:
+
+`:primary-owner': Service has become the primary owner of the
+requested name.
+
+`:in-queue': Service could not become the primary owner and has been
+placed in the queue.
+
+`:exists': Service is already in the queue.
+
+`:already-owner': Service is already the primary owner.
+
+Example:
+
+\(dbus-register-service :session dbus-service-emacs)
+
+  => :primary-owner.
+
+\(dbus-register-service
+:session "org.freedesktop.TextEditor"
+dbus-service-allow-replacement dbus-service-replace-existing)
+
+  => :already-owner.
+
+usage: (dbus-register-service BUS SERVICE &rest FLAGS)  */)
+  (int nargs, register Lisp_Object *args)
+{
+  Lisp_Object bus, service;
+  struct gcpro gcpro1, gcpro2;
+  DBusConnection *connection;
+  unsigned int i;
+  unsigned int value;
+  unsigned int flags = 0;
+  int result;
+  DBusError derror;
+
+  bus = args[0];
+  service = args[1];
+
+  /* Check parameters.  */
+  CHECK_STRING (service);
+
+  /* Process flags.  */
+  for (i = 2; i < nargs; ++i) {
+    value = ((EQ (args[i], QCdbus_request_name_replace_existing)) 
+	     ? DBUS_NAME_FLAG_REPLACE_EXISTING
+	     : (EQ (args[i], QCdbus_request_name_allow_replacement)) 
+	     ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT
+	     : (EQ (args[i], QCdbus_request_name_do_not_queue)) 
+	     ? DBUS_NAME_FLAG_DO_NOT_QUEUE
+	     : -1);
+    if (value == -1)
+      XD_SIGNAL2 (build_string ("Unrecognized name request flag"), args[i]);
+    flags |= value;
+  }
+
+  /* Open a connection to the bus.  */
+  connection = xd_initialize (bus, TRUE);
+
+  /* Request the known name from the bus.  */
+  dbus_error_init (&derror);
+  result = dbus_bus_request_name (connection, SDATA (service), flags, 
+				  &derror);
+  if (dbus_error_is_set (&derror))
+    XD_ERROR (derror);
+
+  /* Cleanup.  */
+  dbus_error_free (&derror);
+
+  /* Return object.  */
+  switch (result) {
+  case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER:
+    return QCdbus_request_name_reply_primary_owner;
+  case DBUS_REQUEST_NAME_REPLY_IN_QUEUE:
+    return QCdbus_request_name_reply_in_queue;
+  case DBUS_REQUEST_NAME_REPLY_EXISTS:
+    return QCdbus_request_name_reply_exists;
+  case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER:
+    return QCdbus_request_name_reply_already_owner;
+  default:
+    return Qnil;
+  }
+}
+
 DEFUN ("dbus-register-signal", Fdbus_register_signal, Sdbus_register_signal,
        6, MANY, 0,
        doc: /* Register for signal SIGNAL on the D-Bus BUS.
@@ -2014,6 +2132,7 @@
   DBusConnection *connection;
   int result;
   DBusError derror;
+  Lisp_Object args[2] = { bus, service };
 
   /* Check parameters.  */
   CHECK_STRING (service);
@@ -2028,18 +2147,9 @@
   /* Open a connection to the bus.  */
   connection = xd_initialize (bus, TRUE);
 
-  /* Request the known name from the bus.  We can ignore the result,
-     it is set to -1 if there is an error - kind of redundancy.  */
-  if (NILP (dont_register_service))
-    {
-      dbus_error_init (&derror);
-      result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
-      if (dbus_error_is_set (&derror))
-	XD_ERROR (derror);
-
-      /* Cleanup.  */
-      dbus_error_free (&derror);
-    }
+  /* Request the name.  */
+  if (NILP(dont_register_service))
+    Fdbus_register_service (2, args);
 
   /* Create a hash table entry.  We use nil for the unique name,
      because the method might be called from anybody.  */
@@ -2091,6 +2201,10 @@
   staticpro (&Qdbus_send_signal);
   defsubr (&Sdbus_send_signal);
 
+  Qdbus_register_service = intern_c_string ("dbus-register-service");
+  staticpro (&Qdbus_register_service);
+  defsubr (&Sdbus_register_service);
+
   Qdbus_register_signal = intern_c_string ("dbus-register-signal");
   staticpro (&Qdbus_register_signal);
   defsubr (&Sdbus_register_signal);
@@ -2112,6 +2226,27 @@
   QCdbus_session_bus = intern_c_string (":session");
   staticpro (&QCdbus_session_bus);
 
+  QCdbus_request_name_allow_replacement = intern_c_string (":allow-replacement");
+  staticpro (&QCdbus_request_name_allow_replacement);
+
+  QCdbus_request_name_replace_existing = intern_c_string (":replace-existing");
+  staticpro (&QCdbus_request_name_replace_existing);
+
+  QCdbus_request_name_do_not_queue = intern_c_string (":do-not-queue");
+  staticpro (&QCdbus_request_name_do_not_queue);
+
+  QCdbus_request_name_reply_primary_owner = intern_c_string (":primary-owner");
+  staticpro (&QCdbus_request_name_reply_primary_owner);
+
+  QCdbus_request_name_reply_exists = intern_c_string (":exists");
+  staticpro (&QCdbus_request_name_reply_exists);
+
+  QCdbus_request_name_reply_in_queue = intern_c_string (":in-queue");
+  staticpro (&QCdbus_request_name_reply_in_queue);
+
+  QCdbus_request_name_reply_already_owner = intern_c_string (":already-owner");
+  staticpro (&QCdbus_request_name_reply_already_owner);
+
   QCdbus_timeout = intern_c_string (":timeout");
   staticpro (&QCdbus_timeout);
 

# Begin bundle
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
52I=

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: DBus methods without name grabbing
  2011-01-09 16:08               ` Jan Moringen
@ 2011-01-10 11:40                 ` Michael Albinus
  0 siblings, 0 replies; 13+ messages in thread
From: Michael Albinus @ 2011-01-10 11:40 UTC (permalink / raw)
  To: Jan Moringen; +Cc: emacs-devel

Jan Moringen <jan.moringen@uni-bielefeld.de> writes:

> Hi Michael,

Hi Jan,

> sorry for the sloppy patch. I couldn't put as much time into it as I
> would have liked.

Don't worry. By this, I had something to comment :-)

>> > +  (dbus-register-method
>> > +   bus service path dbus-interface-properties "Set"
>> > +   'dbus-property-handler nil)
>> > +
>> > +  ;; Register the name SERVICE with BUS.
>> > +  (unless dont-register-service
>> > +    (dbus-register-service bus service))
>>
>> I guess you mean t (or better 'dont-register) as last argument of the
>> dbus-register-method calls.
>
> I think it has to be t. The service is registered or not in the
> following call to `dbus-register-service' depending on
> `dont-register-service'.

I did not mean the value of `dont-register-service', but a symbol
`dont-register'. For better readability, one could use a symbol
describing what is meant with a non-nil value.

> I hope this increases the quality of the patch to bearable levels.

I have committed your patchset. Afterwards, I have applied some further
minor tweakings.

> Kind regards,
> Jan

Best regards, Michael.



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2011-01-10 11:40 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-02 21:06 DBus methods without name grabbing Jan Moringen
2011-01-03 12:55 ` Michael Albinus
2011-01-04  2:42   ` Jan Moringen
2011-01-04 10:10     ` Michael Albinus
2011-01-04 10:29       ` Jan Moringen
2011-01-04 13:09         ` Michael Albinus
2011-01-05  4:17       ` Jan Moringen
2011-01-05 11:45         ` Michael Albinus
2011-01-08  5:48           ` Jan Moringen
2011-01-09  9:42             ` Michael Albinus
2011-01-09 16:08               ` Jan Moringen
2011-01-10 11:40                 ` Michael Albinus
     [not found]       ` <1294201048.2508.1.camel@gunhead>
2011-01-05 10:46         ` Jan Moringen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).