File: hotkeys.py

package info (click to toggle)
exaile 0.2.11.1%2Bdebian-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 3,464 kB
  • ctags: 2,403
  • sloc: python: 17,416; ansic: 224; makefile: 163; perl: 153; sh: 125; sql: 74
file content (127 lines) | stat: -rw-r--r-- 3,808 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import gtk, gconf, gobject
import xl.plugins as plugins
from gettext import gettext as _

PLUGIN_NAME = _("Global Hotkeys")
PLUGIN_AUTHORS = ['Sayamindu Dasgupta <sayamindu@gnome.org>',
                  'Lincoln de Sousa <lincoln@archlinux-br.org']
PLUGIN_VERSION = '0.6.2'
PLUGIN_DESCRIPTION = _(r"""Enables support for Global Hotkeys in metacity
(default gnome window manager)""")
PLUGIN_ENABLED = False

b = gtk.Button()
PLUGIN_ICON = b.render_icon(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_MENU)
b.destroy()

###
# Add keyboard shortcut items here in tuples in the following format:
#
#    setting name   shortcut    command         label
##
items = (
    ('show_hide',   '<Super>p', 'exaile',      _('Show/Hide Exaile:')),
    ('play',        '<Super>x', 'exaile -a',   _('Play:')),
    ('play_pause',  '<Super>c', 'exaile -t',   _('Toggle Play/Pause:')),
    ('stop',        '<Super>v', 'exaile -s',   _('Stop:')),
    ('previous',    '<Super>z', 'exaile -p',   _('Previous Song:')),
    ('next',        '<Super>b', 'exaile -n',   _('Next Song:')),
    ('ivolume',     '<Super>i', 'exaile -i 5', _('Increase Volume:')),
    ('dvolume',     '<Super>d', 'exaile -l 5', _('Decrease Volume:'))
)

# some shortcuts
_keyb = lambda cmd: '/apps/metacity/global_keybindings/run_command_%d' % cmd
_keyc = lambda cmd: '/apps/metacity/keybinding_commands/command_%d' % cmd
keyb = lambda c, cmd: c.get_string(_keyb(cmd))
keyc = lambda c, cmd: c.get_string(_keyc(cmd))
skeyb = lambda c, cmd, value: c.set_string(_keyb(cmd), value)
signal_id = None

def destroy():
    """
        Called when the plugin is disabled
    """
    global signal_id
    c = gconf.client_get_default()
    for i, v in enumerate(items):
        count = i + 20
        if keyc(c, count).find('exaile') > -1:
            c.unset(_keyb(count))
            c.unset(_keyc(count))

    if signal_id:
        gobject.source_remove(signal_id)
        signal_id = None

    return

def initialize():
    """
        Called when the plugin is enabled
    """
    global signal_id
    # TODO figure out if Metacity is the current window manager or not
    # Return False if metacity is not the current wm

    c = gconf.client_get_default()
    for i, v in enumerate(items):
        count = i + 20

        binding = APP.settings.get_str(v[0], default=v[1],
            plugin=plugins.name(__file__))

        # key binding
        c.set_string(_keyb(count), binding)

        # key command
        c.set_string(_keyc(count), v[2])

    signal_id = APP.connect('quit', lambda *e: destroy())

    return True

def configure():
    """
        Called when the user wants to configure the plugin
    """
    global t_count
    c = gconf.client_get_default()

    table = gtk.Table()
    table.set_border_width(8)
    fields = []
    t_count = 0
    
    def attach_field(label, value):
        global t_count
        label = gtk.Label(label)
        label.set_property('xalign', 1)
        label.set_padding(4, 4)

        input = gtk.Entry()
        input.set_text(value)
        table.attach(label, 0, 1, t_count, t_count + 1)
        table.attach(input, 1, 2, t_count, t_count + 1)
        fields.append(input)
        t_count += 1

    for i, v in enumerate(items):
        binding = APP.settings.get_str(v[0], default=v[1],
            plugin=plugins.name(__file__))
        attach_field(v[3], binding)

    frame = gtk.Frame(_('Set Hotkeys'))
    frame.set_border_width(8)
    frame.add(table)

    dlg = plugins.PluginConfigDialog(APP.window, PLUGIN_NAME)
    dlg.get_child().add(frame)
    dlg.show_all()
    response = dlg.run()
    dlg.hide()

    if response == gtk.RESPONSE_OK:
        for i, v in enumerate(items):
            if PLUGIN_ENABLED: skeyb(c, i + 20, fields[i].get_text())
            APP.settings.set_str(v[0], fields[i].get_text())