~ubuntu-branches/ubuntu/lucid/hamster-applet/lucid-proposed

« back to all changes in this revision

Viewing changes to src/hamster/widgets/tags.py

  • Committer: Bazaar Package Importer
  • Author(s): Krzysztof Klimonda
  • Date: 2010-09-06 01:31:34 UTC
  • mfrom: (1.2.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20100906013134-wtzn81wdx5en03cn
Tags: 2.30.2-0ubuntu1
* New upstream release. (LP: #629609)
* Fixes a bug that made hamster-applet always use some of the CPU,
  draining battery. (LP: #620113)

Show diffs side-by-side

added added

removed removed

Lines of Context:
58
58
        self.connect("key-release-event", self._on_key_release_event)
59
59
        self.connect("focus-out-event", self._on_focus_out_event)
60
60
        self.connect("parent-set", self._on_parent_set)
 
61
        self._parent_click_watcher = None # bit lame but works
61
62
 
62
63
        runtime.dispatcher.add_handler('new_tags_added', self.refresh_tags)
63
64
        self.show()
71
72
        return [tag.strip() for tag in self.get_text().decode('utf8', 'replace').split(",") if tag.strip()]
72
73
 
73
74
    def on_tag_selected(self, tag_box, tag):
74
 
        tags = self.get_tags()
75
 
        tags.append(tag)
 
75
        cursor_tag = self.get_cursor_tag()
 
76
        if cursor_tag and tag.startswith(cursor_tag):
 
77
            self.replace_tag(cursor_tag, tag)
 
78
            tags = self.get_tags()
 
79
        else:
 
80
            tags = self.get_tags()
 
81
            tags.append(tag)
76
82
 
77
83
        self.tag_box.selected_tags = tags
78
84
 
79
 
        self.set_text(", ".join(tags))
 
85
 
 
86
        self.set_text("%s, " % ", ".join(tags))
80
87
        self.set_position(len(self.get_text()))
81
88
 
 
89
        self.populate_suggestions()
 
90
        self.show_popup()
 
91
 
82
92
    def on_tag_unselected(self, tag_box, tag):
83
93
        tags = self.get_tags()
84
94
        while tag in tags: #it could be that dear user is mocking us and entering same tag over and over again
86
96
 
87
97
        self.tag_box.selected_tags = tags
88
98
 
89
 
        self.set_text(", ".join(tags))
 
99
        self.set_text("%s, " % ", ".join(tags))
90
100
        self.set_position(len(self.get_text()))
91
101
 
92
102
 
93
103
    def hide_popup(self):
94
104
        self.popup.hide()
 
105
        if self._parent_click_watcher and self.get_toplevel().handler_is_connected(self._parent_click_watcher):
 
106
            self.get_toplevel().disconnect(self._parent_click_watcher)
 
107
            self._parent_click_watcher = None
95
108
 
96
109
    def show_popup(self):
97
110
        if not self.filter_tags:
98
111
            self.popup.hide()
99
112
            return
100
113
 
 
114
        if not self._parent_click_watcher:
 
115
            self._parent_click_watcher = self.get_toplevel().connect("button-press-event", self._on_focus_out_event)
 
116
 
101
117
        alloc = self.get_allocation()
102
118
        x, y = self.get_parent_window().get_origin()
103
119
 
190
206
            cursor = self.get_position()
191
207
 
192
208
        self.set_text(", ".join(tags))
193
 
        self.set_position(cursor + len(new_tag)-len(old_tag)) # put the cursor back
 
209
        self.set_position(len(self.get_text()))
194
210
 
195
211
    def _on_key_press_event(self, entry, event):
196
212
        if event.keyval == gtk.keysyms.Tab:
240
256
        self.redraw_canvas()
241
257
 
242
258
    def on_tag_click(self, widget, regions):
 
259
        if not regions:
 
260
            return
 
261
 
243
262
        tag = regions[0]
244
263
        if tag in self.selected_tags:
245
264
            #self.selected_tags.remove(tag)