diff options
-rw-r--r-- | libdbusmenu-glib/Doxyfile | 257 | ||||
-rw-r--r-- | libdbusmenu-glib/client.c | 41 | ||||
-rw-r--r-- | libdbusmenu-glib/client.h | 4 | ||||
-rw-r--r-- | libdbusmenu-glib/dbus-menu.xml | 352 | ||||
-rw-r--r-- | libdbusmenu-glib/menuitem.c | 27 | ||||
-rw-r--r-- | libdbusmenu-glib/menuitem.h | 18 | ||||
-rw-r--r-- | libdbusmenu-glib/server-marshal.list | 2 | ||||
-rw-r--r-- | libdbusmenu-glib/server.c | 34 | ||||
-rw-r--r-- | libdbusmenu-glib/server.h | 4 | ||||
-rw-r--r-- | libdbusmenu-gtk/client.c | 34 | ||||
-rw-r--r-- | tests/test-gtk-label.json | 242 |
11 files changed, 690 insertions, 325 deletions
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/client.c b/libdbusmenu-glib/client.c index f5ebbd1..0f7fd65 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -97,10 +97,10 @@ 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 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); @@ -322,7 +322,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}; @@ -345,7 +345,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); @@ -499,15 +499,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); @@ -518,20 +518,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) { - guint 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; } @@ -540,7 +540,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 @@ -640,11 +640,14 @@ dbusmenu_client_send_event (DbusmenuClient * client, gint id, const gchar * name 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); + 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); @@ -653,11 +656,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(dbusmenu_client_menuitem_new(id, client)); if (parent == NULL) { @@ -686,7 +684,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 1c92e92..3909578 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/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml index 866969e..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 <ted@canonical.com> + Aurelien Gateau <ted@canonical.com> This program is free software: you can redistribute it and/or modify it under the terms of either or both of the following licenses: @@ -27,166 +28,275 @@ 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 <http://www.gnu.org/licenses/> --> -<node name="/"> +<node name="/" xmlns:dox="http://www.ayatana.org/dbus/dox.dtd"> <interface name="org.ayatana.dbusmenu"> + <dox:d><![CDATA[ + The goal of this DBus interface is to be able to pass menu items + through DBus. + + Items are represented with a unique numeric id and a dictionary of + properties. + + Available properties are: + + <table> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Default Value</th> + </tr> + <tr> + <td>type</td> + <td>String</td> + <td>Can 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-<vendor>-". + </td> + <td>"standard"</td> + </tr> + <tr> + <td>label</td> + <td>string</td> + <td>Text 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. + </td> + <td>""</td> + </tr> + <tr> + <td>enabled</td> + <td>boolean</td> + <td>Whether the item can be activated or not.</td> + <td>true</td> + </tr> + <tr> + <td>icon-name</td> + <td>string</td> + <td>Icon name of the item, following the freedesktop.org icon spec.</td> + <td>""</td> + </tr> + <tr> + <td>icon-data</td> + <td>binary</td> + <td>PNG data of the icon.</td> + <td>Empty</td> + </tr> + <tr> + <td>toggle-type</td> + <td>string</td> + <td> + 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 + </td> + <td>""</td> + </tr> + <tr> + <td>toggle-state</td> + <td>int</td> + <td> + 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. + </td> + <td>0</td> + </tr> + <tr> + <td>children-display</td> + <td>string</td> + <td> + If the menu item has children this property should be set to + "submenu". + </td> + <td>""</td> + </tr> + </table> + + Vendor specific properties can be added by prefixing them with + "x-<vendor>-". + ]]></dox:d> <!-- Properties --> -<!-- -Provides the version of the DBusmenu API that this API is -implementing. ---> - <property name="version" type="u" access="read"/> + <property name="version" type="u" access="read"> + <dox:d> + Provides the version of the DBusmenu API that this API is + implementing. + </dox:d> + </property> <!-- Functions --> -<!-- -Provides an XML representation of the menu hierarchy - -@param parentId The ID of the parent node for the layout. For - grabbing the layout from the root node use zero. -@param revision The revision number of the layout. For matching - with layoutUpdated signals. -@param layout The layout as an XML string of IDs. - -XML syntax: - -<menu id="1"> # Root container - <menu id="2"> # First level menu, for example "File" - <menu id="3"/> ~ Second level menu, for example "Open" - <menu id="4"/> - ... - </menu> - <menu id="5"> # Another first level menu, say "Edit" - ... - </menu> - ... -</menu> ---> <method name="GetLayout"> - <arg type="u" name="parentId" direction="in" /> - <arg type="u" name="revision" direction="out" /> - <arg type="s" name="layout" direction="out" /> + <dox:d><![CDATA[ + Provides an XML representation of the menu hierarchy + + XML syntax: + + @verbatim +<menu id="1" revision="2"> # Root container + <menu id="2" revision="2"> # First level menu, for example "File" + <menu id="3" revision="2"/> ~ Second level menu, for example "Open" + <menu id="4" revision="3"/> + ... + </menu> + <menu id="5" revision="2"> # Another first level menu, say "Edit" + ... + </menu> + ... +</menu> + @endverbatim + ]]></dox:d> + <arg type="i" name="parentId" direction="in"> + <dox:d>The ID of the parent node for the layout. For + grabbing the layout from the root node use zero.</dox:d> + </arg> + <arg type="u" name="revision" direction="out"> + <dox:d>The revision number of the layout. For matching + with layoutUpdated signals.</dox:d> + </arg> + <arg type="s" name="layout" direction="out"> + <dox:d>The layout as an XML string of IDs.</dox:d> + </arg> </method> -<!-- -Returns the list of items which are children of @a parentId. - -@param Ids A list of ids that we should be finding the properties - on. If the list is empty, all menu items should be sent. -@param propertyNames 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 item is represented as a struct following this format: -@li id unsigned the item id -@li properties map(string => variant) the requested item properties - ---> <method name="GetGroupProperties"> - <arg type="au" name="Ids" direction="in" /> - <arg type="as" name="propertyNames" direction="in" /> - <arg type="a(ua{sv})" name="properties" direction="out" /> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QVariantList"/> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBusMenuItemList"/> + <dox:d> + Returns the list of items which are children of @a parentId. + </dox:d> + <arg type="ai" name="ids" direction="in" > + <dox:d> + A list of ids that we should be finding the properties + on. If the list is empty, all menu items should be sent. + </dox:d> + </arg> + <arg type="as" name="propertyNames" direction="in" > + <dox:d> + The list of item properties we are + interested in. If there are no entries in the list all of + the properties will be sent. + </dox:d> + </arg> + <arg type="a(ia{sv})" name="properties" direction="out" > + <dox:d> + 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 + </dox:d> + </arg> </method> <method name="GetChildren"> - <arg type="u" name="id" direction="in" /> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBusMenuItemList"/> + <arg type="i" name="id" direction="in" /> <arg type="as" name="propertyNames" direction="in" /> - <arg type="a(ua{sv})" name="properties" direction="out" /> + <arg type="a(ia{sv})" name="properties" direction="out" /> </method> -<!-- -Each menu item has a set of properties. Property keys are in menuitem.h: - -@li type string Type of the item (see below) -@li label string Text of the item -@li icon-data binary Raw data of the icon (TODO: define format) -@li icon string Icon name of the item, following icon spec -@li sensitive boolean Whether the item can be activated or not -@li visible boolean Whether the item is visible or not (XXX: Is this necessary?) -@li checked boolean Whether a checkbox or radio item is checked -@li shortcut string The keyboard shortcut - -@c type property is an enum which can take the following values (client.h): - -@li action An item which can be clicked to trigger an action -@li checkbox An item which can be checked or unchecked -@li radio An item which can be checked or unchecked as part of a group -@li separator A separator -@li menu An item which contains more items ---> <method name="GetProperty"> - <arg type="u" name="id" direction="in" /> + <arg type="i" name="id" direction="in" /> <arg type="s" name="name" direction="in" /> <arg type="v" name="value" direction="out" /> </method> -<!-- -Returns multiple properties in one call. This is more efficient than -GetProperty. - -@param id unsigned the item whose properties we want to retrieve. -@param propertyNames list of string name of the properties we want. If the list contains no entries, all properties are sent. ---> <method name="GetProperties"> + <dox:d> + Returns multiple properties in one call. This is more efficient than + GetProperty. + + </dox:d> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QVariantMap"/> - <arg type="u" name="id" direction="in" /> - <arg type="as" name="propertyNames" direction="in" /> + <arg type="i" name="id" direction="in" > + <dox:d>The item whose properties we want to retrieve.</dox:d> + </arg> + <arg type="as" name="propertyNames" direction="in" > + <dox:d>List of string name of the properties we want. If the list contains no entries, all properties are sent.</dox:d> + </arg> <arg type="a{sv}" name="properties" direction="out" /> </method> -<!-- -This is called by the applet to notify the application an event happened on a -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: - -@li "clicked" -@li "hovered" - -Vendor specific events can be added by prefixing them with "x-<vendor>-" ---> <method name="Event"> - <arg type="u" name="id" direction="in" /> - <arg type="s" name="eventId" direction="in" /> - <arg type="v" name="data" direction="in" /> - <arg type="u" name="timestamp" direction="in" /> + <dox:d><![CDATA[ + This is called by the applet to notify the application an event happened on a + menu item. + + @a type can be one of the following: + + @li "clicked" + @li "hovered" + + Vendor specific events can be added by prefixing them with "x-<vendor>-" + ]]></dox:d> + <arg type="i" name="id" direction="in" > + <dox:d>the id of the item which received the event</dox:d> + </arg> + <arg type="s" name="eventId" direction="in" > + <dox:d>the type of event</dox:d> + </arg> + <arg type="v" name="data" direction="in" > + <dox:d>event-specific data</dox:d> + </arg> + <arg type="u" name="timestamp" direction="in" > + <dox:d>The time that the event occured if available or the time the message was sent if not</dox:d> + </arg> </method> <!-- Signals --> -<!-- -Triggered by the application to notify the applet that the property @a property -from item @a id has changed to @a value. ---> <signal name="ItemPropertyUpdated"> - <arg type="u" name="id" direction="out" /> + <dox:d> + Triggered by the application to notify the applet that the property @a property + from item @a id has changed to @a value. + </dox:d> + <arg type="i" name="id" direction="out" /> <arg type="s" name="prop" direction="out" /> <arg type="v" name="value" direction="out" /> </signal> -<!-- -Triggered by the application to notify the applet that all properties of item -@a id should be considered outdated ---> <signal name="ItemUpdated"> - <arg type="u" name="id" direction="out" /> + <dox:d> + Triggered by the application to notify the applet that all properties of item + </dox:d> + <arg type="i" name="id" direction="out" > + <dox:d>id which should be considered outdated</dox:d> + </arg> </signal> -<!-- -Triggered by the application to notify display of a layout update, up to -revision -@param revsion The revision of the layout that we're currently on -@param parent 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. ---> <signal name="LayoutUpdated"> - <arg type="i" name="revision" direction="out" /> - <arg type="u" name="parent" direction="out" /> + <dox:d> + Triggered by the application to notify display of a layout update, up to + revision + </dox:d> + <arg type="u" name="revision" direction="out" > + <dox:d>The revision of the layout that we're currently on</dox:d> + </arg> + <arg type="i" name="parent" direction="out" > + <dox:d> + 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. + </dox:d> + </arg> </signal> <!-- End of interesting stuff --> diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 90abb9d..14bc2db 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; @@ -210,7 +210,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)); @@ -249,7 +249,7 @@ g_value_transform_STRING_INT (const GValue * in, GValue * out) return; } -static guint 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. */ @@ -318,9 +318,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; } @@ -335,10 +335,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; } @@ -368,7 +365,7 @@ handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, g 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); } /** @@ -380,7 +377,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); */ @@ -655,7 +652,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); @@ -674,7 +671,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 @@ -710,7 +707,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}; @@ -1073,7 +1070,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 b7ebc4d..4fc144e 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: @@ -126,7 +126,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); @@ -138,8 +138,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-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 995e375..9d84750 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -35,12 +35,12 @@ 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_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_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); -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" @@ -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, @@ -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); @@ -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 */ diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index ae6297e..555e8d2 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -139,7 +139,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; @@ -170,18 +170,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; } } @@ -199,12 +199,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; @@ -287,9 +287,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) { @@ -429,8 +429,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, @@ -471,7 +471,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; } @@ -485,10 +485,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; } } @@ -510,7 +510,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 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 } ] }, |