3
# Ubuntu Tweak - PyGTK based desktop configuration tool
5
# Copyright (C) 2007-2008 TualatriX <tualatrix@gmail.com>
7
# Ubuntu Tweak is free software; you can redistribute it and/or modify
8
# it under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 2 of the License, or
10
# (at your option) any later version.
12
# Ubuntu Tweak is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
17
# You should have received a copy of the GNU General Public License
18
# along with Ubuntu Tweak; if not, write to the Free Software Foundation, Inc.,
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
29
from ubuntutweak.modules import TweakModule
30
from ubuntutweak.ui import KeyGrabber, KeyModifier, CellRendererButton
31
from ubuntutweak.utils import icon
32
from compiz import CompizPlugin
44
class Shortcuts(TweakModule):
45
__title__ = _("Shortcut Commands")
46
__desc__ = _("By configuring keyboard shortcuts, you can access your favourite applications instantly.\n"
47
"Enter the command to run the application and choose a shortcut key combination.")
48
__icon__ = 'preferences-desktop-keyboard-shortcuts'
49
__category__ = 'personal'
50
__desktop__ = ['gnome', 'une']
53
TweakModule.__init__(self)
55
if not CompizPlugin.get_plugin_active('commands'):
56
CompizPlugin.set_plugin_active('commands', True)
58
sw = gtk.ScrolledWindow()
59
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
62
treeview = self.create_treeview()
65
def create_treeview(self):
66
treeview = gtk.TreeView()
68
self.model = self.__create_model()
70
treeview.set_model(self.model)
72
self.__add_columns(treeview)
76
def __create_model(self):
77
model = gtk.ListStore(
87
client = gconf.client_get_default()
88
logo = icon.get_from_name('gnome-terminal')
94
title = _("Command %d") % id
95
command = client.get_string("/apps/metacity/keybinding_commands/command_%d" % id)
96
key = client.get_string("/apps/metacity/global_keybindings/run_command_%d" % id)
101
pixbuf = icon.get_from_name(command)
103
if key == "disabled":
111
COLUMN_COMMAND, command,
113
COLUMN_EDITABLE, True)
117
def __add_columns(self, treeview):
118
model = treeview.get_model()
120
column = gtk.TreeViewColumn(_("ID"))
122
renderer = gtk.CellRendererPixbuf()
123
column.pack_start(renderer, False)
124
column.set_attributes(renderer, pixbuf = COLUMN_LOGO)
126
renderer = gtk.CellRendererText()
127
column.pack_start(renderer, True)
128
column.set_attributes(renderer, text = COLUMN_TITLE)
129
treeview.append_column(column)
131
column = gtk.TreeViewColumn(_("Command"))
133
renderer = gtk.CellRendererPixbuf()
134
column.pack_start(renderer, False)
135
column.set_attributes(renderer, pixbuf = COLUMN_ICON)
137
renderer = gtk.CellRendererText()
138
renderer.connect("edited", self.on_cell_edited, model)
139
column.pack_start(renderer, True)
140
column.set_attributes(renderer, text = COLUMN_COMMAND, editable = COLUMN_EDITABLE)
141
treeview.append_column(column)
143
column = gtk.TreeViewColumn(_("Key"))
145
renderer = gtk.CellRendererText()
146
renderer.connect("editing-started", self.on_editing_started)
147
renderer.connect("edited", self.on_cell_edited, model)
148
column.pack_start(renderer, True)
149
column.set_attributes(renderer, text=COLUMN_KEY, editable=COLUMN_EDITABLE)
150
column.set_resizable(True)
151
treeview.append_column(column)
153
renderer = CellRendererButton(_("Clean"))
154
renderer.connect("clicked", self.on_clean_clicked)
155
column.pack_end(renderer, False)
157
def on_clean_clicked(self, cell, path):
158
iter = self.model.get_iter_from_string(path)
159
id = self.model.get_value(iter, COLUMN_ID)
160
self.model.set_value(iter, COLUMN_KEY, _("disabled"))
161
client = gconf.client_get_default()
162
client.set_string("/apps/metacity/global_keybindings/run_command_%d" % id, "disabled")
164
def on_got_key(self, widget, key, mods, cell):
165
new = gtk.accelerator_name (key, mods)
166
for mod in KeyModifier:
167
if "%s_L" % mod in new:
168
new = new.replace ("%s_L" % mod, "<%s>" % mod)
169
if "%s_R" % mod in new:
170
new = new.replace ("%s_R" % mod, "<%s>" % mod)
174
client = gconf.client_get_default()
175
column = cell.get_data("id")
176
iter = self.model.get_iter_from_string(cell.get_data("path_string"))
178
id = self.model.get_value(iter, COLUMN_ID)
180
client.set_string("/apps/metacity/global_keybindings/run_command_%d" % id, new)
181
self.model.set_value(iter, COLUMN_KEY, new)
183
def on_editing_started(self, cell, editable, path):
184
grabber = KeyGrabber(self.get_toplevel(), label = "Grab key combination")
185
cell.set_data("path_string", path)
187
grabber.set_no_show_all(True)
188
grabber.connect('changed', self.on_got_key, cell)
189
grabber.begin_key_grab(None)
191
def on_cell_edited(self, cell, path_string, new_text, model):
192
iter = model.get_iter_from_string(path_string)
194
client = gconf.client_get_default()
195
column = cell.get_data("id")
197
id = model.get_value(iter, COLUMN_ID)
198
old = model.get_value(iter, COLUMN_COMMAND)
201
client.set_string("/apps/metacity/keybinding_commands/command_%d" % id, new_text)
203
pixbuf = icon.get_from_name(new_text)
205
model.set_value(iter, COLUMN_ICON, pixbuf)
206
model.set_value(iter, COLUMN_COMMAND, new_text)
208
model.set_value(iter, COLUMN_ICON, None)
209
model.set_value(iter, COLUMN_COMMAND, _("None"))