Commit 0d493f11 authored by Roman Alifanov's avatar Roman Alifanov

block signal handlers while changing widget value programmatically

parent 3bcfab63
...@@ -10,7 +10,7 @@ class BooleanWidget(BaseWidget): ...@@ -10,7 +10,7 @@ class BooleanWidget(BaseWidget):
valign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER,
halign=Gtk.Align.CENTER, halign=Gtk.Align.CENTER,
) )
self.switch.connect("notify::active", self._on_boolean_toggled) self.handler_id = self.switch.connect("notify::active", self._on_boolean_toggled)
self.row.set_activatable_widget(self.switch) self.row.set_activatable_widget(self.switch)
...@@ -25,7 +25,10 @@ class BooleanWidget(BaseWidget): ...@@ -25,7 +25,10 @@ class BooleanWidget(BaseWidget):
def _update_initial_state(self): def _update_initial_state(self):
current_value = self.setting._get_backend_value() current_value = self.setting._get_backend_value()
is_active = current_value == self.setting.map.get(True) is_active = current_value == self.setting.map.get(True)
self.switch.set_active(is_active)
with self.switch.handler_block(self.handler_id):
self.switch.set_active(is_active)
self._update_reset_visibility() self._update_reset_visibility()
def update_display(self): def update_display(self):
...@@ -41,8 +44,10 @@ class BooleanWidget(BaseWidget): ...@@ -41,8 +44,10 @@ class BooleanWidget(BaseWidget):
default_value = self.setting.map.get(self.setting.default) default_value = self.setting.map.get(self.setting.default)
self.setting._set_backend_value(default_value) self.setting._set_backend_value(default_value)
self.switch.set_active(self.setting.default)
with self.switch.handler_block(self.handler_id):
self.switch.set_active(self.setting.default)
self._update_reset_visibility() self._update_reset_visibility()
def _update_reset_visibility(self): def _update_reset_visibility(self):
......
...@@ -16,7 +16,7 @@ class ChoiceWidget(BaseWidget): ...@@ -16,7 +16,7 @@ class ChoiceWidget(BaseWidget):
self._set_dropdown_width(items) self._set_dropdown_width(items)
self._update_dropdown_selection() self._update_dropdown_selection()
self.dropdown.connect("notify::selected", self._on_choice_changed) self.handler_id = self.dropdown.connect("notify::selected", self._on_choice_changed)
control_box = Gtk.Box(spacing=6, orientation=Gtk.Orientation.HORIZONTAL) control_box = Gtk.Box(spacing=6, orientation=Gtk.Orientation.HORIZONTAL)
control_box.append(self.reset_revealer) control_box.append(self.reset_revealer)
...@@ -32,7 +32,9 @@ class ChoiceWidget(BaseWidget): ...@@ -32,7 +32,9 @@ class ChoiceWidget(BaseWidget):
def _update_dropdown_selection(self): def _update_dropdown_selection(self):
current_index = self.setting._get_selected_row_index() current_index = self.setting._get_selected_row_index()
self.dropdown.set_selected(current_index)
with self.dropdown.handler_block(self.handler_id):
self.dropdown.set_selected(current_index)
def _set_dropdown_width(self, items): def _set_dropdown_width(self, items):
layout = self.dropdown.create_pango_layout("") layout = self.dropdown.create_pango_layout("")
...@@ -59,7 +61,8 @@ class ChoiceWidget(BaseWidget): ...@@ -59,7 +61,8 @@ class ChoiceWidget(BaseWidget):
default_value = self.setting._get_default_row_index() default_value = self.setting._get_default_row_index()
if default_value is not None: if default_value is not None:
self.dropdown.set_selected(default_value) with self.dropdown.handler_block(self.handler_id):
self.dropdown.set_selected(default_value)
self.setting._set_backend_value(self.setting.default) self.setting._set_backend_value(self.setting.default)
self._update_reset_visibility() self._update_reset_visibility()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment