@@ -209,6 +209,7 @@ def make_min_auto_menu(title, min_options, options,
209
209
submenu .append (fstitle )
210
210
submenu .menu_items = {}
211
211
submenu .min_menu_items = {}
212
+ submenu .updating = False
212
213
213
214
def populate_menu (options , value , set_fn ):
214
215
found_match = False
@@ -230,25 +231,29 @@ def populate_menu(options, value, set_fn):
230
231
return items
231
232
232
233
def set_value (item , ss ):
233
- if not item .get_active ():
234
+ if not item .get_active () or submenu . updating :
234
235
return
235
- # user selected a new value from the menu:
236
- s = - 1
237
- for ts , tl in options .items ():
238
- if tl == item .get_label ():
239
- s = ts
240
- break
241
- if s >= 0 and s != ss .get_current_value ():
242
- log ("setting %s to %s" , title , s )
243
- ss .set_value_cb (s )
244
- # deselect other items:
245
- for x in ss .menu_items .values ():
246
- if x != item :
247
- x .set_active (False )
248
- # min is only relevant in auto-mode:
249
- if s != 0 :
250
- for v , x in ss .min_menu_items .items ():
251
- x .set_active (v == 0 )
236
+ try :
237
+ submenu .updating = True
238
+ # user selected a new value from the menu:
239
+ s = - 1
240
+ for ts , tl in options .items ():
241
+ if tl == item .get_label ():
242
+ s = ts
243
+ break
244
+ if s >= 0 and s != ss .get_current_value ():
245
+ log ("setting %s to %s" , title , s )
246
+ ss .set_value_cb (s )
247
+ # deselect other items:
248
+ for x in ss .menu_items .values ():
249
+ if x != item :
250
+ x .set_active (False )
251
+ # min is only relevant in auto-mode:
252
+ if s != 0 :
253
+ for v , x in ss .min_menu_items .items ():
254
+ x .set_active (v == 0 )
255
+ finally :
256
+ submenu .updating = False
252
257
253
258
submenu .menu_items .update (populate_menu (options , get_current_value (), set_value ))
254
259
submenu .append (Gtk .SeparatorMenuItem ())
@@ -258,28 +263,32 @@ def set_value(item, ss):
258
263
submenu .append (mstitle )
259
264
260
265
def set_min_value (item , ss ):
261
- if not item .get_active ():
266
+ if not item .get_active () or submenu . updating :
262
267
return
263
- # user selected a new min-value from the menu:
264
- s = - 1
265
- for ts , tl in min_options .items ():
266
- if tl == item .get_label ():
267
- s = ts
268
- break
269
- if s >= 0 and s != ss .get_current_min_value ():
270
- log (f"setting min-{ title } to { s } " )
271
- ss .set_min_value_cb (s )
272
- # deselect other min items:
273
- for x in ss .min_menu_items .values ():
274
- if x != item :
275
- x .set_active (False )
276
- # min requires auto-mode:
277
- for x in ss .menu_items .values ():
278
- if x .get_label () == "Auto" :
279
- if not x .get_active ():
280
- x .activate ()
281
- else :
282
- x .set_active (False )
268
+ try :
269
+ submenu .updating = True
270
+ # user selected a new min-value from the menu:
271
+ s = - 1
272
+ for ts , tl in min_options .items ():
273
+ if tl == item .get_label ():
274
+ s = ts
275
+ break
276
+ if s >= 0 and s != ss .get_current_min_value ():
277
+ log (f"setting min-{ title } to { s } " )
278
+ ss .set_min_value_cb (s )
279
+ # deselect other min items:
280
+ for x in ss .min_menu_items .values ():
281
+ if x != item :
282
+ x .set_active (False )
283
+ # min requires auto-mode:
284
+ for x in ss .menu_items .values ():
285
+ if x .get_label () == "Auto" :
286
+ if not x .get_active ():
287
+ x .activate ()
288
+ else :
289
+ x .set_active (False )
290
+ finally :
291
+ submenu .updating = False
283
292
284
293
mv = - 1
285
294
if get_current_value () <= 0 :
0 commit comments