Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.8, 0.8.1, and 0.8.2

gdialog: remember window position and maximize state

This works generically for all our major dialogs. The position is a little
tricky, since we want to query it at exit, but when the dialog is unmapped the
position always reads (0, 0). So I read the position each time the focus in the
top level window changes.

Fixes #64, #75, #88

Changeset 8e98be2220d7

Parent 1c82d05cecc6

by Steve Borho

Changes to one file · Browse files at 8e98be2220d7 Showing diff from parent 1c82d05cecc6 Diff from another changeset...

Change 1 of 3 Show Entire File hggtk/​gdialog.py Stacked
 
146
147
148
 
149
150
 
 
 
 
 
 
 
 
151
152
153
154
155
156
157
 
 
 
 
 
 
 
 
 
 
158
159
160
 
249
250
251
 
 
 
 
 
 
 
 
 
252
253
254
255
256
 
 
 
 
 
257
258
259
 
261
262
263
264
 
 
 
 
265
266
267
 
146
147
148
149
150
 
151
152
153
154
155
156
157
158
159
160
 
 
 
 
 
161
162
163
164
165
166
167
168
169
170
171
172
173
 
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
 
288
289
290
 
291
292
293
294
295
296
297
@@ -146,15 +146,28 @@
      def save_settings(self): + settings = {}   rect = self.get_allocation() - return {'gdialog': (rect.width, rect.height)} + if self.ismaximized: + settings['gdialog-rect'] = self._setting_defsize + settings['gdialog-pos'] = self._setting_winpos + else: + settings['gdialog-rect'] = (rect.width, rect.height) + settings['gdialog-pos'] = self.lastpos + settings['gdialog-ismax'] = self.ismaximized + return settings     - def load_settings(self, settings): - if settings: - self._setting_defsize = settings['gdialog'] - else: - self._setting_defsize = (678, 585) + def load_settings(self, settings={}): + self._setting_defsize = (678, 585) + self._setting_winpos = (0, 0) + self._setting_wasmax = False + if 'gdialog-rect' in settings: + self._setting_defsize = settings['gdialog-rect'] + if 'gdialog-pos' in settings: + self._setting_winpos = settings['gdialog-pos'] + if 'gdialog-ismax' in settings: + self._setting_wasmax = settings['gdialog-ismax']     ### End of overridable methods ###   @@ -249,11 +262,25 @@
  def get_toolbutton(self, label):   return self.toolbuttons[label]   + def windowstate(self, window, event): + if event.changed_mask & gtk.gdk.WINDOW_STATE_MAXIMIZED: + if event.new_window_state & gtk.gdk.WINDOW_STATE_MAXIMIZED: + self.ismaximized = True + else: + self.ismaximized = False + + def setfocus(self, window, event): + self.lastpos = self.get_position()     def _setup_gtk(self):   self.set_title(self.get_title())   shlib.set_tortoise_icon(self, self.get_icon())   shlib.set_tortoise_keys(self) + + self.ismaximized = False + self.lastpos = self._setting_winpos + self.connect('window-state-event', self.windowstate) + self.connect('set-focus', self.setfocus)     # Minimum size   minx, miny = self.get_minsize() @@ -261,7 +288,10 @@
  # Initial size   defx, defy = self.get_defsize()   self.set_default_size(defx, defy) - + if self._setting_wasmax: + self.maximize() + self.move(self._setting_winpos[0], self._setting_winpos[1]) +   vbox = gtk.VBox(False, 0)   self.add(vbox)