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

« back to all changes in this revision

Viewing changes to src/hamster/widgets/dateinput.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:
34
34
    def __init__(self, date = None):
35
35
        gtk.Entry.__init__(self)
36
36
 
37
 
        self.set_width_chars(12) #12 is enough for 12-oct-2009, which is verbose
 
37
        self.set_width_chars(len(dt.datetime.now().strftime("%x"))) # size to default format length
38
38
        self.date = date
39
39
        if date:
40
40
            self.set_date(date)
58
58
        self.connect("key-press-event", self._on_key_press_event)
59
59
        self.connect("focus-in-event", self._on_focus_in_event)
60
60
        self.connect("focus-out-event", self._on_focus_out_event)
 
61
        self._parent_click_watcher = None # bit lame but works
 
62
 
61
63
        self.connect("changed", self._on_text_changed)
62
64
        self.show()
63
65
 
74
76
 
75
77
    def _figure_date(self, date_str):
76
78
        try:
77
 
            return dt.datetime.strptime(date_str, "%x")
 
79
            return dt.datetime.strptime(date_str, "%x").date()
78
80
        except:
79
81
            return self.date
80
82
 
106
108
        self.date = dt.date(cal_date[0], cal_date[1] + 1, cal_date[2])
107
109
        self.set_text(self._format_date(self.date))
108
110
 
109
 
        self.popup.hide()
 
111
        self.hide_popup()
110
112
        if self.news:
111
113
            self.emit("date-entered")
112
114
            self.news = False
113
115
 
 
116
    def hide_popup(self):
 
117
        self.popup.hide()
 
118
        if self._parent_click_watcher and self.get_toplevel().handler_is_connected(self._parent_click_watcher):
 
119
            self.get_toplevel().disconnect(self._parent_click_watcher)
 
120
            self._parent_click_watcher = None
114
121
 
115
122
    def show_popup(self):
 
123
        if not self._parent_click_watcher:
 
124
            self._parent_click_watcher = self.get_toplevel().connect("button-press-event", self._on_focus_out_event)
 
125
 
116
126
        window = self.get_parent_window()
117
 
        x, y= window.get_origin()
 
127
        x, y = window.get_origin()
118
128
 
119
129
        alloc = self.get_allocation()
120
130
 
135
145
 
136
146
 
137
147
    def _on_focus_out_event(self, event, something):
138
 
        self.popup.hide()
 
148
        self.hide_popup()
139
149
        if self.news:
140
150
            self.emit("date-entered")
141
151
            self.news = False
159
169
              event.keyval == gtk.keysyms.KP_Enter):
160
170
            enter_pressed = True
161
171
        elif (event.keyval == gtk.keysyms.Escape):
162
 
            self.popup.hide()
 
172
            self.hide_popup()
163
173
        elif event.keyval in (gtk.keysyms.Left, gtk.keysyms.Right):
164
174
            return False #keep calendar open and allow user to walk in text
165
175
        else:
166
 
            self.popup.hide()
 
176
            self.hide_popup()
167
177
            return False
168
178
 
169
179
        if enter_pressed: