[compiz] [PATCH] dbus terminate action
Mike Dransfield
mike at blueroot.co.uk
Mon Oct 9 19:29:05 PDT 2006
I was always annoyed that you couldn't terminate an action with dbus so
I have
written this patch which fixes that. Hopefully this can be included.
I wrote the patch trying to repeat as little code as possible so I just
added a boolean
parameter to the dbusHandleActivateMessage and changed the name to
dbusHandleActivateDeactivateMessage. You could probably change the
deactivate
parameter to activate depending on how your mind works.
I have also updated the comments to show this as well as to change it so
that the
examples work with COW.
-------------- next part --------------
diff --git a/plugins/dbus.c b/plugins/dbus.c
index 46a7bcf..4892df4 100644
--- a/plugins/dbus.c
+++ b/plugins/dbus.c
@@ -34,6 +34,7 @@ #include <compiz.h>
#define COMPIZ_DBUS_SERVICE_NAME "org.freedesktop.compiz"
#define COMPIZ_DBUS_ACTIVATE_MEMBER_NAME "activate"
+#define COMPIZ_DBUS_DEACTIVATE_MEMBER_NAME "deactivate"
#define COMPIZ_DBUS_SET_MEMBER_NAME "set"
#define COMPIZ_DBUS_GET_MEMBER_NAME "get"
@@ -126,13 +127,34 @@ dbusGetOptionsFromPath (CompDisplay *d,
* dbus-send --type=method_call --dest=org.freedesktop.compiz \
* /org/freedesktop/compiz/rotate/allscreens/rotate_to \
* org.freedesktop.compiz.activate \
- * string:'root' int32:0x52 string:'face' int32:1
+ * string:'root' \
+ * int32:`xwininfo -root | grep id: | awk '{ print $4 }'` \
+ * string:'face' int32:1
+ *
+ *
+ * You can also call the terminate function
+ *
+ * Example unfold and refold cube:
+ * dbus-send --type=method_call --dest=org.freedesktop.compiz \
+ * /org/freedesktop/compiz/cube/allscreens/unfold \
+ * org.freedesktop.compiz.activate \
+ * string:'root' \
+ * int32:`xwininfo -root | grep id: | awk '{ print $4 }'` \
+ * string:'face' int32:1
+ *
+ * dbus-send --type=method_call --dest=org.freedesktop.compiz \
+ * /org/freedesktop/compiz/cube/allscreens/unfold \
+ * org.freedesktop.compiz.deactivate \
+ * string:'root' \
+ * int32:`xwininfo -root | grep id: | awk '{ print $4 }'` \
+ * string:'face' int32:1
*/
static Bool
-dbusHandleActivateMessage (DBusConnection *connection,
+dbusHandleActivateDeactivateMessage (DBusConnection *connection,
DBusMessage *message,
CompDisplay *d,
- char **path)
+ char **path,
+ Bool deactivate)
{
CompOption *option;
int nOption;
@@ -152,8 +174,15 @@ dbusHandleActivateMessage (DBusConnectio
if (option->type != CompOptionTypeAction)
return FALSE;
- if (!option->value.action.initiate)
- return FALSE;
+ if (!deactivate)
+ {
+ if (!option->value.action.initiate)
+ return FALSE;
+ }
+ else {
+ if (!option->value.action.terminate)
+ return FALSE;
+ }
if (dbus_message_iter_init (message, &iter))
{
@@ -238,10 +267,20 @@ dbusHandleActivateMessage (DBusConnectio
} while (dbus_message_iter_has_next (&iter));
}
- (*option->value.action.initiate) (d,
+ if (!deactivate)
+ {
+ (*option->value.action.initiate) (d,
+ &option->value.action,
+ 0,
+ argument, nArgument);
+ }
+ else
+ {
+ (*option->value.action.terminate) (d,
&option->value.action,
0,
argument, nArgument);
+ }
if (argument)
free (argument);
@@ -682,7 +721,11 @@ dbusHandleMessage (DBusConnection *conne
if (dbus_message_has_member (message, COMPIZ_DBUS_ACTIVATE_MEMBER_NAME))
{
- status = dbusHandleActivateMessage (connection, message, d, &path[3]);
+ status = dbusHandleActivateDeactivateMessage (connection, message, d, &path[3], FALSE);
+ }
+ else if (dbus_message_has_member (message, COMPIZ_DBUS_DEACTIVATE_MEMBER_NAME))
+ {
+ status = dbusHandleActivateDeactivateMessage (connection, message, d, &path[3], TRUE);
}
else if (dbus_message_has_member (message, COMPIZ_DBUS_SET_MEMBER_NAME))
{
More information about the compiz
mailing list