Comment 1 for bug 726678

Revision history for this message
Aurélien Gâteau (agateau) wrote :

It seems GetLayout() implementation in dbusmenu-glib is buggy: it ignores the parentId parameter.

Getting first level of items for gedit:

# dbus-send --print-reply --dest=:1.442 /com/canonical/menu/7C000A3 com.canonical.dbusmenu.GetLayout int32:0 int32:1 'array:string:'

method return sender=:1.442 -> dest=:1.455 reply_serial=2
   uint32 2
   struct {
      int32 0
      array [
         dict entry(
            string "children-display"
            variant string "submenu"
         )
      ]
      array [
         variant struct {
               int32 2
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "File"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 3
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "Edit"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 4
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "View"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 5
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "Search"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 6
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "Tools"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 7
               array [
                  dict entry(
                     string "enabled"
                     variant boolean true
                  )
                  dict entry(
                     string "type"
                     variant string "separator"
                  )
                  dict entry(
                     string "visible"
                     variant boolean false
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 8
               array [
                  dict entry(
                     string "enabled"
                     variant boolean true
                  )
                  dict entry(
                     string "type"
                     variant string "separator"
                  )
                  dict entry(
                     string "visible"
                     variant boolean false
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 9
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "Documents"
                  )
               ]
               array [
               ]
            }
         variant struct {
               int32 10
               array [
                  dict entry(
                     string "children-display"
                     variant string "submenu"
                  )
                  dict entry(
                     string "label"
                     variant string "Help"
                  )
               ]
               array [
               ]
            }
      ]
   }

Getting content of the "File" submenu (id=2):

# dbus-send --print-reply --dest=:1.442 /com/canonical/menu/7C000A3 com.canonical.dbusmenu.GetLayout int32:2 int32:1 'array:string:'

Returns exactly the same tree.