def key_release(self, widget, event): buffer = self.text_view.get_buffer() insertIter = buffer.get_iter_at_mark(buffer.get_insert()) if insertIter.backward_search("...", 0, None) != None: eFindIterStart = insertIter.backward_search("...", 0, None)[0] eFindIterStop = insertIter.backward_search("...", 0, None)[1] buffer.delete(eFindIterStart, eFindIterStop) buffer.insert(buffer.get_iter_at_mark(buffer.get_insert()), "…") insertIter = buffer.get_iter_at_mark(buffer.get_insert()) if insertIter.backward_search('\"', 0, None) != None: qFindIter = insertIter.backward_search('\"', 0, None)[1] if insertIter.backward_search('\"', 0, None) != None else None qFindIterPrev = insertIter.backward_search('\"', 0, None)[0] qOpen = qFindIter.backward_search('«', 0, None)[1].get_offset() if qFindIter.backward_search('«', 0, None) != None else -1 qClose = qFindIter.backward_search('»', 0, None)[1].get_offset() if qFindIter.backward_search('»', 0, None) != None else -1 if (qOpen == -1 and qClose == -1) or (qOpen < qClose): buffer.delete(qFindIterPrev, qFindIter) buffer.insert(qFindIter, '«') else: buffer.delete(qFindIterPrev, qFindIter) buffer.insert(qFindIter, '»') if (event.keyval in [Gdk.KEY_i, Gdk.KEY_I, 1993, 2025]) and event.state & Gdk.ModifierType.CONTROL_MASK: if buffer.get_has_selection(): iter1 = buffer.get_selection_bounds()[0] buffer.insert(iter1, "<i>") iter2 = buffer.get_selection_bounds()[1] buffer.insert(iter2, "</i>") buffer.select_range(iter2,iter2) else: insertIter = buffer.get_iter_at_mark(buffer.get_insert()) itStartIter = insertIter.backward_search("<i>", 0, None) if itStartIter != None: itStopIter = itStartIter[1].forward_search("</i>", 0, None) else: itStopIter = None isOpen = itStartIter != None and (itStopIter == None) if itStartIter == None: buffer.insert(insertIter, "<i>") elif isOpen: buffer.insert(insertIter, "</i>") elif not isOpen: if insertIter.compare(itStopIter[1]) >= 0: buffer.insert(insertIter, "<i>") if event.keyval == Gdk.KEY_Return and event.state & Gdk.ModifierType.CONTROL_MASK: self.response(Gtk.ResponseType.OK) return True if event.keyval in [Gdk.KEY_Z, Gdk.KEY_z, 2022, 1990] and event.state & Gdk.ModifierType.CONTROL_MASK: with GObject.signal_handler_block(self.text_view.get_buffer(), self.changed_handler): if event.state & Gdk.ModifierType.SHIFT_MASK: self.history.redo() else: self.history.undo() if (event.keyval in [Gdk.KEY_Y, Gdk.KEY_y, 2037, 2005]) and event.state & Gdk.ModifierType.CONTROL_MASK: with GObject.signal_handler_block(self.text_view.get_buffer(), self.changed_handler): self.history.redo()
def _block_setting_signals(klass, signal_name, block=True): shell_settings = klass.get_shell_settings() for handler in klass._settings_signal_handlers.get(signal_name, []): if block: GObject.signal_handler_block(shell_settings, handler) else: GObject.signal_handler_unblock(shell_settings, handler)
def _on_button_release(self, scale, event, player): GObject.signal_handler_block(self.scale, self.__id_value_changed) value = scale.get_value() if player.seekable and self.__pressed_lmb_scale_value != value: player.seek(value * 1000) GObject.signal_handler_unblock(self.scale, self.__id_change_value) self.__pressed_lmb = False GObject.signal_handler_unblock( self.scale, self.__id_button_press_event)
def update(self): for i, h in self.handlers_: GObject.signal_handler_block(i, h) s = self.camera_.get() for e, a, ie, ia in zip(self.ctrl_, self.auto_, s["vals"], s["auto"]): e.set_text("%d" % ie) if a: a.set_active(ia) for i, h in self.handlers_: GObject.signal_handler_unblock(i, h)
def show_search_box(self): if not self.search_revealer.get_reveal_child(): GObject.signal_handler_block(self.search_revealer, self.search_revealer_show_cb_id) self.search_revealer.set_visible(True) self.search_revealer.set_reveal_child(True) GObject.signal_handler_unblock(self.search_revealer, self.search_revealer_show_cb_id) # XXX: Mestery line to avoid Gtk-CRITICAL stuff # (guake:22694): Gtk-CRITICAL **: 18:04:57.345: # gtk_widget_event: assertion 'WIDGET_REALIZED_FOR_EVENT (widget, event)' failed self.search_entry.realize() self.search_entry.grab_focus()
def show_search_box(self): if not self.search_revealer.get_reveal_child(): self.search_revealer.set_reveal_child(True) # XXX: Mestery line to avoid Gtk-CRITICAL stuff # (guake:22694): Gtk-CRITICAL **: 18:04:57.345: # gtk_widget_event: assertion 'WIDGET_REALIZED_FOR_EVENT (widget, event)' failed self.search_entry.realize() self.search_entry.grab_focus() GObject.signal_handler_block( self.get_notebook(), self.get_notebook().notebook_on_button_press_id )
def on_audio_status(self, *volumes): volumes_json = "".join(volumes) volumes = json.loads(volumes_json) for source, volume in volumes.items(): volume = 20.0 * math.log10(volume) if volume > 0 else -20.0 slider, signal = self.volume_sliders[source] # Temporarily block the 'value-changed' signal, # so we don't (re)trigger it when receiving (our) changes GObject.signal_handler_block(slider, signal) slider.set_value(volume) GObject.signal_handler_unblock(slider, signal)
def resize_to_standard_width(self): if self.get_resizable(): return # only size to a specific em if we are a static size num_em = 33 # per SoftwareUpdates spec dpi = self.get_screen().get_resolution() if dpi <= 0: dpi = 96 ctx = self.get_style_context() GObject.signal_handler_block(ctx, self.style_changed) size = ctx.get_property("font-size", Gtk.StateFlags.NORMAL) width = dpi / 72 * size * num_em self.set_size_request(width, -1) GObject.signal_handler_unblock(ctx, self.style_changed)
def gobject_signal_blocked(gobject, signal_name): """ This is a context manager that can be used with the 'with' statement to execute a block of code while *signal_name* is blocked. :param gobject: The object to block the signal on. :type gobject: :py:class:`GObject.Object` :param str signal_name: The name of the signal to block. """ signal_id = GObject.signal_lookup(signal_name, gobject.__class__) handler_id = GObject.signal_handler_find(gobject, GObject.SignalMatchType.ID, signal_id, 0, None, 0, 0) GObject.signal_handler_block(gobject, handler_id) yield GObject.signal_handler_unblock(gobject, handler_id)
def _toggle_all_selection(self, selected): """ Selects or unselects all items without sending the notify::active signal for performance purposes. """ for child in self.view.get_children(): GObject.signal_handler_block(child.check, child.check_handler_id) # Set the checkbutton state without emiting the signal child.check.set_active(selected) GObject.signal_handler_unblock(child.check, child.check_handler_id) self.update_header_from_selection(len(self.albums_selected))
def _toggle_all_selection(self, selected): """ Selects or unselects all items without sending the notify::active signal for performance purposes. """ for child in self._view.get_children(): GObject.signal_handler_block(child.check, child.check_handler_id) # Set the checkbutton state without emiting the signal child.check.set_active(selected) GObject.signal_handler_unblock(child.check, child.check_handler_id) self.update_header_from_selection(len(self.albums_selected))
def clear_tree(self): selection = self.get_selection() if self.conid is not None and selection.handler_is_connected( self.conid): with GObject.signal_handler_block(selection, self.conid): self.liststore.clear() else: self.liststore.clear()
def onInsertText(self, oWidget, strText, nLength, nPosition): strText = ''.join([s for s in strText if s not in '/\\']) nId, nDetail = GObject.signal_parse_name('insert-text', oWidget, True) if strText: nHandler = GObject.signal_handler_find(oWidget, GObject.SignalMatchType.ID, nId, nDetail, None, 0, 0) nPosition = oWidget.get_position() GObject.signal_handler_block(oWidget, nHandler) oWidget.insert_text(strText, nPosition) GObject.signal_handler_unblock(oWidget, nHandler) GObject.idle_add(oWidget.set_position, nPosition + len(strText)) GObject.signal_stop_emission(oWidget, nId, nDetail)
def _reset_emoji_entry(self): """ The emoji entry should stay clear in order to function properly. When something is being inserted, then it should be cleared after either starting editing a new tag, selected one, or otherwise changed. """ with GObject.signal_handler_block(self._emoji_entry, self._emoji_entry_changed_id): self._emoji_entry.set_text('')
def on_entry_changed(self, *args): entry = self.srvgui.get_widget('gtk_entry_collection_new') filter = entry.get_text() selection = self.treeview.get_selection() def gui_iterate_over_data(model, path, itr): title = self.sorted_model.get(itr, 2)[0] if len(filter) > 0: if filter.upper() in title.upper(): self.treeview.scroll_to_cell(path, self.column_title, True, 0.0, 0.0) self.treeview.set_cursor_on_cell(path, self.column_title, self.renderer_title, False) else: return GObject.signal_handler_block(self.selection, self.trv_signal_changed) self.sorted_model.foreach(gui_iterate_over_data) GObject.signal_handler_unblock(self.selection, self.trv_signal_changed)
def on_refresh_ui(self, data): if self.state < Gst.State.PAUSED : return True if self.duration == Gst.CLOCK_TIME_NONE : ret, self.duration = self.player.query_duration(Gst.Format.TIME) if ret: self.slider.set_range(0, self.duration/Gst.SECOND) else: print("Could not query current duration.") ret, pos = self.player.query_position(Gst.Format.TIME) if ret: GObject.signal_handler_block(self.slider, self.slider_update_sig_id) self.slider.set_value(pos/Gst.SECOND) GObject.signal_handler_unblock(self.slider, self.slider_update_sig_id) return True
def on_refresh_ui(self, data): if self.state < Gst.State.PAUSED: return True if self.duration == Gst.CLOCK_TIME_NONE: ret, self.duration = self.player.query_duration(Gst.Format.TIME) if ret: self.slider.set_range(0, self.duration / Gst.SECOND) else: print("Could not query current duration.") ret, pos = self.player.query_position(Gst.Format.TIME) if ret: GObject.signal_handler_block(self.slider, self.slider_update_sig_id) self.slider.set_value(pos / Gst.SECOND) GObject.signal_handler_unblock(self.slider, self.slider_update_sig_id) return True
def load_games(self, direction=FIRST_PAGE): selection = self.get_selection() if selection is not None and self.preview_cid is not None and \ selection.handler_is_connected(self.preview_cid): with GObject.signal_handler_block(selection, self.preview_cid): self.liststore.clear() else: self.liststore.clear() add = self.liststore.append self.records = [] records, plys = self.persp.chessfile.get_records(direction) for i, rec in enumerate(records): game_id = rec["Id"] offs = rec["Offset"] wname = rec["White"] bname = rec["Black"] welo = rec["WhiteElo"] belo = rec["BlackElo"] result = rec["Result"] result = "½-½" if result == DRAW else reprResult[ result] if result else "*" event = "" if rec["Event"] is None else rec["Event"].replace( "?", "") site = "" if rec["Site"] is None else rec["Site"].replace("?", "") round_ = "" if rec["Round"] is None else rec["Round"].replace( "?", "") date = "" if rec["Date"] is None else rec["Date"].replace( ".??", "").replace("????.", "") try: ply = rec["PlyCount"] length = str(int(ply) // 2) if ply else "" except ValueError: length = "" eco = rec["ECO"] tc = rec["TimeControl"] variant = rec["Variant"] variant = variants[variant].cecp_name.capitalize( ) if variant else "" fen = rec["FEN"] add([ game_id, wname, welo, bname, belo, result, date, event, site, round_, length, eco, tc, variant, fen ]) ply = plys.get(offs) if offs in plys else 0 self.records.append((rec, ply)) self.set_cursor(0)
def on_entry_changed(self, *args): entry = self.srvgui.get_widget('gtk_entry_collection_new') filter = entry.get_text() selection = self.treeview.get_selection() # ~ self.visible_filter.refilter() def gui_iterate_over_data(model, path, itr): title = self.sorted_model.get(itr, 2)[0] if len(filter) > 0: if filter.upper() in title.upper(): self.treeview.scroll_to_cell(path, self.column_title, True, 0.0, 0.0) self.treeview.set_cursor_on_cell(path, self.column_title, self.renderer_title, False) else: return GObject.signal_handler_block(self.selection, self.trv_signal_changed) self.sorted_model.foreach(gui_iterate_over_data) GObject.signal_handler_unblock(self.selection, self.trv_signal_changed)
def load_games(self, direction=FIRST_PAGE): selection = self.get_selection() if selection is not None and self.preview_cid is not None and \ selection.handler_is_connected(self.preview_cid): with GObject.signal_handler_block(selection, self.preview_cid): self.liststore.clear() else: self.liststore.clear() add = self.liststore.append self.records = [] records, plys = self.persp.chessfile.get_records(direction) for i, rec in enumerate(records): game_id = rec["Id"] offs = rec["Offset"] wname = rec["White"] bname = rec["Black"] welo = rec["WhiteElo"] belo = rec["BlackElo"] result = rec["Result"] result = "½-½" if result == DRAW else reprResult[result] if result else "*" event = "" if rec["Event"] is None else rec["Event"].replace("?", "") site = "" if rec["Site"] is None else rec["Site"].replace("?", "") round_ = "" if rec["Round"] is None else rec["Round"].replace("?", "") date = "" if rec["Date"] is None else rec["Date"].replace(".??", "").replace("????.", "") try: ply = rec["PlyCount"] length = str(int(ply) // 2) if ply else "" except ValueError: length = "" eco = rec["ECO"] tc = rec["TimeControl"] variant = rec["Variant"] variant = variants[variant].cecp_name.capitalize() if variant else "" fen = rec["FEN"] add([game_id, wname, welo, bname, belo, result, date, event, site, round_, length, eco, tc, variant, fen]) ply = plys.get(offs) if offs in plys else 0 self.records.append((rec, ply)) self.set_cursor(0)
def load_games(self, forward=True): selection = self.get_selection() if selection is not None and self.preview_cid is not None and \ selection.handler_is_connected(self.preview_cid): with GObject.signal_handler_block(selection, self.preview_cid): self.liststore.clear() else: self.liststore.clear() getTag = self.chessfile._getTag getResult = self.chessfile.get_result getPlayers = self.chessfile.get_player_names add = self.liststore.append records = self.chessfile.get_records(self.offset, self.LIMIT, forward) self.id_list = [] for i in range(len(records)): game_id = self.chessfile.get_id(i) self.id_list.append(game_id) wname, bname = getPlayers(i) welo = getTag(i, "WhiteElo") belo = getTag(i, "BlackElo") result = getResult(i) result = "½-½" if result == DRAW else reprResult[result] event = getTag(i, 'Event') site = getTag(i, 'Site') round_ = getTag(i, "Round") date = getTag(i, "Date") ply = getTag(i, "PlyCount") length = str(int(ply) // 2) if ply else "" eco = getTag(i, "ECO") tc = getTag(i, "TimeControl") variant = getTag(i, "Variant") fen = getTag(i, "FEN") add([game_id, wname, welo, bname, belo, result, date, event, site, round_, length, eco, tc, variant, fen]) if isinstance(self.chessfile, Database) and len(self.id_list) > 0: # set offset to last/first seen game id depending on direction # it will be used in databese get_records() where clause self.offset = self.id_list[-1 if forward else 0] self.set_cursor(0) self.update_counter()
def set_emoji(self, widget): """Set emoji as icon (both in settings and button label).""" text = self.hidden_entry.get_text() if text: self.ti_bt_label.set_text(text) self.ti_bt_label.set_opacity(1) self.ti_bt_clear.set_sensitive(True) else: self.ti_bt_label.set_text('🏷️') self.ti_bt_label.set_opacity(0.4) self.ti_bt_clear.set_sensitive(False) with GObject.signal_handler_block(self.hidden_entry, self.emoji_id): self.hidden_entry.set_text('') self.tag.set_attribute('icon', text)
def add_checkbox(self, tid: int, start: Gtk.TextIter) -> None: """Add a checkbox for a subtask.""" task = self.req.get_task(tid) checkbox = Gtk.CheckButton.new() if task and task.status != task.STA_ACTIVE: checkbox.set_active(True) checkbox.connect('toggled', lambda _: self.on_checkbox_toggle(tid)) checkbox.set_can_focus(False) # Block the modified signal handler while we add the anchor # for the checkbox widget with GObject.signal_handler_block(self.buffer, self.id_modified): anchor = self.buffer.create_child_anchor(start) self.add_child_at_anchor(checkbox, anchor) end = start.copy() end.forward_char() self.buffer.apply_tag(self.checkbox_tag, start, end) self.buffer.set_modified(False) checkbox.show()
def block_notebook_on_button_press_id(self): GObject.signal_handler_block( self.get_notebook(), self.get_notebook().notebook_on_button_press_id)
def _on_button_press(self, scale, event, player): GObject.signal_handler_block(self.scale, self.__id_button_press_event) self.__pressed_lmb = True GObject.signal_handler_unblock(self.scale, self.__id_value_changed) GObject.signal_handler_block(self.scale, self.__id_change_value) self.__pressed_lmb_scale_value = scale.get_value()
def key_release(self, widget, event): buffer = self.text_view.get_buffer() insertIter = buffer.get_iter_at_mark(buffer.get_insert()) if not(insertIter.backward_search("...", 0, None) is None): eFindIterStart = insertIter.backward_search("...", 0, None)[0] eFindIterStop = insertIter.backward_search("...", 0, None)[1] buffer.delete(eFindIterStart, eFindIterStop) buffer.insert(buffer.get_iter_at_mark(buffer.get_insert()), "…") insertIter = buffer.get_iter_at_mark(buffer.get_insert()) if not(insertIter.backward_search('\"', 0, None) is None): qFindIter = insertIter.backward_search('\"', 0, None)[1] if not(insertIter.backward_search('\"', 0, None) is None) else None qFindIterPrev = insertIter.backward_search('\"', 0, None)[0] qOpen = qFindIter.backward_search('«', 0, None)[1].get_offset() if not(qFindIter.backward_search('«', 0, None) is None) else -1 qClose = qFindIter.backward_search('»', 0, None)[1].get_offset() if not(qFindIter.backward_search('»', 0, None) is None) else -1 if (qOpen == -1 and qClose == -1) or (qOpen < qClose): buffer.delete(qFindIterPrev, qFindIter) buffer.insert(qFindIter, '«') else: buffer.delete(qFindIterPrev, qFindIter) buffer.insert(qFindIter, '»') if (event.keyval in [Gdk.KEY_i, Gdk.KEY_I, 1993, 2025]) and event.state & Gdk.ModifierType.CONTROL_MASK: if buffer.get_has_selection(): iter1 = buffer.get_selection_bounds()[0] buffer.insert(iter1, "<i>") iter2 = buffer.get_selection_bounds()[1] buffer.insert(iter2, "</i>") buffer.select_range(iter2,iter2) else: insertIter = buffer.get_iter_at_mark(buffer.get_insert()) itStartIter = insertIter.backward_search("<i>", 0, None) if not(itStartIter is None): itStopIter = itStartIter[1].forward_search("</i>", 0, None) else: itStopIter = None isOpen = not (itStartIter is None) and (itStopIter is None) if itStartIter is None: buffer.insert(insertIter, "<i>") elif isOpen: buffer.insert(insertIter, "</i>") elif not isOpen: if insertIter.compare(itStopIter[1]) >= 0: buffer.insert(insertIter, "<i>") if (event.keyval in [Gdk.KEY_b, Gdk.KEY_B, 1986, 2018]) and event.state & Gdk.ModifierType.CONTROL_MASK: if buffer.get_has_selection(): iter1 = buffer.get_selection_bounds()[0] buffer.insert(iter1, "<b>") iter2 = buffer.get_selection_bounds()[1] buffer.insert(iter2, "</b>") buffer.select_range(iter2,iter2) else: insertIter = buffer.get_iter_at_mark(buffer.get_insert()) itStartIter = insertIter.backward_search("<b>", 0, None) if not(itStartIter is None): itStopIter = itStartIter[1].forward_search("</b>", 0, None) else: itStopIter = None isOpen = not(itStartIter is None) and (itStopIter is None) if itStartIter is None: buffer.insert(insertIter, "<b>") elif isOpen: buffer.insert(insertIter, "</b>") elif not isOpen: if insertIter.compare(itStopIter[1]) >= 0: buffer.insert(insertIter, "<b>") if event.keyval == Gdk.KEY_Return and event.state & Gdk.ModifierType.CONTROL_MASK: self.response(Gtk.ResponseType.OK) return True if event.keyval in [Gdk.KEY_Left, Gdk.KEY_period] and event.state & Gdk.ModifierType.CONTROL_MASK and self.info_type == 'info': self.info_resp_button = 'prev' self.response(Gtk.ResponseType.OK) if event.keyval in [Gdk.KEY_Right, Gdk.KEY_comma] and event.state & Gdk.ModifierType.CONTROL_MASK and self.info_type == 'info': self.info_resp_button = 'next' self.response(Gtk.ResponseType.OK) if event.keyval in [Gdk.KEY_Z, Gdk.KEY_z, 2022, 1990] and event.state & Gdk.ModifierType.CONTROL_MASK: with GObject.signal_handler_block(self.text_view.get_buffer(), self.changed_handler): if event.state & Gdk.ModifierType.SHIFT_MASK: self.history.redo() else: self.history.undo() if (event.keyval in [Gdk.KEY_Y, Gdk.KEY_y, 2037, 2005]) and event.state & Gdk.ModifierType.CONTROL_MASK: with GObject.signal_handler_block(self.text_view.get_buffer(), self.changed_handler): self.history.redo()
def set_active(active): GObject.signal_handler_block(self.visible_check, handler) self.visible_check.set_active(active) GObject.signal_handler_unblock(self.visible_check, handler)
def gobject_signal_blocked(gobject, signal_name): signal_id = GObject.signal_lookup(signal_name, gobject.__class__) handler_id = GObject.signal_handler_find(gobject, GObject.SignalMatchType.ID, signal_id, 0, None, 0, 0) GObject.signal_handler_block(gobject, handler_id) yield GObject.signal_handler_unblock(gobject, handler_id)
def change_color(self, rgb): """Refresh preview and set values of all fields. :param rgb: rgb color values :type rgb: tuple """ rgba = Gdk.RGBA() rgba.parse("rgb({},{},{})".format(*rgb)) self.square.override_background_color(Gtk.StateType.NORMAL, rgba) GObject.signal_handler_block(self.spinbutton_r, self.red_sb_id) self.spinbutton_r.set_value(rgb[0]) GObject.signal_handler_unblock(self.spinbutton_r, self.red_sb_id) GObject.signal_handler_block(self.slider_r, self.red_s_id) self.slider_r.set_value(rgb[0]) GObject.signal_handler_unblock(self.slider_r, self.red_s_id) GObject.signal_handler_block(self.spinbutton_g, self.green_sb_id) self.spinbutton_g.set_value(rgb[1]) GObject.signal_handler_unblock(self.spinbutton_g, self.green_sb_id) GObject.signal_handler_block(self.slider_g, self.green_s_id) self.slider_g.set_value(rgb[1]) GObject.signal_handler_unblock(self.slider_g, self.green_s_id) GObject.signal_handler_block(self.spinbutton_b, self.blue_sb_id) self.spinbutton_b.set_value(rgb[2]) GObject.signal_handler_unblock(self.spinbutton_b, self.blue_sb_id) GObject.signal_handler_block(self.slider_b, self.blue_s_id) self.slider_b.set_value(rgb[2]) GObject.signal_handler_unblock(self.slider_b, self.blue_s_id) GObject.signal_handler_block(self.output, self.output_id) self.output.set_text(rgb_to_hex(rgb)) GObject.signal_handler_unblock(self.output, self.output_id) self.rgb_color = rgb self.change_output()
def __init__(self, player, library): Gtk.Box.__init__(self) self.elapsed_label = TimeLabel() self.elapsed_label.set_name('elapsed-label') self.remaining_label = TimeLabel() self.remaining_label.set_name('remaining-label') self.remaining_label.set_width_chars(6) self.scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL) self.scale.set_name('seek-bar') self.scale.set_adjustment(Gtk.Adjustment.new(0, 0, 0, 30, 5, 0)) self.scale.set_digits(3) self.scale.set_show_fill_level(False) self.scale.set_draw_value(False) self._timer_modes = ['both', 'elapsed', 'remaining'] self.c_timer_mode = __name__ + '_timer_mode' self.__timer_mode = 'both' self.__pressed_lmb = False self.__source_id = None self.elapsed_button = Gtk.Button() self.box = Gtk.Box(spacing=3) self.elapsed_button.add(self.box) self.elapsed_button.set_relief(Gtk.ReliefStyle.NONE) self.pack_start(self.scale, True, True, 0) try: self.__timer_mode = config.get('plugins', self.c_timer_mode) except NoOptionError: config.set('plugins', self.c_timer_mode, 'both') else: if self.__timer_mode not in self._timer_modes: self.__timer_mode = 'both' self._set_timer_mode(self.__timer_mode) self.elapsed_label.show() self.remaining_label.show() self.box.show() self.elapsed_button.show() self.scale.show() self.elapsed_button.connect('clicked', self._on_timer_clicked) self.scale.connect('button-release-event', self._on_button_release, player) self.__id_button_press_event = self.scale.connect( 'button-press-event', self._on_button_press, player) self.__id_change_value = self.scale.connect( 'change-value', self._on_scale_value_change_request, player) self.__id_value_changed = self.scale.connect( 'value-changed', self._on_scale_value_changed, player) GObject.signal_handler_block(self.scale, self.__id_value_changed) self._tracker = SynchronizedTimeTracker(player) self._tracker.connect('tick', self._on_tick, player) connect_destroy(player, 'seek', self._on_seek) connect_destroy(player, 'song-started', self._on_song_start) connect_destroy(player, "notify::seekable", self._update) self.connect("destroy", self._on_destroy) self._update(player)
def _inhibit(self): with GObject.signal_handler_block(self._scale, self._id): yield
def block_notebook_on_button_press_id(self): GObject.signal_handler_block( self.get_notebook(), self.get_notebook().notebook_on_button_press_id )