Hi, everybody
I have the need to switch the e17 desk externally, in my current project.
So I have added a dbus signal to do this. What do you think about this.
The desk can be descibed by here name or position.

and it will be great for me if this go in svn :).
Index: src/bin/e_msgbus.c
===================================================================
--- src/bin/e_msgbus.c	(révision 44697)
+++ src/bin/e_msgbus.c	(copie de travail)
@@ -18,6 +18,8 @@
 static DBusMessage* _e_msgbus_profile_add_cb(E_DBus_Object *obj, DBusMessage *msg);
 static DBusMessage* _e_msgbus_profile_delete_cb(E_DBus_Object *obj, DBusMessage *msg);
 
+static DBusMessage* _e_msgbus_desk_show_cb(E_DBus_Object *obj, DBusMessage *msg);
+
 /* local subsystem globals */
 static E_Msgbus_Data *_e_msgbus_data = NULL;
 
@@ -82,7 +84,17 @@
    e_dbus_interface_method_add(iface, "List", "", "as", _e_msgbus_profile_list_cb);
    e_dbus_interface_method_add(iface, "Add", "s", "", _e_msgbus_profile_add_cb);
    e_dbus_interface_method_add(iface, "Delete", "s", "", _e_msgbus_profile_delete_cb);
-   
+	   
+   iface = e_dbus_interface_new("org.enlightenment.wm.Desk");
+   if (!iface)
+     {
+	printf("WARNING: Cannot add org.enlightenment.wm.Desk interface\n");
+	return 0;
+     }
+   e_dbus_object_interface_attach(_e_msgbus_data->obj, iface);
+   /* Desk Methods */
+   e_dbus_interface_method_add(iface, "Show", "s", "", _e_msgbus_desk_show_cb);
+
    return 1;
 }
 
@@ -338,3 +350,62 @@
 
    return dbus_message_new_method_return(msg);
 }
+
+static DBusMessage* 
+_e_msgbus_desk_show_cb(E_DBus_Object *obj, DBusMessage *msg) {
+   DBusMessageIter iter;
+   char *desk_description, *end;
+   long int pos_request;
+   E_Manager *man;
+   E_Zone *zone;
+   Eina_List *l, *ll;
+   int count, i;
+   Eina_Bool succes = EINA_FALSE;
+   
+
+   dbus_message_iter_init(msg, &iter);
+   dbus_message_iter_get_basic(&iter, &desk_description);
+   pos_request = strtol(desk_description, &end, 0);
+
+   l = e_manager_list();
+   if (*end != '\0') {
+      EINA_LIST_FOREACH(l, ll, man) {
+         zone = e_util_zone_current_get(man);
+         count = zone->desk_x_count * zone ->desk_y_count;
+         for (i = 0; i < count; ++i) {
+            if (zone->desks[i]->name &&
+                !strcmp(zone->desks[i]->name, desk_description)) {
+               e_desk_show(zone->desks[i]);
+               succes = EINA_TRUE;
+               break;
+            }
+         }
+      }
+   }
+   else {
+      if (0 <= pos_request) {
+         EINA_LIST_FOREACH(l, ll, man) {
+            zone = e_util_zone_current_get(man);
+            count = zone->desk_x_count * zone ->desk_y_count;
+            if (pos_request < count) {
+               e_desk_show(e_desk_at_pos_get(zone, pos_request));
+               succes = EINA_TRUE;
+               break;
+            }
+         }
+      }
+   }
+      
+   if (!succes) {
+	DBusMessage *ret;
+
+	ret = dbus_message_new_error(msg, "org.enlightenment.DBus.InvalidArgument", 
+	      "Can't find the desk you request");
+	return ret;
+   }
+   else
+     return dbus_message_new_method_return(msg);
+}
+              
+
+   
Index: data/tools/enlightenment_remote
===================================================================
--- data/tools/enlightenment_remote	(révision 44697)
+++ data/tools/enlightenment_remote	(copie de travail)
@@ -30,7 +30,9 @@
   -default-profile-get Get the default configuration profile
   -default-profile-set OPT1 Set the default configuration profile to OPT1
 
+  -desk-show OPT1 Show the desk OPT1 where OPT1 can be the name or position of the desk
 
+
 Note: This is a new implementation of enlightenment_remote,
       for more information about it see the '--help-new' option.
 "
@@ -195,6 +197,12 @@
 }
 
 
+#-------------------------------------------------------------------------------
+#   E Desk Show
+#-------------------------------------------------------------------------------
+er_desk_show(){
+   ERCS org.enlightenment.wm.Desk.Show "$2"
+}
 
 
 
@@ -252,6 +260,9 @@
    -default-profile-set)
       er_default_profile_set "$@"
    ;;
+   -desk-show)
+      er_desk_show "$@"
+   ;;
 
 
    # This entry needs to be allways the last option of the list (*)
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to