From aec55f7fae016a6d25f675a02ff42c981ec80c04 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 21 Jan 2010 15:57:18 -0600 Subject: Set the node ID to zero if the node is the root node. --- libdbusmenu-glib/menuitem.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index a03117c..3e06719 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -1060,12 +1060,17 @@ dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array, gint revis { g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); + guint id = 0; + if (!dbusmenu_menuitem_get_root(mi)) { + id = dbusmenu_menuitem_get_id(mi); + } + GList * children = dbusmenu_menuitem_get_children(mi); /* TODO: Only put revision info in the root node. Save some bandwidth. */ if (children == NULL) { - g_ptr_array_add(array, g_strdup_printf("", dbusmenu_menuitem_get_id(mi), revision)); + g_ptr_array_add(array, g_strdup_printf("", id, revision)); } else { - g_ptr_array_add(array, g_strdup_printf("", dbusmenu_menuitem_get_id(mi), revision)); + g_ptr_array_add(array, g_strdup_printf("", id, revision)); for ( ; children != NULL; children = children->next) { dbusmenu_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array, revision); } -- cgit v1.2.3 From b739c696ae20b0f022fd67fc3d5fd98e561c446b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 21 Jan 2010 17:13:40 -0600 Subject: Removing the idea that there should be revisions on the XML --- libdbusmenu-glib/dbus-menu.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index d2df400..a7cceaa 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -50,13 +50,13 @@ Provides an XML representation of the menu hierarchy XML syntax: - # Root container - # First level menu, for example "File" - ~ Second level menu, for example "Open" - + # Root container + # First level menu, for example "File" + ~ Second level menu, for example "Open" + ... - # Another first level menu, say "Edit" + # Another first level menu, say "Edit" ... ... -- cgit v1.2.3 From 4dea36b65076939e4f556a0f5e9d5c81c1553eb2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 21 Jan 2010 17:13:52 -0600 Subject: Removing the revision from the generated XML --- libdbusmenu-glib/menuitem-private.h | 2 +- libdbusmenu-glib/menuitem.c | 10 ++++------ libdbusmenu-glib/server.c | 6 +++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/libdbusmenu-glib/menuitem-private.h b/libdbusmenu-glib/menuitem-private.h index 0120435..1c7c16a 100644 --- a/libdbusmenu-glib/menuitem-private.h +++ b/libdbusmenu-glib/menuitem-private.h @@ -33,7 +33,7 @@ License version 3 and version 2.1 along with this program. If not, see G_BEGIN_DECLS -void dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array, gint revision); +void dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array); G_END_DECLS diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 3e06719..0dcbade 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -1047,7 +1047,6 @@ dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi) dbusmenu_menuitem_buildxml: @mi: #DbusmenuMenuitem to represent in XML @array: A list of string that will be turned into an XML file - @revision: The revision of the layout to embed in the XML This function will add strings to the array @array. It will put at least one entry if this menu item has no children. If it has @@ -1056,7 +1055,7 @@ dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi) children to place their own tags in the array in between those two. */ void -dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array, gint revision) +dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array) { g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); @@ -1066,13 +1065,12 @@ dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array, gint revis } GList * children = dbusmenu_menuitem_get_children(mi); - /* TODO: Only put revision info in the root node. Save some bandwidth. */ if (children == NULL) { - g_ptr_array_add(array, g_strdup_printf("", id, revision)); + g_ptr_array_add(array, g_strdup_printf("", id)); } else { - g_ptr_array_add(array, g_strdup_printf("", id, revision)); + g_ptr_array_add(array, g_strdup_printf("", id)); for ( ; children != NULL; children = children->next) { - dbusmenu_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array, revision); + dbusmenu_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array); } g_ptr_array_add(array, g_strdup("")); } diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 0971162..2c040a0 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -376,13 +376,13 @@ _dbusmenu_server_get_layout (DbusmenuServer * server, guint parent, guint * revi if (parent == 0) { if (priv->root == NULL) { /* g_debug("Getting layout without root node!"); */ - g_ptr_array_add(xmlarray, g_strdup_printf("", priv->layout_revision)); + g_ptr_array_add(xmlarray, g_strdup("")); } else { - dbusmenu_menuitem_buildxml(priv->root, xmlarray, priv->layout_revision); + dbusmenu_menuitem_buildxml(priv->root, xmlarray); } } else { DbusmenuMenuitem * item = dbusmenu_menuitem_find_id(priv->root, parent); - dbusmenu_menuitem_buildxml(item, xmlarray, priv->layout_revision); + dbusmenu_menuitem_buildxml(item, xmlarray); } g_ptr_array_add(xmlarray, NULL); -- cgit v1.2.3 From 72ccbb44a4d05515e7e29f23ff3e438352d84821 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 21 Jan 2010 17:16:50 -0600 Subject: Removing looking for the revision on the XML --- libdbusmenu-glib/client.c | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 01dfed7..c4e9860 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -514,34 +514,6 @@ build_proxies (DbusmenuClient * client) return; } -/* Get the "revision" attribute of the node, parse it and - return it. Also we're checking to ensure the node - is a 'menu' here. */ -static gint -parse_node_get_revision (xmlNodePtr node) -{ - if (g_strcmp0((gchar *)node->name, "menu") != 0) { - /* This kills some nodes early */ - g_warning("XML Node is not 'menu' it is '%s'", node->name); - return 0; - } - - xmlAttrPtr attrib; - for (attrib = node->properties; attrib != NULL; attrib = attrib->next) { - if (g_strcmp0((gchar *)attrib->name, "revision") == 0) { - if (attrib->children != NULL) { - guint revision = (guint)g_ascii_strtoull((gchar *)attrib->children->content, NULL, 10); - /* g_debug ("Found ID: %d", id); */ - return revision; - } - break; - } - } - - g_warning("Unable to find a revision on the node"); - return 0; -} - /* Get the ID attribute of the node, parse it and return it. Also we're checking to ensure the node is a 'menu' here. */ @@ -764,7 +736,6 @@ parse_layout (DbusmenuClient * client, const gchar * layout) xmldoc = xmlReadMemory(layout, g_utf8_strlen(layout, 16*1024), "dbusmenu.xml", NULL, 0); xmlNodePtr root = xmlDocGetRootElement(xmldoc); - gint revision = parse_node_get_revision(root); DbusmenuMenuitem * oldroot = priv->root; priv->root = parse_layout_xml(client, root, priv->root, NULL, priv->menuproxy); @@ -781,7 +752,7 @@ parse_layout (DbusmenuClient * client, const gchar * layout) g_signal_emit(G_OBJECT(client), signals[ROOT_CHANGED], 0, priv->root, TRUE); } - return revision; + return 1; } /* When the layout property returns, here's where we take care of that. */ -- cgit v1.2.3 From cc70c4613b95acd6e99bc22bf81cc0bd97bf414c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 10:44:40 -0600 Subject: Adding timestamp to XML description. --- libdbusmenu-glib/dbus-menu.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index d2df400..4ec03ef 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -141,6 +141,7 @@ menu item. @param id the id of the item which received the event @param type the type of event @param data event-specific data +@param timestamp The time that the event occured if available or the time the message was sent if not. @a type can be one of the following: @@ -153,6 +154,7 @@ Vendor specific events can be added by prefixing them with "x--" + -- cgit v1.2.3 From 40cf6ac5286893b98c75df1a56e4455f888301e6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 10:47:29 -0600 Subject: Adding in a 0 to make a clean prototype. --- libdbusmenu-glib/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 01dfed7..8b8d6e6 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -661,7 +661,7 @@ menuitem_activate (DbusmenuMenuitem * mi, DbusmenuClient * client) GValue value = {0}; g_value_init(&value, G_TYPE_INT); g_value_set_int(&value, 0); - org_ayatana_dbusmenu_event_async (priv->menuproxy, dbusmenu_menuitem_get_id(mi), "clicked", &value, menuitem_call_cb, mi); + org_ayatana_dbusmenu_event_async (priv->menuproxy, dbusmenu_menuitem_get_id(mi), "clicked", &value, 0, menuitem_call_cb, mi); return; } -- cgit v1.2.3 From 7cc39173802cc50e68cebd996d6042946975da5c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 10:50:36 -0600 Subject: Adding the timestamp on the server side. --- libdbusmenu-glib/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 0971162..48268ad 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -39,7 +39,7 @@ static gboolean _dbusmenu_server_get_layout (DbusmenuServer * server, guint pare static gboolean _dbusmenu_server_get_property (DbusmenuServer * server, guint id, gchar * property, gchar ** value, GError ** error); static gboolean _dbusmenu_server_get_properties (DbusmenuServer * server, guint id, GPtrArray * properties, GHashTable ** dict, GError ** error); static gboolean _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GArray * properties, GHashTable ** values, GError ** error); -static gboolean _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, GError ** error); +static gboolean _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, guint timestamp, GError ** error); static gboolean _dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * properties, GPtrArray ** output, GError ** error); #include "dbusmenu-server.h" @@ -537,7 +537,7 @@ _dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * pr } static gboolean -_dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, GError ** error) +_dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, guint timestamp, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id); -- cgit v1.2.3 From cdb85e85b88c090c3cd34e8bd412458e919464cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 14:10:27 -0600 Subject: Changing the menuitem interface to have activate include a timestamp --- libdbusmenu-glib/menuitem-marshal.list | 1 + libdbusmenu-glib/menuitem.c | 10 ++++++---- libdbusmenu-glib/menuitem.h | 4 ++-- libdbusmenu-glib/server.c | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libdbusmenu-glib/menuitem-marshal.list b/libdbusmenu-glib/menuitem-marshal.list index dc4ba53..654c91b 100644 --- a/libdbusmenu-glib/menuitem-marshal.list +++ b/libdbusmenu-glib/menuitem-marshal.list @@ -3,3 +3,4 @@ VOID: OBJECT, UINT, UINT VOID: OBJECT, UINT VOID: OBJECT VOID: VOID +VOID: UINT diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index a03117c..e50b2d8 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -127,6 +127,7 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) /** DbusmenuMenuitem::item-activated: @arg0: The #DbusmenuMenuitem object. + @arg1: The timestamp of when it was activated Emitted on the objects on the server side when they are signaled on the client side. @@ -136,8 +137,8 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(DbusmenuMenuitemClass, item_activated), NULL, NULL, - _dbusmenu_menuitem_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); + _dbusmenu_menuitem_marshal_VOID__UINT, + G_TYPE_NONE, 1, G_TYPE_UINT, G_TYPE_NONE); /** DbusmenuMenuitem::child-added: @arg0: The #DbusmenuMenuitem which is the parent. @@ -1114,18 +1115,19 @@ dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem /** dbusmenu_menuitem_activate: @mi: The #DbusmenuMenuitem to send the signal on. + @timestamp: The timestamp of when the event happened Emits the #DbusmenuMenuitem::item-activate signal on this menu item. Called by server objects when they get the appropriate DBus signals from the client. */ void -dbusmenu_menuitem_activate (DbusmenuMenuitem * mi) +dbusmenu_menuitem_activate (DbusmenuMenuitem * mi, guint timestamp) { g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); #ifdef MASSIVEDEBUGGING g_debug("Menuitem %d (%s) activated", ID(mi), LABEL(mi)); #endif - g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, TRUE); + g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, timestamp, TRUE); return; } diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index aaafe17..238b7d9 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -104,7 +104,7 @@ struct _DbusmenuMenuitemClass /* Signals */ void (*property_changed) (gchar * property, GValue * value); - void (*item_activated) (void); + void (*item_activated) (guint timestamp); void (*child_added) (DbusmenuMenuitem * child, guint position); void (*child_removed) (DbusmenuMenuitem * child); void (*child_moved) (DbusmenuMenuitem * child, guint newpos, guint oldpos); @@ -153,7 +153,7 @@ void dbusmenu_menuitem_set_root (DbusmenuMenuitem * mi, gboolean root); gboolean dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi); void dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem * mi, gpointer data), gpointer data); -void dbusmenu_menuitem_activate (DbusmenuMenuitem * mi); +void dbusmenu_menuitem_activate (DbusmenuMenuitem * mi, guint timestamp); /** SECTION:menuitem diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 48268ad..44bbe1b 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -553,7 +553,7 @@ _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GVal return FALSE; } - dbusmenu_menuitem_activate(mi); + dbusmenu_menuitem_activate(mi, timestamp); return TRUE; } -- cgit v1.2.3 From bb999b7316a4b7977af4d6690b3b094e0dcc2ace Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 14:18:46 -0600 Subject: Sending the current event time for a menu item getting activated. --- libdbusmenu-gtk/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index dd94663..7f03c33 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -109,7 +109,7 @@ static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; static gboolean menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) { - dbusmenu_menuitem_activate(mi); + dbusmenu_menuitem_activate(mi, gtk_get_current_event_time()); return TRUE; } -- cgit v1.2.3 From 4ca2136146ef6276e2be11bb3014786131645a54 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 14:26:34 -0600 Subject: Fixing the signal handler of the test. --- tests/test-gtk-label-server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c index c4d41ee..ae772f1 100644 --- a/tests/test-gtk-label-server.c +++ b/tests/test-gtk-label-server.c @@ -32,9 +32,9 @@ with this program. If not, see . #include static void -menuitem_click(DbusmenuMenuitem * mi, gpointer user_data) +menuitem_click(DbusmenuMenuitem * mi, guint32 time, gpointer user_data) { - g_debug("Clicked on: %d", dbusmenu_menuitem_get_id(mi)); + g_debug("Clicked on: %d @ %d", dbusmenu_menuitem_get_id(mi), time); return; } -- cgit v1.2.3 From 85e1c18ddc8803711f595572545125e0491beefa Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 15:06:50 -0600 Subject: Change the 'return_if_fail' to an if as the previous function makes an annoying message. --- libdbusmenu-gtk/client.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index dd94663..5146981 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -468,7 +468,10 @@ static void image_property_handle (DbusmenuMenuitem * item, const gchar * property, const GValue * invalue, gpointer userdata) { /* We're only looking at these two properties here */ - g_return_if_fail(!g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON) || !g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_DATA)); + if (g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON) != 0 && + g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_DATA) != 0) { + return; + } const gchar * value = NULL; -- cgit v1.2.3 From 3844bcd1fb2d8ad129a842dcee8ee1b3ec214275 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 22 Jan 2010 15:22:54 -0600 Subject: Changing all instances of 'LayoutUpdate' to 'LayoutUpdated' as discussed on the dbusmenu list. --- libdbusmenu-glib/client.c | 4 ++-- libdbusmenu-glib/dbus-menu.xml | 2 +- libdbusmenu-glib/server.c | 16 ++++++++-------- libdbusmenu-glib/server.h | 7 ++++--- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index c4e9860..e0879d4 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -499,8 +499,8 @@ build_proxies (DbusmenuClient * client) } dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__INT_UINT, G_TYPE_NONE, G_TYPE_INT, G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_add_signal(priv->menuproxy, "LayoutUpdate", G_TYPE_INT, G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_connect_signal(priv->menuproxy, "LayoutUpdate", G_CALLBACK(layout_update), client, NULL); + dbus_g_proxy_add_signal(priv->menuproxy, "LayoutUpdated", G_TYPE_INT, G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_connect_signal(priv->menuproxy, "LayoutUpdated", G_CALLBACK(layout_update), client, NULL); dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__UINT_STRING_POINTER, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_add_signal(priv->menuproxy, "ItemPropertyUpdated", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index a7cceaa..4c7446d 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -182,7 +182,7 @@ revision item for the entries that have changed. It is zero if the whole layout should be considered invalid. --> - + diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 2c040a0..e307d95 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -63,7 +63,7 @@ struct _DbusmenuServerPrivate enum { ID_PROP_UPDATE, ID_UPDATE, - LAYOUT_UPDATE, + LAYOUT_UPDATED, LAST_SIGNAL }; @@ -148,7 +148,7 @@ dbusmenu_server_class_init (DbusmenuServerClass *class) g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** - DbusmenuServer::layout-update: + DbusmenuServer::layout-updated: @arg0: The #DbusmenuServer emitting the signal. @arg1: A revision number representing which revision the update represents itself as. @@ -157,10 +157,10 @@ dbusmenu_server_class_init (DbusmenuServerClass *class) This signal is emitted any time the layout of the menuitems under this server is changed. */ - signals[LAYOUT_UPDATE] = g_signal_new(DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATE, + signals[LAYOUT_UPDATED] = g_signal_new(DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATED, G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(DbusmenuServerClass, layout_update), + G_STRUCT_OFFSET(DbusmenuServerClass, layout_updated), NULL, NULL, _dbusmenu_server_marshal_VOID__INT_UINT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_UINT); @@ -248,7 +248,7 @@ set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec) g_debug("Setting root node to NULL"); } priv->layout_revision++; - g_signal_emit(obj, signals[LAYOUT_UPDATE], 0, priv->layout_revision, 0, TRUE); + g_signal_emit(obj, signals[LAYOUT_UPDATED], 0, priv->layout_revision, 0, TRUE); break; default: g_return_if_reached(); @@ -306,7 +306,7 @@ menuitem_child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint /* TODO: We probably need to group the layout update signals to make the number more reasonble. */ DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); priv->layout_revision++; - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, 0, TRUE); + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATED], 0, priv->layout_revision, 0, TRUE); return; } @@ -317,7 +317,7 @@ menuitem_child_removed (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, Dbu /* TODO: We probably need to group the layout update signals to make the number more reasonble. */ DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); priv->layout_revision++; - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, 0, TRUE); + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATED], 0, priv->layout_revision, 0, TRUE); return; } @@ -326,7 +326,7 @@ menuitem_child_moved (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); priv->layout_revision++; - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, 0, TRUE); + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATED], 0, priv->layout_revision, 0, TRUE); return; } diff --git a/libdbusmenu-glib/server.h b/libdbusmenu-glib/server.h index 566b3cf..e4d6dc7 100644 --- a/libdbusmenu-glib/server.h +++ b/libdbusmenu-glib/server.h @@ -45,7 +45,8 @@ G_BEGIN_DECLS #define DBUSMENU_SERVER_SIGNAL_ID_PROP_UPDATE "item-property-updated" #define DBUSMENU_SERVER_SIGNAL_ID_UPDATE "item-updated" -#define DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATE "layout-update" +#define DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATED "layout-updated" +#define DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATE DBUSMENU_SERVER_SIGNAL_LAYOUT_UPDATED #define DBUSMENU_SERVER_PROP_DBUS_OBJECT "dbus-object" #define DBUSMENU_SERVER_PROP_ROOT_NODE "root-node" @@ -56,7 +57,7 @@ G_BEGIN_DECLS @parent_class: #GObjectClass @id_prop_update: Slot for #DbusmenuServer::id-prop-update. @id_update: Slot for #DbusmenuServer::id-update. - @layout_update: Slot for #DbusmenuServer::layout-update. + @layout_updated: Slot for #DbusmenuServer::layout-update. @dbusmenu_server_reserved1: Reserved for future use. @dbusmenu_server_reserved2: Reserved for future use. @dbusmenu_server_reserved3: Reserved for future use. @@ -71,7 +72,7 @@ struct _DbusmenuServerClass { /* Signals */ void (*id_prop_update)(guint id, gchar * property, gchar * value); void (*id_update)(guint id); - void (*layout_update)(gint revision); + void (*layout_updated)(gint revision); /* Reserved */ void (*dbusmenu_server_reserved1)(void); -- cgit v1.2.3 From 5f42d1712e443df0032f3313e647753d4fcddbfc Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 14:51:30 -0800 Subject: Use doxymel for documentation. --- libdbusmenu-glib/Doxyfile | 257 +++++++++++++++++++++++++++++++++++++++ libdbusmenu-glib/dbus-menu.xml | 268 +++++++++++++++++++++++------------------ 2 files changed, 407 insertions(+), 118 deletions(-) create mode 100644 libdbusmenu-glib/Doxyfile diff --git a/libdbusmenu-glib/Doxyfile b/libdbusmenu-glib/Doxyfile new file mode 100644 index 0000000..78e8666 --- /dev/null +++ b/libdbusmenu-glib/Doxyfile @@ -0,0 +1,257 @@ +# Doxyfile 1.6.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = DBusMenu +PROJECT_NUMBER = +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +SYMBOL_CACHE_SIZE = 0 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.xml +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = doxymel +FILTER_PATTERNS = *.xml=doxymel +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +HTML_DYNAMIC_SECTIONS = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +USE_INLINE_TREES = NO +TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 +SEARCHENGINE = YES +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +DOT_FONTNAME = FreeSans +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 866969e..692158e 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -27,65 +27,107 @@ You should have received a copy of both the GNU Lesser General Public License version 3 and version 2.1 along with this program. If not, see --> - + + -" + + @c type property is an enum which can take the following values: + + - @c action: An item which can be clicked to trigger an action + - @c checkbox: An item which can be checked or unchecked + - @c radio: An item which can be checked or unchecked as part of a group + - @c separator: A separator + - @c menu: An item which contains more items + + Vendor specific types can be added by prefixing them with "x--" + ]]> - - + + + Provides the version of the DBusmenu API that this API is + implementing. + + - - - - + # Root container + # First level menu, for example "File" + ~ Second level menu, for example "Open" + + ... + + # Another first level menu, say "Edit" + ... + + ... + + @endverbatim + ]]> + + The ID of the parent node for the layout. For + grabbing the layout from the root node use zero. + + + The revision number of the layout. For matching + with layoutUpdated signals. + + + The layout as an XML string of IDs. + - - - - + + Returns the list of items which are children of @a parentId. + + + + A list of ids that we should be finding the properties + on. If the list is empty, all menu items should be sent. + + + + + list of string the list of item properties we are + interested in. If there are no entries in the list all of + the properties will be sent. + + + + + An array of property values. + An item in this area is represented as a struct following + this format: + @li id unsigned the item id + @li properties map(string => variant) the requested item properties + + @@ -94,99 +136,89 @@ An item is represented as a struct following this format: - - + + Returns multiple properties in one call. This is more efficient than + GetProperty. + + - - + + The item whose properties we want to retrieve. + + + List of string name of the properties we want. If the list contains no entries, all properties are sent. + - - - - - + -" + ]]> + + the id of the item which received the event + + + the type of event + + + event-specific data + + + The time that the event occured if available or the time the message was sent if not + - + + Triggered by the application to notify the applet that the property @a property + from item @a id has changed to @a value. + - - + + Triggered by the application to notify the applet that all properties of item + + + id which should be considered outdated + - - - - + + + Triggered by the application to notify display of a layout update, up to + revision + + + The revision of the layout that we're currently on + + + + If the layout update is only of a subtree, this is the + parent item for the entries that have changed. It is zero if + the whole layout should be considered invalid. + + -- cgit v1.2.3 From 8ed4357299fc74f5299d6fb74d2d8439f6ac4b0a Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 15:15:28 -0800 Subject: Nicer verbatim output --- libdbusmenu-glib/dbus-menu.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 692158e..07a3827 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -76,17 +76,17 @@ License version 3 and version 2.1 along with this program. If not, see XML syntax: @verbatim - # Root container - # First level menu, for example "File" - ~ Second level menu, for example "Open" - - ... - - # Another first level menu, say "Edit" - ... - - ... - + # Root container + # First level menu, for example "File" + ~ Second level menu, for example "Open" + + ... + + # Another first level menu, say "Edit" + ... + + ... + @endverbatim ]]> -- cgit v1.2.3 From e69b32de65e1ff5ce0ac8b43c1f22dec909ea9b7 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 16:03:31 -0800 Subject: - Make menu item id an integer (useful to indicate bad id as -1) - Merged with the other spec --- libdbusmenu-glib/dbus-menu.xml | 46 ++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 07a3827..77374eb 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -39,22 +39,24 @@ License version 3 and version 2.1 along with this program. If not, see Available properties are: - @c type (string): Type of the item (see below) - - @c label (string): Text of the item - - @c icon-data (binary): Raw data of the icon (TODO: define format) - - @c icon (string): Icon name of the item, following icon spec - - @c sensitive (boolean): Whether the item can be activated or not - - @c checked (boolean): Whether a checkbox or radio item is checked - - @c shortcut (string): The keyboard shortcut + - @c label (string): Text of the item, except that (a) two consecutive + underscore characters "__" are displayed as a single underscore, (b) + any remaining underscore characters are not displayed at all, and (c) + the first of those remaining underscore characters (unless it is the + last character in the string) indicates that the following character + is the access key. + - @c icon-name (string): Icon name of the item, following icon spec + - @c icon-data (binary): PNG data of the icon + - @c enabled (boolean): Whether the item can be activated or not + - @c toggle-type (string): none, checkmark, switch, radio + - @c toggle-state (int): 0 = off, 1 = on, anything else = indeterminate Vendor specific properties can be added by prefixing them with "x--" @c type property is an enum which can take the following values: - - @c action: An item which can be clicked to trigger an action - - @c checkbox: An item which can be checked or unchecked - - @c radio: An item which can be checked or unchecked as part of a group + - @c standard: An item which can be clicked to trigger an action - @c separator: A separator - - @c menu: An item which contains more items Vendor specific types can be added by prefixing them with "x--" ]]> @@ -89,7 +91,7 @@ License version 3 and version 2.1 along with this program. If not, see @endverbatim ]]> - + The ID of the parent node for the layout. For grabbing the layout from the root node use zero. @@ -106,7 +108,7 @@ License version 3 and version 2.1 along with this program. If not, see Returns the list of items which are children of @a parentId. - + A list of ids that we should be finding the properties on. If the list is empty, all menu items should be sent. @@ -119,7 +121,7 @@ License version 3 and version 2.1 along with this program. If not, see the properties will be sent. - + An array of property values. An item in this area is represented as a struct following @@ -131,13 +133,13 @@ License version 3 and version 2.1 along with this program. If not, see - + - + - + @@ -149,7 +151,7 @@ License version 3 and version 2.1 along with this program. If not, see - + The item whose properties we want to retrieve. @@ -170,7 +172,7 @@ License version 3 and version 2.1 along with this program. If not, see Vendor specific events can be added by prefixing them with "x--" ]]> - + the id of the item which received the event @@ -190,7 +192,7 @@ License version 3 and version 2.1 along with this program. If not, see Triggered by the application to notify the applet that the property @a property from item @a id has changed to @a value. - + @@ -199,7 +201,7 @@ License version 3 and version 2.1 along with this program. If not, see Triggered by the application to notify the applet that all properties of item - + id which should be considered outdated @@ -209,10 +211,10 @@ License version 3 and version 2.1 along with this program. If not, see Triggered by the application to notify display of a layout update, up to revision - + The revision of the layout that we're currently on - + If the layout update is only of a subtree, this is the parent item for the entries that have changed. It is zero if -- cgit v1.2.3 From 3230218b3f812495f6b81d6aaa741f41aacf8c25 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 16:47:25 -0800 Subject: Turn property descriptions into a table. --- libdbusmenu-glib/dbus-menu.xml | 114 +++++++++++++++++++++++++++++++++-------- 1 file changed, 93 insertions(+), 21 deletions(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 77374eb..b795f9c 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -38,27 +38,99 @@ License version 3 and version 2.1 along with this program. If not, see Available properties are: - - @c type (string): Type of the item (see below) - - @c label (string): Text of the item, except that (a) two consecutive - underscore characters "__" are displayed as a single underscore, (b) - any remaining underscore characters are not displayed at all, and (c) - the first of those remaining underscore characters (unless it is the - last character in the string) indicates that the following character - is the access key. - - @c icon-name (string): Icon name of the item, following icon spec - - @c icon-data (binary): PNG data of the icon - - @c enabled (boolean): Whether the item can be activated or not - - @c toggle-type (string): none, checkmark, switch, radio - - @c toggle-state (int): 0 = off, 1 = on, anything else = indeterminate - - Vendor specific properties can be added by prefixing them with "x--" - - @c type property is an enum which can take the following values: - - - @c standard: An item which can be clicked to trigger an action - - @c separator: A separator - - Vendor specific types can be added by prefixing them with "x--" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionDefault Value
typeStringCan be one of: + - "standard": an item which can be clicked to trigger an action or + show another menu + - "separator": a separator + + Vendor specific types can be added by prefixing them with + "x--". + "standard"
labelstringText of the item, except that: + -# two consecutive underscore characters "__" are displayed as a + single underscore, + -# any remaining underscore characters are not displayed at all, + -# the first of those remaining underscore characters (unless it is + the last character in the string) indicates that the following + character is the access key. + ""
enabledbooleanWhether the item can be activated or not.true
icon-namestringIcon name of the item, following the freedesktop.org icon spec.""
icon-databinaryPNG data of the icon.Empty
toggle-typestring + If the item can be toggled, this property should be set to: + - "checkmark": Item is an independent togglable item + - "radio": Item is part of a group where only one item can be + toggled at a time + - "": Item cannot be toggled + ""
toggle-stateint + Describe the current state of a "togglable" item. Can be one of: + - 0 = off + - 1 = on + - anything else = indeterminate + + Note: + The implementation does not itself handle ensuring that only one + item in a radio group is set to "on", or that a group does not have + "on" and "indeterminate" items simultaneously; maintaining this + policy is up to the toolkit wrappers. + 0
children-displaystring + If the menu item has children this property should be set to + "submenu". + ""
+ + Vendor specific properties can be added by prefixing them with + "x--". ]]>
-- cgit v1.2.3 From 8939f05fde72c41d8f65c09a423702245c8c77a4 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 16:49:47 -0800 Subject: Misc fixes --- libdbusmenu-glib/dbus-menu.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index b795f9c..53b0d4c 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -188,7 +188,7 @@ License version 3 and version 2.1 along with this program. If not, see
- list of string the list of item properties we are + The list of item properties we are interested in. If there are no entries in the list all of the properties will be sent. @@ -278,7 +278,7 @@ License version 3 and version 2.1 along with this program. If not, see - + Triggered by the application to notify display of a layout update, up to revision -- cgit v1.2.3 From 83f5fe3159641096711337b3d903e80e83b7f547 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 1 Feb 2010 17:44:14 -0800 Subject: - Annotations necessary for the Qt side. - Other minor tweaks. --- libdbusmenu-glib/dbus-menu.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 53b0d4c..121725e 100644 --- a/libdbusmenu-glib/dbus-menu.xml +++ b/libdbusmenu-glib/dbus-menu.xml @@ -8,6 +8,7 @@ Copyright 2009 Canonical Ltd. Authors: Ted Gould + Aurelien Gateau This program is free software: you can redistribute it and/or modify it under the terms of either or both of the following licenses: @@ -177,10 +178,12 @@ License version 3 and version 2.1 along with this program. If not, see + + Returns the list of items which are children of @a parentId. - + A list of ids that we should be finding the properties on. If the list is empty, all menu items should be sent. @@ -205,6 +208,7 @@ License version 3 and version 2.1 along with this program. If not, see + -- cgit v1.2.3 From 1604731c2d68d1a56a4ab87d08ee1867a25eb25a Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Tue, 2 Feb 2010 16:32:49 -0800 Subject: Turn id into an int --- libdbusmenu-glib/client.c | 12 ++++++------ libdbusmenu-glib/menuitem.c | 12 ++++++------ libdbusmenu-glib/menuitem.h | 6 +++--- libdbusmenu-glib/server.c | 26 +++++++++++++------------- libdbusmenu-glib/server.h | 4 ++-- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 720c8e2..5d07fc6 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -96,8 +96,8 @@ static void set_property (GObject * obj, guint id, const GValue * value, GParamS static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec); /* Private Funcs */ static void layout_update (DBusGProxy * proxy, gint revision, guint parent, DbusmenuClient * client); -static void id_prop_update (DBusGProxy * proxy, guint id, gchar * property, GValue * value, DbusmenuClient * client); -static void id_update (DBusGProxy * proxy, guint id, DbusmenuClient * client); +static void id_prop_update (DBusGProxy * proxy, gint id, gchar * property, GValue * value, DbusmenuClient * client); +static void id_update (DBusGProxy * proxy, gint id, DbusmenuClient * client); static void build_proxies (DbusmenuClient * client); static guint parse_node_get_id (xmlNodePtr node); static DbusmenuMenuitem * parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * item, DbusmenuMenuitem * parent, DBusGProxy * proxy); @@ -321,7 +321,7 @@ layout_update (DBusGProxy * proxy, gint revision, guint parent, DbusmenuClient * /* Signal from the server that a property has changed on one of our menuitems */ static void -id_prop_update (DBusGProxy * proxy, guint id, gchar * property, GValue * value, DbusmenuClient * client) +id_prop_update (DBusGProxy * proxy, gint id, gchar * property, GValue * value, DbusmenuClient * client) { #ifdef MASSIVEDEBUGGING GValue valstr = {0}; @@ -344,7 +344,7 @@ id_prop_update (DBusGProxy * proxy, guint id, gchar * property, GValue * value, /* Oh, lots of updates now. That silly server, they want to change all kinds of stuff! */ static void -id_update (DBusGProxy * proxy, guint id, DbusmenuClient * client) +id_update (DBusGProxy * proxy, gint id, DbusmenuClient * client) { #ifdef MASSIVEDEBUGGING g_debug("Client side ID update: %d", id); @@ -530,7 +530,7 @@ parse_node_get_id (xmlNodePtr node) for (attrib = node->properties; attrib != NULL; attrib = attrib->next) { if (g_strcmp0((gchar *)attrib->name, "id") == 0) { if (attrib->children != NULL) { - guint id = (guint)g_ascii_strtoull((gchar *)attrib->children->content, NULL, 10); + gint id = (guint)g_ascii_strtoull((gchar *)attrib->children->content, NULL, 10); /* g_debug ("Found ID: %d", id); */ return id; } @@ -642,7 +642,7 @@ menuitem_activate (DbusmenuMenuitem * mi, DbusmenuClient * client) static DbusmenuMenuitem * parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * item, DbusmenuMenuitem * parent, DBusGProxy * proxy) { - guint id = parse_node_get_id(node); + gint id = parse_node_get_id(node); #ifdef MASSIVEDEBUGGING g_debug("Client looking at node with id: %d", id); #endif diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 06d6200..08cc27b 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -55,7 +55,7 @@ License version 3 and version 2.1 along with this program. If not, see typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; struct _DbusmenuMenuitemPrivate { - guint id; + gint id; GList * children; GHashTable * properties; gboolean root; @@ -367,7 +367,7 @@ dbusmenu_menuitem_new (void) Return value: A newly allocated #DbusmenuMenuitem. */ DbusmenuMenuitem * -dbusmenu_menuitem_new_with_id (guint id) +dbusmenu_menuitem_new_with_id (gint id) { DbusmenuMenuitem * mi = g_object_new(DBUSMENU_TYPE_MENUITEM, "id", id, NULL); /* g_debug("New Menuitem id %d goal id %d", dbusmenu_menuitem_get_id(mi), id); */ @@ -642,7 +642,7 @@ dbusmenu_menuitem_child_reorder(DbusmenuMenuitem * mi, DbusmenuMenuitem * child, can't be found. */ DbusmenuMenuitem * -dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) +dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, gint id) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL); @@ -661,7 +661,7 @@ dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) typedef struct { DbusmenuMenuitem * mi; - guint id; + gint id; } find_id_t; /* Basically the heart of the find_id that matches the @@ -697,7 +697,7 @@ find_id_helper (gpointer in_mi, gpointer in_find_id) represented by @mi. */ DbusmenuMenuitem * -dbusmenu_menuitem_find_id (DbusmenuMenuitem * mi, guint id) +dbusmenu_menuitem_find_id (DbusmenuMenuitem * mi, gint id) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL); find_id_t find_id = {mi: NULL, id: id}; @@ -1060,7 +1060,7 @@ dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array) { g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); - guint id = 0; + gint id = 0; if (!dbusmenu_menuitem_get_root(mi)) { id = dbusmenu_menuitem_get_id(mi); } diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index 238b7d9..547b357 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -122,7 +122,7 @@ struct _DbusmenuMenuitemClass GType dbusmenu_menuitem_get_type (void); DbusmenuMenuitem * dbusmenu_menuitem_new (void) G_GNUC_WARN_UNUSED_RESULT; -DbusmenuMenuitem * dbusmenu_menuitem_new_with_id (guint id) G_GNUC_WARN_UNUSED_RESULT; +DbusmenuMenuitem * dbusmenu_menuitem_new_with_id (gint id) G_GNUC_WARN_UNUSED_RESULT; guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi); GList * dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi); @@ -134,8 +134,8 @@ gboolean dbusmenu_menuitem_child_prepend (DbusmenuMenuitem * mi, DbusmenuMenuite gboolean dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child); gboolean dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position); gboolean dbusmenu_menuitem_child_reorder (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position); -DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id); -DbusmenuMenuitem * dbusmenu_menuitem_find_id (DbusmenuMenuitem * mi, guint id); +DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, gint id); +DbusmenuMenuitem * dbusmenu_menuitem_find_id (DbusmenuMenuitem * mi, gint id); gboolean dbusmenu_menuitem_property_set (DbusmenuMenuitem * mi, const gchar * property, const gchar * value); gboolean dbusmenu_menuitem_property_set_value (DbusmenuMenuitem * mi, const gchar * property, const GValue * value); diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index afcbfd3..af45ffc 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -36,11 +36,11 @@ License version 3 and version 2.1 along with this program. If not, see /* DBus Prototypes */ static gboolean _dbusmenu_server_get_layout (DbusmenuServer * server, guint parent, guint * revision, gchar ** layout, GError ** error); -static gboolean _dbusmenu_server_get_property (DbusmenuServer * server, guint id, gchar * property, gchar ** value, GError ** error); -static gboolean _dbusmenu_server_get_properties (DbusmenuServer * server, guint id, GPtrArray * properties, GHashTable ** dict, GError ** error); +static gboolean _dbusmenu_server_get_property (DbusmenuServer * server, gint id, gchar * property, gchar ** value, GError ** error); +static gboolean _dbusmenu_server_get_properties (DbusmenuServer * server, gint id, GPtrArray * properties, GHashTable ** dict, GError ** error); static gboolean _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GArray * properties, GHashTable ** values, GError ** error); -static gboolean _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, guint timestamp, GError ** error); -static gboolean _dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * properties, GPtrArray ** output, GError ** error); +static gboolean _dbusmenu_server_event (DbusmenuServer * server, gint id, gchar * eventid, GValue * data, guint timestamp, GError ** error); +static gboolean _dbusmenu_server_get_children (DbusmenuServer * server, gint id, GPtrArray * properties, GPtrArray ** output, GError ** error); #include "dbusmenu-server.h" @@ -396,7 +396,7 @@ _dbusmenu_server_get_layout (DbusmenuServer * server, guint parent, guint * revi } static gboolean -_dbusmenu_server_get_property (DbusmenuServer * server, guint id, gchar * property, gchar ** value, GError ** error) +_dbusmenu_server_get_property (DbusmenuServer * server, gint id, gchar * property, gchar ** value, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id); @@ -441,7 +441,7 @@ _dbusmenu_server_get_property (DbusmenuServer * server, guint id, gchar * proper } static gboolean -_dbusmenu_server_get_properties (DbusmenuServer * server, guint id, GPtrArray * properties, GHashTable ** dict, GError ** error) +_dbusmenu_server_get_properties (DbusmenuServer * server, gint id, GPtrArray * properties, GHashTable ** dict, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id); @@ -475,12 +475,12 @@ _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GA } static void -_gvalue_array_append_uint(GValueArray *array, guint i) +_gvalue_array_append_int(GValueArray *array, gint i) { GValue value = {0}; - g_value_init(&value, G_TYPE_UINT); - g_value_set_uint(&value, i); + g_value_init(&value, G_TYPE_INT); + g_value_set_int(&value, i); g_value_array_append(array, &value); g_value_unset(&value); } @@ -502,18 +502,18 @@ serialize_menuitem(gpointer data, gpointer user_data) DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(data); GPtrArray * output = (GPtrArray *)(user_data); - guint id = dbusmenu_menuitem_get_id(mi); + gint id = dbusmenu_menuitem_get_id(mi); GHashTable * dict = dbusmenu_menuitem_properties_copy(mi); GValueArray * item = g_value_array_new(1); - _gvalue_array_append_uint(item, id); + _gvalue_array_append_int(item, id); _gvalue_array_append_hashtable(item, dict); g_ptr_array_add(output, item); } static gboolean -_dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * properties, GPtrArray ** output, GError ** error) +_dbusmenu_server_get_children (DbusmenuServer * server, gint id, GPtrArray * properties, GPtrArray ** output, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); DbusmenuMenuitem * mi = id == 0 ? priv->root : dbusmenu_menuitem_find_id(priv->root, id); @@ -537,7 +537,7 @@ _dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * pr } static gboolean -_dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, guint timestamp, GError ** error) +_dbusmenu_server_event (DbusmenuServer * server, gint id, gchar * eventid, GValue * data, guint timestamp, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id); diff --git a/libdbusmenu-glib/server.h b/libdbusmenu-glib/server.h index e4d6dc7..f4e3527 100644 --- a/libdbusmenu-glib/server.h +++ b/libdbusmenu-glib/server.h @@ -70,8 +70,8 @@ struct _DbusmenuServerClass { GObjectClass parent_class; /* Signals */ - void (*id_prop_update)(guint id, gchar * property, gchar * value); - void (*id_update)(guint id); + void (*id_prop_update)(gint id, gchar * property, gchar * value); + void (*id_update)(gint id); void (*layout_updated)(gint revision); /* Reserved */ -- cgit v1.2.3 From 141060ba0a68af200973b91d7ca7e8e01fd7e79d Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Tue, 2 Feb 2010 16:57:41 -0800 Subject: icon -> icon-name sensitive -> enabled toggle-checked -> toggle-state toggle-state is now an int --- libdbusmenu-glib/menuitem.h | 12 ++++++------ libdbusmenu-gtk/client.c | 34 +++++++++++++++++----------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index 547b357..45445c6 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -52,19 +52,19 @@ G_BEGIN_DECLS #define DBUSMENU_MENUITEM_PROP_TYPE "type" #define DBUSMENU_MENUITEM_PROP_VISIBLE "visible" -#define DBUSMENU_MENUITEM_PROP_SENSITIVE "sensitive" +#define DBUSMENU_MENUITEM_PROP_ENABLED "enabled" #define DBUSMENU_MENUITEM_PROP_LABEL "label" -#define DBUSMENU_MENUITEM_PROP_ICON "icon" +#define DBUSMENU_MENUITEM_PROP_ICON_NAME "icon-name" #define DBUSMENU_MENUITEM_PROP_ICON_DATA "icon-data" #define DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE "toggle-type" -#define DBUSMENU_MENUITEM_PROP_TOGGLE_CHECKED "toggle-checked" +#define DBUSMENU_MENUITEM_PROP_TOGGLE_STATE "toggle-state" #define DBUSMENU_MENUITEM_TOGGLE_CHECK "checkmark" #define DBUSMENU_MENUITEM_TOGGLE_RADIO "radio" -#define DBUSMENU_MENUITEM_TOGGLE_STATE_UNCHECKED "unchecked" -#define DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED "checked" -#define DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN "indeterminate" +#define DBUSMENU_MENUITEM_TOGGLE_STATE_UNCHECKED 0 +#define DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED 1 +#define DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN -1 /** DbusmenuMenuitem: diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 20e5523..a4de44e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -136,7 +136,7 @@ process_sensitive (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * valu { gboolean val = TRUE; if (value != NULL) { - val = dbusmenu_menuitem_property_get_bool(mi, DBUSMENU_MENUITEM_PROP_SENSITIVE); + val = dbusmenu_menuitem_property_get_bool(mi, DBUSMENU_MENUITEM_PROP_ENABLED); } gtk_widget_set_sensitive(GTK_WIDGET(gmi), val); return; @@ -167,18 +167,18 @@ process_toggle_type (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * va /* Process the sensitive property */ static void -process_toggle_checked (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) +process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; GenericmenuitemState state = GENERICMENUITEM_STATE_UNCHECKED; - if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_STRING) { - const gchar * strval = g_value_get_string(value); + if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_INT) { + int val = g_value_get_int(value); - if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED)) { + if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED) { state = GENERICMENUITEM_STATE_CHECKED; - } else if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN)) { + } else if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN) { state = GENERICMENUITEM_STATE_INDETERMINATE; } } @@ -196,12 +196,12 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, GtkMen gtk_menu_item_set_label(gmi, g_value_get_string(value)); } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_VISIBLE)) { process_visible(mi, gmi, value); - } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_SENSITIVE)) { + } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_ENABLED)) { process_sensitive(mi, gmi, value); } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE)) { process_toggle_type(mi, gmi, value); - } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_TOGGLE_CHECKED)) { - process_toggle_checked(mi, gmi, value); + } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE)) { + process_toggle_state(mi, gmi, value); } return; @@ -284,9 +284,9 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * /* Check our set of props to see if any are set already */ process_visible(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_VISIBLE)); - process_sensitive(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_SENSITIVE)); + process_sensitive(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_ENABLED)); process_toggle_type(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE)); - process_toggle_checked(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_CHECKED)); + process_toggle_state(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE)); /* Oh, we're a child, let's deal with that */ if (parent != NULL) { @@ -426,8 +426,8 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu } image_property_handle(newitem, - DBUSMENU_MENUITEM_PROP_ICON, - dbusmenu_menuitem_property_get_value(newitem, DBUSMENU_MENUITEM_PROP_ICON), + DBUSMENU_MENUITEM_PROP_ICON_NAME, + dbusmenu_menuitem_property_get_value(newitem, DBUSMENU_MENUITEM_PROP_ICON_NAME), client); image_property_handle(newitem, DBUSMENU_MENUITEM_PROP_ICON_DATA, @@ -468,7 +468,7 @@ static void image_property_handle (DbusmenuMenuitem * item, const gchar * property, const GValue * invalue, gpointer userdata) { /* We're only looking at these two properties here */ - if (g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON) != 0 && + if (g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_NAME) != 0 && g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_DATA) != 0) { return; } @@ -482,10 +482,10 @@ image_property_handle (DbusmenuMenuitem * item, const gchar * property, const GV if (value == NULL || value[0] == '\0') { /* This means that we're unsetting a value. */ /* Try to use the other one */ - if (g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON)) { + if (g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_NAME)) { property = DBUSMENU_MENUITEM_PROP_ICON_DATA; } else { - property = DBUSMENU_MENUITEM_PROP_ICON; + property = DBUSMENU_MENUITEM_PROP_ICON_NAME; } } @@ -507,7 +507,7 @@ image_property_handle (DbusmenuMenuitem * item, const gchar * property, const GV } /* Now figure out what to change */ - if (!g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON)) { + if (!g_strcmp0(property, DBUSMENU_MENUITEM_PROP_ICON_NAME)) { const gchar * iconname = dbusmenu_menuitem_property_get(item, property); if (iconname == NULL) { /* If there is no name, by golly we want no -- cgit v1.2.3 From 29d3e5fa54df93e5a139ecd34f1d51cb28dcb6b2 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Tue, 2 Feb 2010 17:42:14 -0800 Subject: Turn parent parameter of get_layout to an int as well --- libdbusmenu-glib/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index af45ffc..6e7ee7d 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -35,7 +35,7 @@ License version 3 and version 2.1 along with this program. If not, see #include "server-marshal.h" /* DBus Prototypes */ -static gboolean _dbusmenu_server_get_layout (DbusmenuServer * server, guint parent, guint * revision, gchar ** layout, GError ** error); +static gboolean _dbusmenu_server_get_layout (DbusmenuServer * server, gint parent, guint * revision, gchar ** layout, GError ** error); static gboolean _dbusmenu_server_get_property (DbusmenuServer * server, gint id, gchar * property, gchar ** value, GError ** error); static gboolean _dbusmenu_server_get_properties (DbusmenuServer * server, gint id, GPtrArray * properties, GHashTable ** dict, GError ** error); static gboolean _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GArray * properties, GHashTable ** values, GError ** error); @@ -366,7 +366,7 @@ error_quark (void) /* DBus interface */ static gboolean -_dbusmenu_server_get_layout (DbusmenuServer * server, guint parent, guint * revision, gchar ** layout, GError ** error) +_dbusmenu_server_get_layout (DbusmenuServer * server, gint parent, guint * revision, gchar ** layout, GError ** error) { DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); -- cgit v1.2.3 From 96512c9c06438eb32d8af0e29229f84455fffc64 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Tue, 2 Feb 2010 19:02:34 -0800 Subject: - Allow id to be 0. - Fix default item type. --- libdbusmenu-glib/client.c | 25 +++++++++++++------------ libdbusmenu-glib/client.h | 4 ++-- libdbusmenu-glib/menuitem.c | 15 ++++++--------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 5d07fc6..66984e2 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -99,7 +99,7 @@ static void layout_update (DBusGProxy * proxy, gint revision, guint parent, Dbus static void id_prop_update (DBusGProxy * proxy, gint id, gchar * property, GValue * value, DbusmenuClient * client); static void id_update (DBusGProxy * proxy, gint id, DbusmenuClient * client); static void build_proxies (DbusmenuClient * client); -static guint parse_node_get_id (xmlNodePtr node); +static gint parse_node_get_id (xmlNodePtr node); static DbusmenuMenuitem * parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * item, DbusmenuMenuitem * parent, DBusGProxy * proxy); static gint parse_layout (DbusmenuClient * client, const gchar * layout); static void update_layout_cb (DBusGProxy * proxy, guint rev, gchar * xml, GError * in_error, void * data); @@ -517,20 +517,20 @@ build_proxies (DbusmenuClient * client) /* Get the ID attribute of the node, parse it and return it. Also we're checking to ensure the node is a 'menu' here. */ -static guint +static gint parse_node_get_id (xmlNodePtr node) { if (g_strcmp0((gchar *)node->name, "menu") != 0) { /* This kills some nodes early */ g_warning("XML Node is not 'menu' it is '%s'", node->name); - return 0; + return -1; } xmlAttrPtr attrib; for (attrib = node->properties; attrib != NULL; attrib = attrib->next) { if (g_strcmp0((gchar *)attrib->name, "id") == 0) { if (attrib->children != NULL) { - gint id = (guint)g_ascii_strtoull((gchar *)attrib->children->content, NULL, 10); + gint id = (guint)g_ascii_strtoll((gchar *)attrib->children->content, NULL, 10); /* g_debug ("Found ID: %d", id); */ return id; } @@ -539,7 +539,7 @@ parse_node_get_id (xmlNodePtr node) } g_warning("Unable to find an ID on the node"); - return 0; + return -1; } /* A small helper that calls _property_set on each hash table @@ -643,10 +643,13 @@ static DbusmenuMenuitem * parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * item, DbusmenuMenuitem * parent, DBusGProxy * proxy) { gint id = parse_node_get_id(node); + if (id < 0) { + return NULL; + } #ifdef MASSIVEDEBUGGING g_debug("Client looking at node with id: %d", id); #endif - if (item == NULL || dbusmenu_menuitem_get_id(item) != id || id == 0) { + if (item == NULL || dbusmenu_menuitem_get_id(item) != id) { if (item != NULL) { if (parent != NULL) { dbusmenu_menuitem_child_delete(parent, item); @@ -655,11 +658,6 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it item = NULL; } - if (id == 0) { - g_warning("ID from XML file is zero"); - return NULL; - } - /* Build a new item */ item = dbusmenu_menuitem_new_with_id(id); if (parent == NULL) { @@ -689,7 +687,10 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it for (children = node->children, position = 0; children != NULL; children = children->next, position++) { /* g_debug("Looking at child: %d", position); */ - guint childid = parse_node_get_id(children); + gint childid = parse_node_get_id(children); + if (childid < 0) { + continue; + } DbusmenuMenuitem * childmi = NULL; GList * childsearch = NULL; diff --git a/libdbusmenu-glib/client.h b/libdbusmenu-glib/client.h index b42bc83..15192f4 100644 --- a/libdbusmenu-glib/client.h +++ b/libdbusmenu-glib/client.h @@ -50,9 +50,9 @@ G_BEGIN_DECLS #define DBUSMENU_CLIENT_PROP_DBUS_NAME "dbus-name" #define DBUSMENU_CLIENT_PROP_DBUS_OBJECT "dbus-object" -#define DBUSMENU_CLIENT_TYPES_DEFAULT "menuitem" +#define DBUSMENU_CLIENT_TYPES_DEFAULT "standard" #define DBUSMENU_CLIENT_TYPES_SEPARATOR "separator" -#define DBUSMENU_CLIENT_TYPES_IMAGE "menuitem" +#define DBUSMENU_CLIENT_TYPES_IMAGE "standard" /** DbusmenuClientClass: diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 08cc27b..7e1e1ac 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -207,7 +207,7 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) G_TYPE_NONE, 0, G_TYPE_NONE); g_object_class_install_property (object_class, PROP_ID, - g_param_spec_uint("id", "ID for the menu item", + g_param_spec_int("id", "ID for the menu item", "This is a unique indentifier for the menu item.", 0, 30000, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); @@ -246,7 +246,7 @@ g_value_transform_STRING_INT (const GValue * in, GValue * out) return; } -static guint menuitem_next_id = 1; +static gint menuitem_next_id = 1; /* A small little function to both clear the insides of a value as well as the memory it itself uses. */ @@ -315,9 +315,9 @@ set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec) switch (id) { case PROP_ID: - priv->id = g_value_get_uint(value); + priv->id = g_value_get_int(value); if (priv->id > menuitem_next_id) { - menuitem_next_id = priv->id; + menuitem_next_id = priv->id + 1; } break; } @@ -332,10 +332,7 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) switch (id) { case PROP_ID: - if (priv->id == 0) { - priv->id = menuitem_next_id++; - } - g_value_set_uint(value, priv->id); + g_value_set_int(value, priv->id); break; } @@ -355,7 +352,7 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) DbusmenuMenuitem * dbusmenu_menuitem_new (void) { - return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL); + return g_object_new(DBUSMENU_TYPE_MENUITEM, "id", menuitem_next_id++, NULL); } /** -- cgit v1.2.3 From f62b7b881e204847691a409f81714626f6806df4 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Tue, 2 Feb 2010 19:07:19 -0800 Subject: Root id should be 0 --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 7e1e1ac..8198929 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -246,7 +246,7 @@ g_value_transform_STRING_INT (const GValue * in, GValue * out) return; } -static gint menuitem_next_id = 1; +static gint menuitem_next_id = 0; /* A small little function to both clear the insides of a value as well as the memory it itself uses. */ -- cgit v1.2.3 From a26a7e817321523874eaec63dfc441ad7ae83dbe Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Feb 2010 10:33:47 -0800 Subject: Use new property names --- tests/test-gtk-label.json | 242 +++++++++++++++++++++++----------------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/tests/test-gtk-label.json b/tests/test-gtk-label.json index 4bd666a..1a46dcf 100644 --- a/tests/test-gtk-label.json +++ b/tests/test-gtk-label.json @@ -1,256 +1,256 @@ [ - {"id": 1, "type": "menuitem", + {"id": 1, "type": "standard", "label": "value1", "submenu": [ - {"id": 30, "type": "menuitem", + {"id": 30, "type": "standard", "label": "value30"}, - {"id": 31, "type": "menuitem", + {"id": 31, "type": "standard", "label": "value31"}, - {"id": 32, "type": "menuitem", + {"id": 32, "type": "standard", "label": "value32"}, - {"id": 33, "type": "menuitem", + {"id": 33, "type": "standard", "label": "value33"}, - {"id": 34, "type": "menuitem", + {"id": 34, "type": "standard", "label": "value34"}, - {"id": 35, "type": "menuitem", + {"id": 35, "type": "standard", "label": "value35"}, - {"id": 36, "type": "menuitem", + {"id": 36, "type": "standard", "label": "value36"}, - {"id": 37, "type": "menuitem", + {"id": 37, "type": "standard", "label": "value37"}, - {"id": 38, "type": "menuitem", + {"id": 38, "type": "standard", "label": "value38"}, - {"id": 39, "type": "menuitem", + {"id": 39, "type": "standard", "label": "value39"} ] }, - {"id": 2, "type": "menuitem", + {"id": 2, "type": "standard", "label": "value2", "submenu": [ - {"id": 20, "type": "menuitem", + {"id": 20, "type": "standard", "label": "value20"}, {"id": 21, "type": "separator", "label": "value21"}, - {"id": 22, "type": "menuitem", + {"id": 22, "type": "standard", "label": "value22"}, {"id": 23, "type": "separator", "label": "value23"}, - {"id": 24, "type": "menuitem", + {"id": 24, "type": "standard", "label": "value24"}, {"id": 25, "type": "separator", "label": "value25"}, - {"id": 26, "type": "menuitem", + {"id": 26, "type": "standard", "label": "value26"}, {"id": 27, "type": "separator", "label": "value27"}, - {"id": 28, "type": "menuitem", + {"id": 28, "type": "standard", "label": "value28"}, - {"id": 29, "type": "menuitem", "visible": "false", + {"id": 29, "type": "standard", "visible": "false", "label": "value29"} ] }, - {"id": 4, "type": "menuitem", + {"id": 4, "type": "standard", "label": "value4", "submenu": [ {"id": 40, - "type": "menuitem", - "sensitive": "true", + "type": "standard", + "enabled": "true", "label": "value40"}, {"id": 41, - "type": "menuitem", - "sensitive": "false", + "type": "standard", + "enabled": "false", "label": "value41"}, {"id": 42, - "type": "menuitem", - "sensitive": "true", + "type": "standard", + "enabled": "true", "label": "value42"}, {"id": 43, - "type": "menuitem", - "sensitive": "false", + "type": "standard", + "enabled": "false", "label": "value43"}, {"id": 44, - "type": "menuitem", - "sensitive": "true", + "type": "standard", + "enabled": "true", "label": "value44"}, {"id": 45, - "type": "menuitem", - "sensitive": "false", + "type": "standard", + "enabled": "false", "label": "value45"}, {"id": 46, - "type": "menuitem", - "sensitive": "true", + "type": "standard", + "enabled": "true", "label": "value46"}, {"id": 47, - "type": "menuitem", - "sensitive": "false", + "type": "standard", + "enabled": "false", "label": "value47"}, {"id": 48, - "type": "menuitem", - "sensitive": "true", + "type": "standard", + "enabled": "true", "label": "value48"}, {"id": 49, - "type": "menuitem", + "type": "standard", "visible": "false", - "sensitive": "false", + "enabled": "false", "label": "value49"} ] }, - {"id": 3, "type": "menuitem", + {"id": 3, "type": "standard", "label": "a super long label that is really of unreasonable length but we should make sure it makes it across the bus", "not.a.value": "A useless value", "submenu": [ - {"id": 10, "type": "menuitem", + {"id": 10, "type": "standard", "label": "value10"}, - {"id": 11, "type": "menuitem", + {"id": 11, "type": "standard", "label": "value11"}, - {"id": 12, "type": "menuitem", + {"id": 12, "type": "standard", "label": "value12"}, - {"id": 13, "type": "menuitem", + {"id": 13, "type": "standard", "label": "value13"}, - {"id": 14, "type": "menuitem", + {"id": 14, "type": "standard", "label": "value14"}, - {"id": 15, "type": "menuitem", + {"id": 15, "type": "standard", "label": "value15"}, - {"id": 16, "type": "menuitem", + {"id": 16, "type": "standard", "label": "value16"}, - {"id": 17, "type": "menuitem", + {"id": 17, "type": "standard", "label": "value17"}, - {"id": 18, "type": "menuitem", + {"id": 18, "type": "standard", "label": "value18"}, - {"id": 19, "type": "menuitem", + {"id": 19, "type": "standard", "label": "value19"} ] }, - {"id": 4, "type": "menuitem", + {"id": 4, "type": "standard", "label": "value2", "submenu": [ - {"id": 5, "type": "menuitem", + {"id": 5, "type": "standard", "label": "value5", "submenu": [ - {"id": 10, "type": "menuitem", + {"id": 10, "type": "standard", "label": "value10"}, - {"id": 11, "type": "menuitem", + {"id": 11, "type": "standard", "label": "value11"}, - {"id": 12, "type": "menuitem", + {"id": 12, "type": "standard", "label": "value12"}, - {"id": 13, "type": "menuitem", + {"id": 13, "type": "standard", "label": "value13"}, - {"id": 14, "type": "menuitem", + {"id": 14, "type": "standard", "label": "value14"}, - {"id": 15, "type": "menuitem", + {"id": 15, "type": "standard", "label": "value15"}, - {"id": 16, "type": "menuitem", + {"id": 16, "type": "standard", "label": "value16"}, - {"id": 17, "type": "menuitem", + {"id": 17, "type": "standard", "label": "value17"}, - {"id": 18, "type": "menuitem", + {"id": 18, "type": "standard", "label": "value18"}, - {"id": 19, "type": "menuitem", + {"id": 19, "type": "standard", "label": "value19"} ] }, - {"id": 6, "type": "menuitem", + {"id": 6, "type": "standard", "label": "value6", "submenu": [ - {"id": 20, "type": "menuitem", + {"id": 20, "type": "standard", "label": "value20"}, - {"id": 21, "type": "menuitem", + {"id": 21, "type": "standard", "label": "value21"}, - {"id": 22, "type": "menuitem", + {"id": 22, "type": "standard", "label": "value22"}, - {"id": 23, "type": "menuitem", + {"id": 23, "type": "standard", "label": "value23"}, - {"id": 24, "type": "menuitem", + {"id": 24, "type": "standard", "label": "value24"}, - {"id": 25, "type": "menuitem", + {"id": 25, "type": "standard", "label": "value25"}, - {"id": 26, "type": "menuitem", + {"id": 26, "type": "standard", "label": "value26"}, - {"id": 27, "type": "menuitem", + {"id": 27, "type": "standard", "label": "value27"}, - {"id": 28, "type": "menuitem", + {"id": 28, "type": "standard", "label": "value28"}, - {"id": 29, "type": "menuitem", + {"id": 29, "type": "standard", "label": "value29"} ] }, - {"id": 7, "type": "menuitem", + {"id": 7, "type": "standard", "label": "value7", "submenu": [ - {"id": 30, "type": "menuitem", + {"id": 30, "type": "standard", "label": "value30"}, - {"id": 31, "type": "menuitem", + {"id": 31, "type": "standard", "label": "value31"}, - {"id": 32, "type": "menuitem", + {"id": 32, "type": "standard", "label": "value32"}, - {"id": 33, "type": "menuitem", + {"id": 33, "type": "standard", "label": "value33"}, - {"id": 34, "type": "menuitem", + {"id": 34, "type": "standard", "label": "value34"}, - {"id": 35, "type": "menuitem", + {"id": 35, "type": "standard", "label": "value35"}, - {"id": 36, "type": "menuitem", + {"id": 36, "type": "standard", "label": "value36"}, - {"id": 37, "type": "menuitem", + {"id": 37, "type": "standard", "label": "value37"}, - {"id": 38, "type": "menuitem", + {"id": 38, "type": "standard", "label": "value38"}, - {"id": 39, "type": "menuitem", + {"id": 39, "type": "standard", "label": "value39"} ] }, ] }, - {"id": 8, "type": "menuitem", + {"id": 8, "type": "standard", "label": "value1", "submenu": [ {"id": 80, - "type": "menuitem", - "icon": "face-angel", + "type": "standard", + "icon-name": "face-angel", "label": "angel"}, {"id": 81, - "type": "menuitem", - "icon": "face-angry", + "type": "standard", + "icon-name": "face-angry", "label": "angry"}, {"id": 82, - "type": "menuitem", - "icon": "face-cool", + "type": "standard", + "icon-name": "face-cool", "label": "cool"}, {"id": 83, - "type":"menuitem", - "icon": "face-devilish", + "type":"standard", + "icon-name": "face-devilish", "label": "devilish"}, {"id": 84, - "type": "menuitem", - "icon": "face-embarrassed", + "type": "standard", + "icon-name": "face-embarrassed", "label": "embarrassed"}, {"id": 85, - "type": "menuitem", - "icon": "face-kiss", + "type": "standard", + "icon-name": "face-kiss", "label": "kiss"}, {"id": 86, - "type": "menuitem", - "icon": "face-laugh", + "type": "standard", + "icon-name": "face-laugh", "label": "laugh"}, {"id": 87, - "type": "menuitem", - "icon": "face-monkey", + "type": "standard", + "icon-name": "face-monkey", "label": "monkey"}, {"id": 88, - "type": "menuitem", - "icon": "face-sad", + "type": "standard", + "icon-name": "face-sad", "label": "sad"}, {"id": 89, - "type": "menuitem", - "icon": "face-sick", + "type": "standard", + "icon-name": "face-sick", "label": "sick"} ] }, - {"id": 9, "type": "menuitem", + {"id": 9, "type": "standard", "label": "value1", "submenu": [ {"id": 90, - "type": "menuitem", + "type": "standard", "icon-data": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPUlEQVR4nGJgoBAAAAAA///Ch1gW BzK0LQ5iaGNgYGDBpQgAAAD//8KpeY4/Q9+DCV7/H/S4/p8byDABlyEAAAAA///CqnluAMOEx5O8 @@ -266,7 +266,7 @@ Bi8YEIEIBwAAAAD//8JmAAcDA4MAlEYGPxgYGD5AaTgAAAAA//8DAD6xjTP5Y+A7AAAAAElFTkSu QmCC", "label": "up"}, {"id": 91, - "type": "menuitem", + "type": "standard", "icon-data": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACl0lEQVR4nGJgoBAAAAAA//9ixCLG sSWS4bs0B1QWip/+YGDwWcLAycDA8ANZMQAAAP//YsFigIA0JwODdvIsBob/fxgY/vxk+P/7OwPD @@ -283,8 +283,8 @@ AwODR18kw4UJ0QyX8WkGAAAA///ClpkYoAolGBgYFKBqHjAwMDxnYGD4ha4QAAAA///CZQDMEG4o +ys2zQwMDAwAAAAA//8DAAF5nhyE7tENAAAAAElFTkSuQmCC", "label": "down"}, {"id": 92, - "type": "menuitem", - "icon": "up", + "type": "standard", + "icon-name": "up", "icon-data": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACl0lEQVR4nGJgoBAAAAAA//9ixCLG sSWS4bs0B1QWip/+YGDwWcLAycDA8ANZMQAAAP//YsFigIA0JwODdvIsBob/fxgY/vxk+P/7OwPD @@ -301,8 +301,8 @@ AwODR18kw4UJ0QyX8WkGAAAA///ClpkYoAolGBgYFKBqHjAwMDxnYGD4ha4QAAAA///CZQDMEG4o +ys2zQwMDAwAAAAA//8DAAF5nhyE7tENAAAAAElFTkSuQmCC", "label": "up"}, {"id": 93, - "type": "menuitem", - "icon": "down", + "type": "standard", + "icon-name": "down", "icon-data": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPUlEQVR4nGJgoBAAAAAA///Ch1gW BzK0LQ5iaGNgYGDBpQgAAAD//8KpeY4/Q9+DCV7/H/S4/p8byDABlyEAAAAA///CqnluAMOEx5O8 @@ -319,7 +319,7 @@ QmCC", "label": "down"} ] }, - {"id": 1, "type": "menuitem", + {"id": 1, "type": "standard", "label": "value1", "submenu": [ {"id": 30, @@ -329,42 +329,42 @@ QmCC", {"id": 31, "label": "No check (checked)", "toggle-type": "none", - "toggle-checked": "checked" + "toggle-state": 1 }, {"id": 32, "label": "No check (????)", "toggle-type": "none", - "toggle-checked": "indeterminate" + "toggle-state": -1 }, {"id": 33, "label": "Check (empty)", "toggle-type": "checkmark", - "toggle-checked": "unchecked" + "toggle-state": 0 }, {"id": 34, "label": "Check (checked)", "toggle-type": "checkmark", - "toggle-checked": "checked" + "toggle-state": 1 }, {"id": 35, "label": "Check (?????)", "toggle-type": "checkmark", - "toggle-checked": "indeterminate" + "toggle-state": -1 }, {"id": 36, "label": "Radio (empty)", "toggle-type": "radio", - "toggle-checked": "unchecked" + "toggle-state": 0 }, {"id": 37, "label": "Radio (checked)", "toggle-type": "radio", - "toggle-checked": "checked" + "toggle-state": 1 }, {"id": 38, "label": "Radio (?????)", "toggle-type": "radio", - "toggle-checked": "indeterminate" + "toggle-state": -1 } ] }, -- cgit v1.2.3 From dce7fafe92e88badb2d43ac8bca80f176073767a Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Feb 2010 10:33:58 -0800 Subject: Fix types of signal params --- libdbusmenu-glib/client.c | 6 +++--- libdbusmenu-glib/server-marshal.list | 2 +- libdbusmenu-glib/server.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 66984e2..9eb684f 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -498,15 +498,15 @@ build_proxies (DbusmenuClient * client) priv->dbusproxy = NULL; } - dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__INT_UINT, G_TYPE_NONE, G_TYPE_INT, G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_add_signal(priv->menuproxy, "LayoutUpdated", G_TYPE_INT, G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__UINT_INT, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID); + dbus_g_proxy_add_signal(priv->menuproxy, "LayoutUpdated", G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID); dbus_g_proxy_connect_signal(priv->menuproxy, "LayoutUpdated", G_CALLBACK(layout_update), client, NULL); dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__UINT_STRING_POINTER, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_add_signal(priv->menuproxy, "ItemPropertyUpdated", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_connect_signal(priv->menuproxy, "ItemPropertyUpdated", G_CALLBACK(id_prop_update), client, NULL); - dbus_g_proxy_add_signal(priv->menuproxy, "ItemUpdated", G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_add_signal(priv->menuproxy, "ItemUpdated", G_TYPE_INT, G_TYPE_INVALID); dbus_g_proxy_connect_signal(priv->menuproxy, "ItemUpdated", G_CALLBACK(id_update), client, NULL); update_layout(client); diff --git a/libdbusmenu-glib/server-marshal.list b/libdbusmenu-glib/server-marshal.list index 044c64d..c5ec641 100644 --- a/libdbusmenu-glib/server-marshal.list +++ b/libdbusmenu-glib/server-marshal.list @@ -1,2 +1,2 @@ VOID: UINT, STRING, POINTER -VOID: INT, UINT +VOID: UINT, INT diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 6e7ee7d..b6eb7aa 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -162,8 +162,8 @@ dbusmenu_server_class_init (DbusmenuServerClass *class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(DbusmenuServerClass, layout_updated), NULL, NULL, - _dbusmenu_server_marshal_VOID__INT_UINT, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_UINT); + _dbusmenu_server_marshal_VOID__UINT_INT, + G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_INT); g_object_class_install_property (object_class, PROP_DBUS_OBJECT, -- cgit v1.2.3 From 20416aa05b0ddcf0a6077ec6049a39c1cefea7b9 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Feb 2010 17:24:07 -0800 Subject: Add timestamp to activate prototype. --- libdbusmenu-glib/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 9eb684f..dbe7b3c 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -627,7 +627,7 @@ menuitem_call_cb (DBusGProxy * proxy, GError * error, gpointer userdata) } static void -menuitem_activate (DbusmenuMenuitem * mi, DbusmenuClient * client) +menuitem_activate (DbusmenuMenuitem * mi, uint timestamp, DbusmenuClient * client) { DbusmenuClientPrivate * priv = DBUSMENU_CLIENT_GET_PRIVATE(client); GValue value = {0}; -- cgit v1.2.3 From 775a2e8e5e9af958455a55b1278eff526924db1a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 17:24:21 -0800 Subject: Changing the event to a subclassable handle event function. Then letting the default be used as well. --- libdbusmenu-glib/menuitem.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index 238b7d9..af6f54d 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -112,10 +112,11 @@ struct _DbusmenuMenuitemClass /* Virtual functions */ void (*buildxml) (GPtrArray * stringarray); + void (*handle_event) (gchar * name, GValue * value, guint timestamp); void (*reserved1) (void); void (*reserved2) (void); - void (*reserved3) (void); + /* void (*reserved3) (void); */ /* void (*reserved4) (void); -- realized, realloc when bumping lib version */ }; @@ -153,7 +154,7 @@ void dbusmenu_menuitem_set_root (DbusmenuMenuitem * mi, gboolean root); gboolean dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi); void dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem * mi, gpointer data), gpointer data); -void dbusmenu_menuitem_activate (DbusmenuMenuitem * mi, guint timestamp); +void dbusmenu_menuitem_handle_event (DbusmenuMenuitem * mi, gchar * name, GValue * value, guint timestamp); /** SECTION:menuitem -- cgit v1.2.3 From 48d1f0b6902b4833460c6562603d6a8c9555aad5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 17:31:17 -0800 Subject: Creating a handle event function and a wrapper for it. --- libdbusmenu-glib/menuitem.c | 23 +++++++++++++++++++---- libdbusmenu-glib/menuitem.h | 7 +++++-- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 06d6200..bc2e748 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -1116,21 +1116,36 @@ dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem } /** - dbusmenu_menuitem_activate: + dbusmenu_menuitem_handle_event: @mi: The #DbusmenuMenuitem to send the signal on. + @name: The name of the signal + @value: A value that could be set for the event @timestamp: The timestamp of when the event happened + This function is called to create an event. It is likely + to be overrided by subclasses. The default menu item + will respond to the activate signal and do: + Emits the #DbusmenuMenuitem::item-activate signal on this menu item. Called by server objects when they get the appropriate DBus signals from the client. + + If you subclass this function you should really think + about calling the parent function unless you have a good + reason not to. */ void -dbusmenu_menuitem_activate (DbusmenuMenuitem * mi, guint timestamp) +dbusmenu_menuitem_handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp) { g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); #ifdef MASSIVEDEBUGGING - g_debug("Menuitem %d (%s) activated", ID(mi), LABEL(mi)); + g_debug("Menuitem %d (%s) is getting event '%s'", ID(mi), LABEL(mi), name); #endif - g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, timestamp, TRUE); + DbusmenuMenuitemClass * class = DBUSMENU_MENUITEM_GET_CLASS(mi); + + if (class->handle_event != NULL) { + return class->handle_event(mi, name, value, timestamp); + } + //g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, timestamp, TRUE); return; } diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index af6f54d..b7ebc4d 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -92,6 +92,9 @@ struct _DbusmenuMenuitem @realized: Slot for #DbusmenuMenuitem::realized. @buildxml: Virtual function that appends the strings required to represent this menu item in the menu XML file. + @handle_event: This function is to override how events are handled + by subclasses. Look at #dbusmenu_menuitem_handle_event for + lots of good information. @reserved1: Reserved for future use. @reserved2: Reserved for future use. @reserved3: Reserved for future use. @@ -112,7 +115,7 @@ struct _DbusmenuMenuitemClass /* Virtual functions */ void (*buildxml) (GPtrArray * stringarray); - void (*handle_event) (gchar * name, GValue * value, guint timestamp); + void (*handle_event) (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp); void (*reserved1) (void); void (*reserved2) (void); @@ -154,7 +157,7 @@ void dbusmenu_menuitem_set_root (DbusmenuMenuitem * mi, gboolean root); gboolean dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi); void dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem * mi, gpointer data), gpointer data); -void dbusmenu_menuitem_handle_event (DbusmenuMenuitem * mi, gchar * name, GValue * value, guint timestamp); +void dbusmenu_menuitem_handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp); /** SECTION:menuitem -- cgit v1.2.3 From eed846366d326c8f42ecb323abdb0794fae6f85e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 17:36:50 -0800 Subject: Creating the local default for event handling --- libdbusmenu-glib/menuitem.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index bc2e748..90abb9d 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -92,6 +92,7 @@ static void set_property (GObject * obj, guint id, const GValue * value, GParamS static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec); static void g_value_transform_STRING_BOOLEAN (const GValue * in, GValue * out); static void g_value_transform_STRING_INT (const GValue * in, GValue * out); +static void handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp); /* GObject stuff */ G_DEFINE_TYPE (DbusmenuMenuitem, dbusmenu_menuitem, G_TYPE_OBJECT); @@ -108,6 +109,8 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) object_class->set_property = set_property; object_class->get_property = get_property; + klass->handle_event = handle_event; + /** DbusmenuMenuitem::property-changed: @arg0: The #DbusmenuMenuitem object. @@ -342,6 +345,16 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) return; } +/* Handles the activate event if it is sent. */ +static void +handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp) +{ + if (g_strcmp0(name, "clicked") == 0) { + g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, timestamp, TRUE); + } + + return; +} /* Public interface */ @@ -1146,6 +1159,5 @@ dbusmenu_menuitem_handle_event (DbusmenuMenuitem * mi, const gchar * name, const if (class->handle_event != NULL) { return class->handle_event(mi, name, value, timestamp); } - //g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, timestamp, TRUE); return; } -- cgit v1.2.3 From 0a22ccfb87ec1c1f7bc1f543f8af3ef333c22b2c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 17:38:11 -0800 Subject: Now the server gets the event --- libdbusmenu-glib/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index afcbfd3..995e375 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -553,7 +553,7 @@ _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GVal return FALSE; } - dbusmenu_menuitem_activate(mi, timestamp); + dbusmenu_menuitem_handle_event(mi, eventid, data, timestamp); return TRUE; } -- cgit v1.2.3 From 9b7020779b1b334d696e6d165d1d61f95c12fc0a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 18:00:36 -0800 Subject: Adding in the client menuitem subclass --- libdbusmenu-glib/Makefile.am | 2 ++ libdbusmenu-glib/client-menuitem.c | 67 ++++++++++++++++++++++++++++++++++++++ libdbusmenu-glib/client-menuitem.h | 34 +++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 libdbusmenu-glib/client-menuitem.c create mode 100644 libdbusmenu-glib/client-menuitem.h diff --git a/libdbusmenu-glib/Makefile.am b/libdbusmenu-glib/Makefile.am index fc37019..998af50 100644 --- a/libdbusmenu-glib/Makefile.am +++ b/libdbusmenu-glib/Makefile.am @@ -27,6 +27,8 @@ libdbusmenu_glib_la_SOURCES = \ server.c \ server-marshal.h \ server-marshal.c \ + client-menuitem.h \ + client-menuitem.c \ client.h \ client.c diff --git a/libdbusmenu-glib/client-menuitem.c b/libdbusmenu-glib/client-menuitem.c new file mode 100644 index 0000000..e77461d --- /dev/null +++ b/libdbusmenu-glib/client-menuitem.c @@ -0,0 +1,67 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "client-menuitem.h" + +typedef struct _DbusmenuClientMenuitemPrivate DbusmenuClientMenuitemPrivate; + +struct _DbusmenuClientMenuitemPrivate +{ + DbusmenuClient * client; +}; + +#define DBUSMENU_CLIENT_MENUITEM_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_CLIENT_MENUITEM_TYPE, DbusmenuClientMenuitemPrivate)) + +static void dbusmenu_client_menuitem_class_init (DbusmenuClientMenuitemClass *klass); +static void dbusmenu_client_menuitem_init (DbusmenuClientMenuitem *self); +static void dbusmenu_client_menuitem_dispose (GObject *object); +static void dbusmenu_client_menuitem_finalize (GObject *object); + +G_DEFINE_TYPE (DbusmenuClientMenuitem, dbusmenu_client_menuitem, DBUSMENU_TYPE_MENUITEM); + +static void +dbusmenu_client_menuitem_class_init (DbusmenuClientMenuitemClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (DbusmenuClientMenuitemPrivate)); + + object_class->dispose = dbusmenu_client_menuitem_dispose; + object_class->finalize = dbusmenu_client_menuitem_finalize; + + return; +} + +static void +dbusmenu_client_menuitem_init (DbusmenuClientMenuitem *self) +{ + + return; +} + +static void +dbusmenu_client_menuitem_dispose (GObject *object) +{ + + G_OBJECT_CLASS (dbusmenu_client_menuitem_parent_class)->dispose (object); + return; +} + +static void +dbusmenu_client_menuitem_finalize (GObject *object) +{ + + G_OBJECT_CLASS (dbusmenu_client_menuitem_parent_class)->finalize (object); + return; +} + +DbusmenuClientMenuitem * +dbusmenu_client_menuitem_new (gint id, DbusmenuClient * client) +{ + DbusmenuClientMenuitem * mi = g_object_new(DBUSMENU_CLIENT_MENUITEM_TYPE, "id", id, NULL); + DbusmenuClientMenuitemPrivate * priv = DBUSMENU_CLIENT_MENUITEM_GET_PRIVATE(mi); + priv->client = client; + return mi; +} diff --git a/libdbusmenu-glib/client-menuitem.h b/libdbusmenu-glib/client-menuitem.h new file mode 100644 index 0000000..a25d209 --- /dev/null +++ b/libdbusmenu-glib/client-menuitem.h @@ -0,0 +1,34 @@ +#ifndef __DBUSMENU_CLIENT_MENUITEM_H__ +#define __DBUSMENU_CLIENT_MENUITEM_H__ + +#include +#include +#include "menuitem.h" +#include "client.h" + +G_BEGIN_DECLS + +#define DBUSMENU_CLIENT_MENUITEM_TYPE (dbusmenu_client_menuitem_get_type ()) +#define DBUSMENU_CLIENT_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DBUSMENU_CLIENT_MENUITEM_TYPE, DbusmenuClientMenuitem)) +#define DBUSMENU_CLIENT_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DBUSMENU_CLIENT_MENUITEM_TYPE, DbusmenuClientMenuitemClass)) +#define DBUSMENU_IS_CLIENT_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DBUSMENU_CLIENT_MENUITEM_TYPE)) +#define DBUSMENU_IS_CLIENT_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DBUSMENU_CLIENT_MENUITEM_TYPE)) +#define DBUSMENU_CLIENT_MENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DBUSMENU_CLIENT_MENUITEM_TYPE, DbusmenuClientMenuitemClass)) + +typedef struct _DbusmenuClientMenuitem DbusmenuClientMenuitem; +typedef struct _DbusmenuClientMenuitemClass DbusmenuClientMenuitemClass; + +struct _DbusmenuClientMenuitemClass { + DbusmenuMenuitemClass parent_class; +}; + +struct _DbusmenuClientMenuitem { + DbusmenuMenuitem parent; +}; + +GType dbusmenu_client_menuitem_get_type (void); +DbusmenuClientMenuitem * dbusmenu_client_menuitem_new (gint id, DbusmenuClient * client); + +G_END_DECLS + +#endif -- cgit v1.2.3 From 167062acbd9cddb34596328404fe648f68cc6999 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 18:09:57 -0800 Subject: Bringing through the handling of events through the local subclass of the item. --- libdbusmenu-glib/client-menuitem.c | 12 ++++++++++++ libdbusmenu-glib/client.c | 13 +++++-------- libdbusmenu-glib/client.h | 5 +++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/libdbusmenu-glib/client-menuitem.c b/libdbusmenu-glib/client-menuitem.c index e77461d..cd4fdad 100644 --- a/libdbusmenu-glib/client-menuitem.c +++ b/libdbusmenu-glib/client-menuitem.c @@ -18,6 +18,7 @@ static void dbusmenu_client_menuitem_class_init (DbusmenuClientMenuitemClass *kl static void dbusmenu_client_menuitem_init (DbusmenuClientMenuitem *self); static void dbusmenu_client_menuitem_dispose (GObject *object); static void dbusmenu_client_menuitem_finalize (GObject *object); +static void handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp); G_DEFINE_TYPE (DbusmenuClientMenuitem, dbusmenu_client_menuitem, DBUSMENU_TYPE_MENUITEM); @@ -31,6 +32,9 @@ dbusmenu_client_menuitem_class_init (DbusmenuClientMenuitemClass *klass) object_class->dispose = dbusmenu_client_menuitem_dispose; object_class->finalize = dbusmenu_client_menuitem_finalize; + DbusmenuMenuitemClass * mclass = DBUSMENU_MENUITEM_CLASS(klass); + mclass->handle_event = handle_event; + return; } @@ -65,3 +69,11 @@ dbusmenu_client_menuitem_new (gint id, DbusmenuClient * client) priv->client = client; return mi; } + +static void +handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp) +{ + DbusmenuClientMenuitemPrivate * priv = DBUSMENU_CLIENT_MENUITEM_GET_PRIVATE(mi); + dbusmenu_client_send_event(priv->client, dbusmenu_menuitem_get_id(mi), name, value, timestamp); + return; +} diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 720c8e2..f5ebbd1 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -35,6 +35,7 @@ License version 3 and version 2.1 along with this program. If not, see #include "client.h" #include "menuitem.h" +#include "client-menuitem.h" #include "dbusmenu-client.h" #include "server-marshal.h" @@ -626,14 +627,11 @@ menuitem_call_cb (DBusGProxy * proxy, GError * error, gpointer userdata) return; } -static void -menuitem_activate (DbusmenuMenuitem * mi, DbusmenuClient * client) +void +dbusmenu_client_send_event (DbusmenuClient * client, gint id, const gchar * name, const GValue * value, guint timestamp) { DbusmenuClientPrivate * priv = DBUSMENU_CLIENT_GET_PRIVATE(client); - GValue value = {0}; - g_value_init(&value, G_TYPE_INT); - g_value_set_int(&value, 0); - org_ayatana_dbusmenu_event_async (priv->menuproxy, dbusmenu_menuitem_get_id(mi), "clicked", &value, 0, menuitem_call_cb, mi); + org_ayatana_dbusmenu_event_async (priv->menuproxy, id, name, value, timestamp, menuitem_call_cb, GINT_TO_POINTER(id)); return; } @@ -661,11 +659,10 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it } /* Build a new item */ - item = dbusmenu_menuitem_new_with_id(id); + item = DBUSMENU_MENUITEM(dbusmenu_client_menuitem_new(id, client)); if (parent == NULL) { dbusmenu_menuitem_set_root(item, TRUE); } - g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(menuitem_activate), client); /* Get the properties queued up for this item */ /* Not happy about this, but I need these :( */ diff --git a/libdbusmenu-glib/client.h b/libdbusmenu-glib/client.h index b42bc83..1c92e92 100644 --- a/libdbusmenu-glib/client.h +++ b/libdbusmenu-glib/client.h @@ -104,6 +104,11 @@ DbusmenuMenuitem * dbusmenu_client_get_root (DbusmenuClient * client) gboolean dbusmenu_client_add_type_handler (DbusmenuClient * client, const gchar * type, DbusmenuClientTypeHandler newfunc); +void dbusmenu_client_send_event (DbusmenuClient * client, + gint id, + const gchar * name, + const GValue * value, + guint timestamp); /** SECTION:client -- cgit v1.2.3 From 861a7f99bd21c5c51c52f3079c36dbab38d28a53 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 18:11:22 -0800 Subject: Making a clicked in the gtk side of things. --- libdbusmenu-gtk/client.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 20e5523..ae6297e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -109,7 +109,10 @@ static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; static gboolean menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) { - dbusmenu_menuitem_activate(mi, gtk_get_current_event_time()); + GValue value = {0}; + g_value_init(&value, G_TYPE_INT); + g_value_set_int(&value, 0); + dbusmenu_menuitem_handle_event(mi, "clicked", &value, gtk_get_current_event_time()); return TRUE; } -- cgit v1.2.3 From 3c326978d937a03354b470b7b2ffd4dbd471c50c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 3 Feb 2010 18:45:12 -0800 Subject: Adding in LGPL 2/3 headers --- libdbusmenu-glib/client-menuitem.c | 27 +++++++++++++++++++++++++++ libdbusmenu-glib/client-menuitem.h | 27 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/libdbusmenu-glib/client-menuitem.c b/libdbusmenu-glib/client-menuitem.c index cd4fdad..5d16a66 100644 --- a/libdbusmenu-glib/client-menuitem.c +++ b/libdbusmenu-glib/client-menuitem.c @@ -1,3 +1,30 @@ +/* +A small subclass of the menuitem for using clients. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/libdbusmenu-glib/client-menuitem.h b/libdbusmenu-glib/client-menuitem.h index a25d209..ef61213 100644 --- a/libdbusmenu-glib/client-menuitem.h +++ b/libdbusmenu-glib/client-menuitem.h @@ -1,3 +1,30 @@ +/* +A small subclass of the menuitem for using clients. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + #ifndef __DBUSMENU_CLIENT_MENUITEM_H__ #define __DBUSMENU_CLIENT_MENUITEM_H__ -- cgit v1.2.3 From a5c79e6483cda97ac21ca1a609b19bf37bfe17f3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 10:43:53 -0800 Subject: Checking for NULL value in setting the toggle setting to make sure they are set before erroring. And erroring if we don't get ints --- libdbusmenu-gtk/client.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 555e8d2..0109a83 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -150,6 +150,7 @@ static void process_toggle_type (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; + if (value == NULL) return; GenericmenuitemCheckType type = GENERICMENUITEM_CHECK_TYPE_NONE; @@ -173,6 +174,7 @@ static void process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; + if (value == NULL) return; GenericmenuitemState state = GENERICMENUITEM_STATE_UNCHECKED; @@ -184,6 +186,8 @@ process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * v } else if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN) { state = GENERICMENUITEM_STATE_INDETERMINATE; } + } else { + g_warning("Toggle state changed without having an int"); } genericmenuitem_set_state(GENERICMENUITEM(gmi), state); -- cgit v1.2.3 From 82d0a5a336c8d3f5de5b8831ae31571fdeeb8160 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 10:56:49 -0800 Subject: Switching to transforming values --- libdbusmenu-gtk/client.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 0109a83..781326e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -154,14 +154,19 @@ process_toggle_type (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * va GenericmenuitemCheckType type = GENERICMENUITEM_CHECK_TYPE_NONE; - if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_STRING) { - const gchar * strval = g_value_get_string(value); + GValue strvalue = {0}; + g_value_init(&strvalue, G_TYPE_STRING); + + if (value != NULL && g_value_transform(value, &strvalue)) { + const gchar * strval = g_value_get_string(&strvalue); if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_CHECK)) { type = GENERICMENUITEM_CHECK_TYPE_CHECKBOX; } else if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_RADIO)) { type = GENERICMENUITEM_CHECK_TYPE_RADIO; } + + g_value_unset(&strvalue); } genericmenuitem_set_check_type(GENERICMENUITEM(gmi), type); @@ -174,20 +179,20 @@ static void process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; - if (value == NULL) return; GenericmenuitemState state = GENERICMENUITEM_STATE_UNCHECKED; - if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_INT) { - int val = g_value_get_int(value); + GValue intvalue = {0}; + g_value_init(&intvalue, G_TYPE_INT); + + if (value != NULL && g_value_transform(value, &intvalue)) { + int val = g_value_get_int(&intvalue); if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED) { state = GENERICMENUITEM_STATE_CHECKED; } else if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN) { state = GENERICMENUITEM_STATE_INDETERMINATE; } - } else { - g_warning("Toggle state changed without having an int"); } genericmenuitem_set_state(GENERICMENUITEM(gmi), state); -- cgit v1.2.3 From cf094c53aba8af282fb758e19741468cff9e88f9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:04:28 -0800 Subject: Switching to getting JSON values --- tests/test-gtk-label-server.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c index ae772f1..32d7a43 100644 --- a/tests/test-gtk-label-server.c +++ b/tests/test-gtk-label-server.c @@ -53,7 +53,10 @@ set_props (DbusmenuMenuitem * mi, JsonObject * node) JsonNode * lnode = json_object_get_member(node, member); if (JSON_NODE_TYPE(lnode) != JSON_NODE_VALUE) { continue; } - dbusmenu_menuitem_property_set(mi, member, json_node_get_string(lnode)); + GValue value = {0}; + json_node_get_value(lnode, &value); + dbusmenu_menuitem_property_set_value(mi, member, &value); + g_value_unset(&value); } return; -- cgit v1.2.3 From 3ebb5c0a4f9066c4b04bdcfb55a499370ab4237b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:21:03 -0800 Subject: releasing version 0.2.1-0ubuntu2~ppa1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index ed66db2..70fc772 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,11 @@ -libdbusmenu (0.2.1-0ubuntu2~ppa1) UNRELEASED; urgency=low +libdbusmenu (0.2.1-0ubuntu2~ppa1) lucid; urgency=low * Upstream Merge * Interoperability fixes * Adding timestamps to events * Better handling of XML - -- Ted Gould Thu, 04 Feb 2010 11:19:08 -0800 + -- Ted Gould Thu, 04 Feb 2010 11:21:01 -0800 libdbusmenu (0.2.1-0ubuntu1) lucid; urgency=low -- cgit v1.2.3 From 47c2aab8d8cdcbee24f63932237657e30164e416 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Thu, 4 Feb 2010 11:22:29 -0800 Subject: Integrate dbusmenubench and GLib test app --- tools/dbusmenubench.py | 134 +++++++++++++++++++++++++++++++++++++ tools/testapp/CMakeLists.txt | 29 ++++++++ tools/testapp/main.c | 153 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100755 tools/dbusmenubench.py create mode 100644 tools/testapp/CMakeLists.txt create mode 100644 tools/testapp/main.c diff --git a/tools/dbusmenubench.py b/tools/dbusmenubench.py new file mode 100755 index 0000000..c7d3bf2 --- /dev/null +++ b/tools/dbusmenubench.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python +""" +A library to communicate a menu object set accross DBus and +track updates and maintain consistency. + +Copyright 2010 Canonical Ltd. + +Authors: + Aurélien Gâteau + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +""" +import time +import sys +from optparse import OptionParser +from xml.etree import ElementTree as ET + +import dbus + +DBUS_INTERFACE = "org.ayatana.dbusmenu" +DBUS_SERVICE = "org.dbusmenu.test" +DBUS_PATH = "/MenuBar" + + +class Chrono(object): + def __init__(self): + self._time = 0 + self.restart() + + def restart(self): + new_time = time.time() + delta = new_time - self._time + self._time = new_time + return delta + + def elapsed(self): + return time.time() - self._time + + +def dump_properties(properties, prepend=""): + for key, value in properties.items(): + print "%s- %s: %s" % (prepend, key, value) + + +def run_test_sequence(menu, dump=False): + """ + Runs the test sequence and returns a dict of method_name: seconds + """ + property_names = ["type", "label", "enabled", "icon-name"] + times = dict() + chrono = Chrono() + revision, layout = menu.GetLayout(dbus.Int32(0)) + times["GetLayout"] = chrono.elapsed() + if dump: + print "revision:", revision + print "layout:" + print layout + + # Get ids + tree = ET.fromstring(layout) + root_id = int(tree.attrib["id"]) + child_element = tree.find("menu") + assert child_element is not None + child_id = int(child_element.attrib["id"]) + + chrono.restart() + children = menu.GetChildren(dbus.Int32(root_id), property_names) + times["GetChildren"] = chrono.elapsed() + if dump: + print "children:" + for child in children: + id, properties = child + print "- %d:" % id + dump_properties(properties, prepend=" ") + + chrono.restart() + properties = menu.GetProperties(dbus.Int32(child_id), property_names) + times["GetProperties"] = chrono.elapsed() + if dump: + print "properties:" + dump_properties(properties) + + return times + + +def main(): + parser = OptionParser(usage = "%prog [options]") + + parser.add_option("-c", "--count", dest="count", type=int, default=1, + help="repeat calls COUNT times", metavar="COUNT") + parser.add_option("-d", "--dump", dest="dump", action="store_true", default=False, + help="dump call output to stdout") + + (options, args) = parser.parse_args() + + bus = dbus.SessionBus() + proxy = bus.get_object(DBUS_SERVICE, DBUS_PATH) + menu = dbus.Interface(proxy, dbus_interface=DBUS_INTERFACE) + + if options.dump: + run_test_sequence(menu, dump=True) + return + + cumulated_timings = dict() + for x in range(options.count): + timings = run_test_sequence(menu) + for name, timing in timings.items(): + cumulated_timings[name] = cumulated_timings.get(name, 0) + timing + + for name, timing in cumulated_timings.items(): + print name, timing / options.count + + return 0 + + +if __name__=="__main__": + sys.exit(main()) +# vi: ts=4 sw=4 et tw=0 diff --git a/tools/testapp/CMakeLists.txt b/tools/testapp/CMakeLists.txt new file mode 100644 index 0000000..b848e50 --- /dev/null +++ b/tools/testapp/CMakeLists.txt @@ -0,0 +1,29 @@ +find_package(PkgConfig REQUIRED) + +pkg_check_modules(DBUSMENUGLIB REQUIRED dbusmenu-glib) +pkg_check_modules(GLIB REQUIRED glib-2.0) +pkg_check_modules(JSONGLIB REQUIRED json-glib-1.0) + +set(glibapp_SRCS + main.c + ) + +include_directories( + ${DBUSMENUGLIB_INCLUDE_DIRS} + ${GLIB_INCLUDE_DIRS} + ${JSONGLIB_INCLUDE_DIRS} + ) + +link_directories( + ${DBUSMENUGLIB_LIBRARY_DIRS} + ${GLIB_LIBRARY_DIRS} + ${JSONGLIB_LIBRARY_DIRS} + ) + +add_executable(dbusmenubench-glibapp ${glibapp_SRCS}) + +target_link_libraries(dbusmenubench-glibapp + ${DBUSMENUGLIB_LIBRARIES} + ${GLIB_LIBARIES} + ${JSONGLIB_LIBRARIES} + ) diff --git a/tools/testapp/main.c b/tools/testapp/main.c new file mode 100644 index 0000000..f489407 --- /dev/null +++ b/tools/testapp/main.c @@ -0,0 +1,153 @@ +/* +A library to communicate a menu object set accross DBus and +track updates and maintain consistency. + +Copyright 2010 Canonical Ltd. + +Authors: + Aurélien Gâteau + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ +#include + +#include +#include + +#include + +#include +#include + +#define USAGE "dbusmenubench-glibapp " + +static void +set_props (DbusmenuMenuitem * mi, JsonObject * node) +{ + if (node == NULL) return; + + GList * members = NULL; + for (members = json_object_get_members(node); members != NULL; members = g_list_next(members)) { + const gchar * member = members->data; + + if (!g_strcmp0(member, "id")) { continue; } + if (!g_strcmp0(member, "submenu")) { continue; } + + JsonNode * lnode = json_object_get_member(node, member); + if (JSON_NODE_TYPE(lnode) != JSON_NODE_VALUE) { continue; } + + dbusmenu_menuitem_property_set(mi, member, json_node_get_string(lnode)); + } + + return; +} + +static DbusmenuMenuitem * +layout2menuitem (JsonNode * inlayout) +{ + if (inlayout == NULL) return NULL; + if (JSON_NODE_TYPE(inlayout) != JSON_NODE_OBJECT) return NULL; + + JsonObject * layout = json_node_get_object(inlayout); + + DbusmenuMenuitem * local = NULL; + if (json_object_has_member(layout, "id")) { + JsonNode * node = json_object_get_member(layout, "id"); + g_return_val_if_fail(JSON_NODE_TYPE(node) == JSON_NODE_VALUE, NULL); + local = dbusmenu_menuitem_new_with_id(json_node_get_int(node)); + } else { + local = dbusmenu_menuitem_new(); + } + + set_props(local, layout); + + if (json_object_has_member(layout, "submenu")) { + JsonNode * node = json_object_get_member(layout, "submenu"); + g_return_val_if_fail(JSON_NODE_TYPE(node) == JSON_NODE_ARRAY, local); + JsonArray * array = json_node_get_array(node); + guint count; + for (count = 0; count < json_array_get_length(array); count++) { + DbusmenuMenuitem * child = layout2menuitem(json_array_get_element(array, count)); + if (child != NULL) { + dbusmenu_menuitem_child_append(local, child); + } + } + } + + /* g_debug("Layout to menu return: 0x%X", (unsigned int)local); */ + return local; +} + +void init_menu(DbusmenuMenuitem *root, const char *filename) +{ + JsonParser * parser = json_parser_new(); + GError * error = NULL; + if (!json_parser_load_from_file(parser, filename, &error)) { + g_debug("Failed parsing file %s because: %s", filename, error->message); + return; + } + JsonNode * root_node = json_parser_get_root(parser); + if (JSON_NODE_TYPE(root_node) != JSON_NODE_ARRAY) { + g_debug("Root node is not an array, fail. It's an: %s", json_node_type_name(root_node)); + return; + } + + JsonArray * root_array = json_node_get_array(root_node); + int pos; + int count = json_array_get_length(root_array); + for (pos=0; pos < count; ++pos) { + DbusmenuMenuitem *child = layout2menuitem(json_array_get_element(root_array, pos)); + dbusmenu_menuitem_child_append(root, child); + } +} + +int main (int argc, char ** argv) +{ + g_type_init(); + + if (argc != 2) { + g_warning(USAGE); + return 1; + } + const char *filename = argv[1]; + + GError * error = NULL; + DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + DBusGProxy * bus_proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + guint nameret = 0; + + if (!org_freedesktop_DBus_request_name(bus_proxy, "org.dbusmenu.test", 0, &nameret, &error)) { + g_error("Unable to call to request name"); + return 1; + } + + if (nameret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + g_error("Unable to get name"); + return 1; + } + + DbusmenuServer *server = dbusmenu_server_new("/MenuBar"); + DbusmenuMenuitem *root = dbusmenu_menuitem_new_with_id(0); + init_menu(root, filename); + dbusmenu_server_set_root(server, root); + + g_main_loop_run(g_main_loop_new(NULL, FALSE)); + + return 0; +} -- cgit v1.2.3 From 37676d35a5ecb78fe1a830c0fa8fd1e66f9610cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:27:23 -0800 Subject: Install dbusmenu-bench --- tools/Makefile.am | 2 +- tools/dbusmenu-bench | 134 +++++++++++++++++++++++++++++++++++++++++++++++++ tools/dbusmenubench.py | 134 ------------------------------------------------- 3 files changed, 135 insertions(+), 135 deletions(-) create mode 100755 tools/dbusmenu-bench delete mode 100755 tools/dbusmenubench.py diff --git a/tools/Makefile.am b/tools/Makefile.am index 415050f..c2790c7 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,5 +1,5 @@ -libexec_PROGRAMS = dbusmenu-dumper +libexec_PROGRAMS = dbusmenu-dumper dbusmenu-bench dbusmenu_dumper_SOURCES = \ dbusmenu-dumper.c diff --git a/tools/dbusmenu-bench b/tools/dbusmenu-bench new file mode 100755 index 0000000..c7d3bf2 --- /dev/null +++ b/tools/dbusmenu-bench @@ -0,0 +1,134 @@ +#!/usr/bin/env python +""" +A library to communicate a menu object set accross DBus and +track updates and maintain consistency. + +Copyright 2010 Canonical Ltd. + +Authors: + Aurélien Gâteau + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +""" +import time +import sys +from optparse import OptionParser +from xml.etree import ElementTree as ET + +import dbus + +DBUS_INTERFACE = "org.ayatana.dbusmenu" +DBUS_SERVICE = "org.dbusmenu.test" +DBUS_PATH = "/MenuBar" + + +class Chrono(object): + def __init__(self): + self._time = 0 + self.restart() + + def restart(self): + new_time = time.time() + delta = new_time - self._time + self._time = new_time + return delta + + def elapsed(self): + return time.time() - self._time + + +def dump_properties(properties, prepend=""): + for key, value in properties.items(): + print "%s- %s: %s" % (prepend, key, value) + + +def run_test_sequence(menu, dump=False): + """ + Runs the test sequence and returns a dict of method_name: seconds + """ + property_names = ["type", "label", "enabled", "icon-name"] + times = dict() + chrono = Chrono() + revision, layout = menu.GetLayout(dbus.Int32(0)) + times["GetLayout"] = chrono.elapsed() + if dump: + print "revision:", revision + print "layout:" + print layout + + # Get ids + tree = ET.fromstring(layout) + root_id = int(tree.attrib["id"]) + child_element = tree.find("menu") + assert child_element is not None + child_id = int(child_element.attrib["id"]) + + chrono.restart() + children = menu.GetChildren(dbus.Int32(root_id), property_names) + times["GetChildren"] = chrono.elapsed() + if dump: + print "children:" + for child in children: + id, properties = child + print "- %d:" % id + dump_properties(properties, prepend=" ") + + chrono.restart() + properties = menu.GetProperties(dbus.Int32(child_id), property_names) + times["GetProperties"] = chrono.elapsed() + if dump: + print "properties:" + dump_properties(properties) + + return times + + +def main(): + parser = OptionParser(usage = "%prog [options]") + + parser.add_option("-c", "--count", dest="count", type=int, default=1, + help="repeat calls COUNT times", metavar="COUNT") + parser.add_option("-d", "--dump", dest="dump", action="store_true", default=False, + help="dump call output to stdout") + + (options, args) = parser.parse_args() + + bus = dbus.SessionBus() + proxy = bus.get_object(DBUS_SERVICE, DBUS_PATH) + menu = dbus.Interface(proxy, dbus_interface=DBUS_INTERFACE) + + if options.dump: + run_test_sequence(menu, dump=True) + return + + cumulated_timings = dict() + for x in range(options.count): + timings = run_test_sequence(menu) + for name, timing in timings.items(): + cumulated_timings[name] = cumulated_timings.get(name, 0) + timing + + for name, timing in cumulated_timings.items(): + print name, timing / options.count + + return 0 + + +if __name__=="__main__": + sys.exit(main()) +# vi: ts=4 sw=4 et tw=0 diff --git a/tools/dbusmenubench.py b/tools/dbusmenubench.py deleted file mode 100755 index c7d3bf2..0000000 --- a/tools/dbusmenubench.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python -""" -A library to communicate a menu object set accross DBus and -track updates and maintain consistency. - -Copyright 2010 Canonical Ltd. - -Authors: - Aurélien Gâteau - -This program is free software: you can redistribute it and/or modify it -under the terms of either or both of the following licenses: - -1) the GNU Lesser General Public License version 3, as published by the -Free Software Foundation; and/or -2) the GNU Lesser General Public License version 2.1, as published by -the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR -PURPOSE. See the applicable version of the GNU Lesser General Public -License for more details. - -You should have received a copy of both the GNU Lesser General Public -License version 3 and version 2.1 along with this program. If not, see - -""" -import time -import sys -from optparse import OptionParser -from xml.etree import ElementTree as ET - -import dbus - -DBUS_INTERFACE = "org.ayatana.dbusmenu" -DBUS_SERVICE = "org.dbusmenu.test" -DBUS_PATH = "/MenuBar" - - -class Chrono(object): - def __init__(self): - self._time = 0 - self.restart() - - def restart(self): - new_time = time.time() - delta = new_time - self._time - self._time = new_time - return delta - - def elapsed(self): - return time.time() - self._time - - -def dump_properties(properties, prepend=""): - for key, value in properties.items(): - print "%s- %s: %s" % (prepend, key, value) - - -def run_test_sequence(menu, dump=False): - """ - Runs the test sequence and returns a dict of method_name: seconds - """ - property_names = ["type", "label", "enabled", "icon-name"] - times = dict() - chrono = Chrono() - revision, layout = menu.GetLayout(dbus.Int32(0)) - times["GetLayout"] = chrono.elapsed() - if dump: - print "revision:", revision - print "layout:" - print layout - - # Get ids - tree = ET.fromstring(layout) - root_id = int(tree.attrib["id"]) - child_element = tree.find("menu") - assert child_element is not None - child_id = int(child_element.attrib["id"]) - - chrono.restart() - children = menu.GetChildren(dbus.Int32(root_id), property_names) - times["GetChildren"] = chrono.elapsed() - if dump: - print "children:" - for child in children: - id, properties = child - print "- %d:" % id - dump_properties(properties, prepend=" ") - - chrono.restart() - properties = menu.GetProperties(dbus.Int32(child_id), property_names) - times["GetProperties"] = chrono.elapsed() - if dump: - print "properties:" - dump_properties(properties) - - return times - - -def main(): - parser = OptionParser(usage = "%prog [options]") - - parser.add_option("-c", "--count", dest="count", type=int, default=1, - help="repeat calls COUNT times", metavar="COUNT") - parser.add_option("-d", "--dump", dest="dump", action="store_true", default=False, - help="dump call output to stdout") - - (options, args) = parser.parse_args() - - bus = dbus.SessionBus() - proxy = bus.get_object(DBUS_SERVICE, DBUS_PATH) - menu = dbus.Interface(proxy, dbus_interface=DBUS_INTERFACE) - - if options.dump: - run_test_sequence(menu, dump=True) - return - - cumulated_timings = dict() - for x in range(options.count): - timings = run_test_sequence(menu) - for name, timing in timings.items(): - cumulated_timings[name] = cumulated_timings.get(name, 0) + timing - - for name, timing in cumulated_timings.items(): - print name, timing / options.count - - return 0 - - -if __name__=="__main__": - sys.exit(main()) -# vi: ts=4 sw=4 et tw=0 -- cgit v1.2.3 From df8331dc89aee9384dedf90fb7f309b863ac55c5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:30:39 -0800 Subject: Actually do it right. --- tools/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/Makefile.am b/tools/Makefile.am index c2790c7..47fa58f 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,5 +1,7 @@ -libexec_PROGRAMS = dbusmenu-dumper dbusmenu-bench +libexec_PROGRAMS = dbusmenu-dumper + +libexec_SCRIPTS = dbusmenu-bench dbusmenu_dumper_SOURCES = \ dbusmenu-dumper.c @@ -12,3 +14,4 @@ dbusmenu_dumper_LDADD = \ ../libdbusmenu-glib/libdbusmenu-glib.la \ $(DBUSMENUGLIB_LIBS) +EXTRA_DIST = dbusmenu-bench -- cgit v1.2.3 From fae5fc031800b5be3ad41c8e6f32071e9abc5858 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Thu, 4 Feb 2010 11:32:02 -0800 Subject: Add encoding comment --- tools/dbusmenubench.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/dbusmenubench.py b/tools/dbusmenubench.py index c7d3bf2..7a50b2c 100755 --- a/tools/dbusmenubench.py +++ b/tools/dbusmenubench.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# encoding: utf-8 """ A library to communicate a menu object set accross DBus and track updates and maintain consistency. -- cgit v1.2.3 From bb0daba39ea35727a998dc4f8e21f36b00ca13cb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:34:58 -0800 Subject: Adding build system for the dbusmenu-testapp --- configure.ac | 1 + tools/Makefile.am | 2 ++ tools/testapp/Makefile.am | 17 +++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 tools/testapp/Makefile.am diff --git a/configure.ac b/configure.ac index b14e797..de62262 100644 --- a/configure.ac +++ b/configure.ac @@ -105,6 +105,7 @@ libdbusmenu-glib/dbusmenu-glib.pc libdbusmenu-gtk/Makefile libdbusmenu-gtk/dbusmenu-gtk.pc tools/Makefile +tools/testapp/Makefile tests/Makefile ]) diff --git a/tools/Makefile.am b/tools/Makefile.am index 47fa58f..eedfa29 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,4 +1,6 @@ +SUBDIRS = testapp + libexec_PROGRAMS = dbusmenu-dumper libexec_SCRIPTS = dbusmenu-bench diff --git a/tools/testapp/Makefile.am b/tools/testapp/Makefile.am new file mode 100644 index 0000000..a8b42dd --- /dev/null +++ b/tools/testapp/Makefile.am @@ -0,0 +1,17 @@ + +libexec_PROGRAMS = dbusmenu-testapp + +dbusmenu_testapp_SOURCES = \ + main.c + +dbusmenu_testapp_CFLAGS = \ + -I $(srcdir)/../.. \ + $(DBUSMENUTESTS_CFLAGS) \ + $(DBUSMENUGLIB_CFLAGS) \ + -Wall -Werror + +dbusmenu_testapp_LDADD = \ + $(builddir)/../../libdbusmenu-glib/libdbusmenu-glib.la \ + $(builddir)/../../libdbusmenu-gtk/libdbusmenu-gtk.la \ + $(DBUSMENUGTK_LIBS) \ + $(DBUSMENUTESTS_LIBS) -- cgit v1.2.3 From de91f6dcaf69c549c281048836568f77cdca4c89 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:35:15 -0800 Subject: Ignoring the binary --- .bzrignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.bzrignore b/.bzrignore index 06863df..d6fb87f 100644 --- a/.bzrignore +++ b/.bzrignore @@ -57,3 +57,4 @@ libdbusmenu-gtk/libdbusmenu_gtk_la-genericmenuitem.lo tests/test-glib-objects tests/test-glib-objects-test tests/test-glib-objects.xml +tools/testapp/dbusmenu-testapp -- cgit v1.2.3 From 55a6f532fbc6a360158acaa52cd9071645beedf0 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Thu, 4 Feb 2010 11:56:31 -0800 Subject: - Output min and max in addition to average - Use checkbox format --- tools/dbusmenubench.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/tools/dbusmenubench.py b/tools/dbusmenubench.py index 7a50b2c..4b58da8 100755 --- a/tools/dbusmenubench.py +++ b/tools/dbusmenubench.py @@ -27,6 +27,7 @@ You should have received a copy of both the GNU Lesser General Public License version 3 and version 2.1 along with this program. If not, see """ +import itertools import time import sys from optparse import OptionParser @@ -38,6 +39,10 @@ DBUS_INTERFACE = "org.ayatana.dbusmenu" DBUS_SERVICE = "org.dbusmenu.test" DBUS_PATH = "/MenuBar" +PROBE_GET_LAYOUT = "GetLayout" +PROBE_GET_PROPERTIES = "GetProperties" +PROBE_GET_CHILDREN = "GetChildren" +PROBES = PROBE_GET_LAYOUT, PROBE_GET_PROPERTIES, PROBE_GET_CHILDREN class Chrono(object): def __init__(self): @@ -99,6 +104,12 @@ def run_test_sequence(menu, dump=False): return times +def create_timing_dict(): + return dict(zip(PROBES, itertools.repeat(0))) + +def print_probe(prefix, name, value, timestamp): + value = int(value * 1000000) + print "%(prefix)s.%(name)s:%(value)d@%(timestamp)d" % locals() def main(): parser = OptionParser(usage = "%prog [options]") @@ -118,14 +129,25 @@ def main(): run_test_sequence(menu, dump=True) return - cumulated_timings = dict() + cumulated_timings = create_timing_dict() + min_timings = create_timing_dict() + max_timings = create_timing_dict() for x in range(options.count): timings = run_test_sequence(menu) for name, timing in timings.items(): - cumulated_timings[name] = cumulated_timings.get(name, 0) + timing + cumulated_timings[name] += timing + if min_timings[name] == 0 or min_timings[name] > timing: + min_timings[name] = timing + if max_timings[name] < timing: + max_timings[name] = timing + timestamp = int(time.time()) for name, timing in cumulated_timings.items(): - print name, timing / options.count + print_probe("average", name, timing / options.count, timestamp) + for name, timing in min_timings.items(): + print_probe("min", name, timing, timestamp) + for name, timing in max_timings.items(): + print_probe("max", name, timing, timestamp) return 0 -- cgit v1.2.3 From 2f1f7b99f47fa830f1a09825905d4cfea0832210 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 12:12:17 -0800 Subject: 0.2.2 --- configure.ac | 10 +++++----- libdbusmenu-glib/server.c | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index de62262..7a578ec 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(libdbusmenu, 0.2.1, ted@canonical.com) -AC_COPYRIGHT([Copyright 2009 Canonical]) +AC_INIT(libdbusmenu, 0.2.2, ted@canonical.com) +AC_COPYRIGHT([Copyright 2009,2010 Canonical]) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(libdbusmenu, 0.2.1) +AM_INIT_AUTOMAKE(libdbusmenu, 0.2.2) AM_MAINTAINER_MODE @@ -65,8 +65,8 @@ AC_SUBST(DBUSMENUTESTS_LIBS) # Lib versioning ########################### -LIBDBUSMENU_CURRENT=0 -LIBDBUSMENU_REVISION=11 +LIBDBUSMENU_CURRENT=1 +LIBDBUSMENU_REVISION=0 LIBDBUSMENU_AGE=0 AC_SUBST(LIBDBUSMENU_CURRENT) diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 9d84750..7d8e5c3 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -44,7 +44,7 @@ static gboolean _dbusmenu_server_get_children (DbusmenuServer * server, gint id, #include "dbusmenu-server.h" -#define DBUSMENU_VERSION_NUMBER 1 +#define DBUSMENU_VERSION_NUMBER 2 /* Privates, I'll show you mine... */ typedef struct _DbusmenuServerPrivate DbusmenuServerPrivate; -- cgit v1.2.3 From c0cf95e78a6f7ac0cbae47902f9eb3607099872b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 12:17:02 -0800 Subject: debian/libdbusmenu-tools.install: Adding a wildcard to get all of the tools in libexec --- debian/changelog | 2 ++ debian/libdbusmenu-tools.install | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 221d219..d2fcea6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ libdbusmenu (0.2.2-0ubuntu1~ppa1) UNRELEASED; urgency=low * Adding timestamps to events * Better handling of XML * Adding tools for timing dbusmenu + * debian/libdbusmenu-tools.install: Adding a wildcard to get + all of the tools in libexec -- Ted Gould Thu, 04 Feb 2010 12:14:58 -0800 diff --git a/debian/libdbusmenu-tools.install b/debian/libdbusmenu-tools.install index 9f680c7..8a66314 100644 --- a/debian/libdbusmenu-tools.install +++ b/debian/libdbusmenu-tools.install @@ -1 +1 @@ -debian/tmp/usr/lib/libdbusmenu/dbusmenu-dumper +debian/tmp/usr/lib/libdbusmenu/dbusmenu-* -- cgit v1.2.3 From 6bed6531192b318cfcf4281662491521b95b68f6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 12:18:34 -0800 Subject: releasing version 0.2.2-0ubuntu1~ppa1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index d2fcea6..4c9b347 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -libdbusmenu (0.2.2-0ubuntu1~ppa1) UNRELEASED; urgency=low +libdbusmenu (0.2.2-0ubuntu1~ppa1) lucid; urgency=low * Upstream Release 0.2.2 * Interoperability fixes @@ -8,7 +8,7 @@ libdbusmenu (0.2.2-0ubuntu1~ppa1) UNRELEASED; urgency=low * debian/libdbusmenu-tools.install: Adding a wildcard to get all of the tools in libexec - -- Ted Gould Thu, 04 Feb 2010 12:14:58 -0800 + -- Ted Gould Thu, 04 Feb 2010 12:18:26 -0800 libdbusmenu (0.2.1-0ubuntu1) lucid; urgency=low -- cgit v1.2.3