[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