Beispiel #1
0
def create_properties_for_action(ac, previous=None):
    ans = PropDict()
    if ac.isSeparator():
        ans['type'] = 'separator'
        if not ac.isVisible():
            ans['visible'] = False
        return ans
    text = ac.text() or ac.iconText()
    if text:
        ans['label'] = swap_mnemonic_char(text)
    if not ac.isEnabled():
        ans['enabled'] = False
    if not ac.isVisible() or ac.property('blocked') is True:
        ans['visible'] = False
    if ac.menu() is not None:
        ans['children-display'] = 'submenu'
    if ac.isCheckable():
        exclusive = ac.actionGroup() is not None and ac.actionGroup(
        ).isExclusive()
        ans['toggle-type'] = 'radio' if exclusive else 'checkmark'
        ans['toggle-state'] = int(ac.isChecked())
    shortcuts = ac.shortcuts()
    if shortcuts:
        sc = dbus.Array(signature='as')
        for s in shortcuts:
            if not s.isEmpty():
                for x in key_sequence_to_dbus_shortcut(s):
                    sc.append(dbus.Array(x, signature='s'))
        if sc:
            ans['shortcut'] = sc[:
                                 1]  # Unity fails to display the shortcuts at all if more than one is specified
    if ac.isIconVisibleInMenu():
        icon = ac.icon()
        if previous and previous.get('x-qt-icon-cache-key') == icon.cacheKey():
            for x in 'icon-data x-qt-icon-cache-key'.split():
                ans[x] = previous[x]
        else:
            data = icon_to_dbus_menu_icon(ac.icon())
            if data is not None:
                ans['icon-data'] = data
                ans['x-qt-icon-cache-key'] = icon.cacheKey()
    return ans
Beispiel #2
0
def create_properties_for_action(ac, previous=None):
    ans = PropDict()
    if ac.isSeparator():
        ans['type'] = 'separator'
        if not ac.isVisible():
            ans['visible'] = False
        return ans
    text = ac.text() or ac.iconText()
    if text:
        ans['label'] = swap_mnemonic_char(text)
    if not ac.isEnabled():
        ans['enabled'] = False
    if not ac.isVisible() or ac.property('blocked') is True:
        ans['visible'] = False
    if ac.menu() is not None:
        ans['children-display'] = 'submenu'
    if ac.isCheckable():
        exclusive = ac.actionGroup() is not None and ac.actionGroup().isExclusive()
        ans['toggle-type'] = 'radio' if exclusive else 'checkmark'
        ans['toggle-state'] = int(ac.isChecked())
    shortcuts = ac.shortcuts()
    if shortcuts:
        sc = dbus.Array(signature='as')
        for s in shortcuts:
            if not s.isEmpty():
                for x in key_sequence_to_dbus_shortcut(s):
                    sc.append(dbus.Array(x, signature='s'))
        if sc:
            ans['shortcut'] = sc[:1]  # Unity fails to display the shortcuts at all if more than one is specified
    if ac.isIconVisibleInMenu():
        icon = ac.icon()
        if previous and previous.get('x-qt-icon-cache-key') == icon.cacheKey():
            for x in 'icon-data x-qt-icon-cache-key'.split():
                ans[x] = previous[x]
        else:
            data = icon_to_dbus_menu_icon(ac.icon())
            if data is not None:
                ans['icon-data'] = data
                ans['x-qt-icon-cache-key'] = icon.cacheKey()
    return ans