Changeset 1504958463fcadd570c9117ca26b4c4a1aa1d8ad

Show
Ignore:
Timestamp:
06/16/08 21:49:28 (4 years ago)
Author:
Lincoln de Sousa <lincoln@…>
Children:
316c9b7f0eaaf164ab678550cbab314c7e8fccee
Parents:
95d3ca771a1ce90e9a5ccd7d4b3b36d8e3dcde3c
git-committer:
Lincoln de Sousa <lincoln@…> (06/16/08 21:49:28)
Message:

KeyEntry?: Adding repr and eq methods to
make it easy and pythonic to compare with other keyentry and to
debug.

(PrefsDialog?.on_key_edited): Adding validation to
avoid repeated keybindings and to avoid using simple keys
as [a-zA-Z0-9] keys.

(PrefsDialog?): Adding a way to clear a keybinding
with on_key_cleared method.

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r95d3ca7 r1504958  
     12008-06-16  Lincoln de Sousa  <lincoln@minaslivre.org> 
     2 
     3        * src/guake.py (KeyEntry): Adding __repr__ and __eq__ methods to 
     4        make it easy and pythonic to compare with other keyentry and to 
     5        debug. 
     6 
     7        * src/guake.py (PrefsDialog.on_key_edited): Adding validation to 
     8        avoid repeated keybindings and to avoid using simple keys 
     9        as [a-zA-Z0-9] keys. 
     10 
     11        * src/guake.py (PrefsDialog): Adding a way to clear a keybinding 
     12        with on_key_cleared method. 
     13 
    1142008-06-15  Lincoln de Sousa  <lincoln@minaslivre.org> 
    215 
  • src/guake.py

    ra6068db r1504958  
    7272        self.mask = mask 
    7373 
     74    def __repr__(self): 
     75        return u'KeyEntry(%d, %d, %d)' % ( 
     76            self.keyval, self.keycode, self.mask) 
     77 
     78    def __eq__(self, rval): 
     79        return self.keycode == rval.keycode and \ 
     80            self.keyval == rval.keyval and \ 
     81            self.mask == rval.mask 
     82 
    7483class AboutDialog(SimpleGladeApp): 
    7584    def __init__(self): 
     
    136145 
    137146        renderer.connect('accel-edited', self.on_key_edited, model) 
     147        renderer.connect('accel-cleared', self.on_key_cleared, model) 
     148 
    138149        column = gtk.TreeViewColumn(_('Shortcut'), renderer) 
    139150        column.set_cell_data_func(renderer, self.cell_data_func) 
     
    374385        gconf_path = model.get_value(giter, 0) 
    375386 
     387        oldkey = model.get_value(giter, 2) 
    376388        hotkey = KeyEntry(keyval, keycode, mask) 
     389        key = cellrendererkeys.accelerator_name(keyval, keycode, mask) 
     390        keylabel = cellrendererkeys.accelerator_label(keyval, keycode, mask) 
     391 
     392        # we needn't to change anything, the user is trying to set the 
     393        # same key that is already set. 
     394        if oldkey == hotkey: 
     395            return False 
     396 
     397        # looking for already used keybindings 
     398        def each_key(model, path, subiter): 
     399            keyentry = model.get_value(subiter, 2) 
     400            if keyentry and keyentry == hotkey: 
     401                msg = _("The shortcut \"%s\" is already in use.") % keylabel 
     402                raise ShowableError(_('Error setting keybinding.'), msg, -1) 
     403        model.foreach(each_key) 
     404 
     405        # avoiding problems with common keys 
     406        if ((mask == 0 and keycode != 0) and ( 
     407            (keyval >= ord('a') and keyval <= ord('z')) or 
     408            (keyval >= ord('A') and keyval <= ord('Z')) or 
     409            (keyval >= ord('0') and keyval <= ord('9')))): 
     410            parent = self.get_widget('config-window') 
     411            dialog = gtk.MessageDialog(parent, 
     412                                       gtk.DIALOG_MODAL | 
     413                                       gtk.DIALOG_DESTROY_WITH_PARENT, 
     414                                       gtk.MESSAGE_WARNING, 
     415                                       gtk.BUTTONS_OK, 
     416                                       _("The shortcut \"%s\" cannot be used " 
     417                                         "because it will become impossible to " 
     418                                         "type using this key.\n\n" 
     419                                         "Please try with a key such as " 
     420                                         "Control, Alt or Shift at the same " 
     421                                         "time.\n") % key) 
     422            dialog.run() 
     423            dialog.destroy() 
     424            return False 
     425 
    377426        giter = model.get_iter(path) 
    378427        model.set_value(giter, 2, hotkey) 
    379         key = cellrendererkeys.accelerator_name(keyval, keycode, mask) 
    380428 
    381429        # old key, used only to disconnect current shortcuts 
     
    398446        self.client.set_string(gconf_path, key) 
    399447        self.guake.load_accelerators() 
     448 
     449    def on_key_cleared(self, renderer, path, model): 
     450        giter = model.get_iter(path) 
     451        gconf_path = model.get_value(giter, 0) 
     452        model.set_value(giter, 2, KeyEntry(0, 0, 0)) 
     453        self.client.set_string(gconf_path, 'disabled') 
    400454 
    401455    def cell_data_func(self, column, renderer, model, giter): 
     
    437491 
    438492        x, y = int(event.x), int(event.y) 
    439         path, column, cellx, celly = treeview.get_path_at_pos(x, y) 
     493        ret = treeview.get_path_at_pos(x, y) 
     494        if not ret: 
     495            return False 
     496 
     497        path, column, cellx, celly = ret 
    440498        if path and len(path) > 1: 
    441499            def real_cb():