def _add_tooltip_support(self): # Add the "tool tips" popup_win = gtk.Window(gtk.WINDOW_POPUP) label = gtk.Label() popup_win.add(label) # pylint: disable=E1101 if "path-cross-event" not in gobject.signal_list_names(gtk.TreeView): gobject.signal_new("path-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event, )) gobject.signal_new("column-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event, )) gobject.signal_new("cell-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event, )) # pylint: enable=E1101 self.connect("leave-notify-event", self.on_treeview_leave_notify, popup_win) self.connect("motion-notify-event", self.on_treeview_motion_notify) self.connect("path-cross-event", self.emit_cell_cross_signal) self.connect("column-cross-event", self.emit_cell_cross_signal) self.connect("cell-cross-event", self.handle_popup, popup_win) # Handle double click on a row self.connect("row-activated", self.handle_double_click)
def on_create_window(self): self.textview.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) if self._config.enable_html_shownotes: try: import webkit webview_signals = gobject.signal_list_names(webkit.WebView) if 'navigation-policy-decision-requested' in webview_signals: setattr(self, 'have_webkit', True) setattr(self, 'htmlview', webkit.WebView()) else: log('Your WebKit is too old (see bug 1001).', sender=self) setattr(self, 'have_webkit', False) def navigation_policy_decision(wv, fr, req, action, decision): REASON_LINK_CLICKED, REASON_OTHER = 0, 5 if action.get_reason() == REASON_LINK_CLICKED: util.open_website(req.get_uri()) decision.ignore() elif action.get_reason() == REASON_OTHER: decision.use() else: decision.ignore() self.htmlview.connect('navigation-policy-decision-requested', \ navigation_policy_decision) self.scrolled_window.remove(self.scrolled_window.get_child()) self.scrolled_window.add(self.htmlview) self.textview = None self.htmlview.load_html_string('', '') self.htmlview.show() except ImportError: setattr(self, 'have_webkit', False) else: setattr(self, 'have_webkit', False)
def fill_signals(self, full_class_name, class_name, class_type): self.app.storeSignals.clear() try: sigs = gobject.signal_list_names( class_type ) except: sigs = [] for sig in sigs: details = gobject.signal_query( sig, class_type ) sig_id = details[0] sig_ret = self.gtype_to_py( details[4].name ) sig_params = details[5] if len(sig_params) > 0: sparams = [] for sig_param in sig_params: sparams.append( self.gtype_to_py( sig_param.name ) ) s_sig_params = ", ".join( sparams ) else: s_sig_params = "<None>" img = self.get_type_image( 'signal_default' ) if "-event" in sig: img = self.get_type_image( 'signal_event' ) self.app.storeSignals.append( [img, sig, sig_id, sig_ret, s_sig_params] )
def register_signals(self, widget): """Register gobject signals in a way that avoids multiple inheritance""" existing = gobject.signal_list_names(widget) for signal in self.signals: if signal["name"] in existing: dbg("Container:: skipping signal %s for %s, already exists" % (signal["name"], widget)) else: dbg("Container:: registering signal for %s on %s" % (signal["name"], widget)) try: gobject.signal_new( signal["name"], widget, signal["flags"], signal["return_type"], signal["param_types"] ) except RuntimeError: err("Container:: registering signal for %s on %s failed" % (signal["name"], widget))
def register_signals(self, widget): """Register gobject signals in a way that avoids multiple inheritance""" existing = gobject.signal_list_names(widget) for signal in self.signals: if signal['name'] in existing: dbg('Container:: skipping signal %s for %s, already exists' % (signal['name'], widget)) else: dbg('Container:: registering signal for %s on %s' % (signal['name'], widget)) try: gobject.signal_new(signal['name'], widget, signal['flags'], signal['return_type'], signal['param_types']) except RuntimeError: err('Container:: registering signal for %s on %s failed' % (signal['name'], widget))
def __init__(self, name, bases, namespace): def _update_bases(bases, props, signals): for base in bases: props.update(getattr(base, '__gproperties__', {})) signals.update(getattr(base, '__gsignals__', {})) _update_bases(base.__bases__, props, signals) for base in bases: if issubclass(base, gobject.GObject): # This will be fun. # Merge in properties and signals from all bases, this # is not the default behavior of PyGTK, but we need it props = namespace.setdefault('__gproperties__', {}) signals = namespace.setdefault('__gsignals__', {}) _update_bases(bases, props, signals) break # Workaround brokenness in PyGObject meta/type registration props = namespace.get('__gproperties__', {}) signals = namespace.get('__gsignals__', {}) if hasattr(self, '__gtype__'): self.__gproperties__ = props self.__gsignals__ = signals gtype = self.__gtype__ # Delete signals and properties which are already # present in the list signal_names = gobject.signal_list_names(gtype) for signal in signals.copy(): if signal in signal_names : del signals[signal] prop_names = [prop.name for prop in gobject.list_properties(gtype)] for prop in props.copy(): if prop in prop_names: del props[prop] if HAVE_2_6 and issubclass(self, gobject.GObject): gobject.type_register(self) _GObjectClassInittableMetaType.__init__(self, name, bases, namespace) # The metaclass forgets to remove properties and signals self.__gproperties__ = {} self.__gsignals__ = {}
def __init__(self, name, bases, namespace): def _update_bases(bases, props, signals): for base in bases: props.update(getattr(base, '__gproperties__', {})) signals.update(getattr(base, '__gsignals__', {})) _update_bases(base.__bases__, props, signals) for base in bases: if issubclass(base, gobject.GObject): # This will be fun. # Merge in properties and signals from all bases, this # is not the default behavior of PyGTK, but we need it props = namespace.setdefault('__gproperties__', {}) signals = namespace.setdefault('__gsignals__', {}) _update_bases(bases, props, signals) break # Workaround brokenness in PyGObject meta/type registration props = namespace.get('__gproperties__', {}) signals = namespace.get('__gsignals__', {}) if hasattr(self, '__gtype__'): self.__gproperties__ = props self.__gsignals__ = signals gtype = self.__gtype__ # Delete signals and properties which are already # present in the list signal_names = gobject.signal_list_names(gtype) for signal in signals.copy(): if signal in signal_names: del signals[signal] prop_names = [prop.name for prop in gobject.list_properties(gtype)] for prop in props.copy(): if prop in prop_names: del props[prop] if HAVE_2_6 and issubclass(self, gobject.GObject): gobject.type_register(self) _GObjectClassInittableMetaType.__init__(self, name, bases, namespace) # The metaclass forgets to remove properties and signals self.__gproperties__ = {} self.__gsignals__ = {}
def gtkrun(dlgfunc, ui, *args, **opts): portable_fork(ui, opts) win = dlgfunc(ui, *args, **opts) if not win: return global mainwindow, gtkmainalive mainwindow = win if hasattr(win, 'display'): win.display() win.show_all() if 'response' in gobject.signal_list_names(win): win.connect('response', gtk.main_quit) win.connect('destroy', gtk.main_quit) gtk.gdk.threads_init() gtk.gdk.threads_enter() gtkmainalive = True gtk.main() gtkmainalive = False gtk.gdk.threads_leave()
def on_create_window(self): if self._config.ui.gtk.episode_list.embed_shownotes: self.main_window.hide() self.textview.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) if self._config.enable_html_shownotes: try: import webkit webview_signals = gobject.signal_list_names(webkit.WebView) if 'navigation-policy-decision-requested' in webview_signals: setattr(self, 'have_webkit', True) setattr(self, 'htmlview', webkit.WebView()) else: logger.warn('Your WebKit is too old (gPodder bug 1001).') setattr(self, 'have_webkit', False) def navigation_policy_decision(wv, fr, req, action, decision): REASON_LINK_CLICKED, REASON_OTHER = 0, 5 if action.get_reason() == REASON_LINK_CLICKED: util.open_website(req.get_uri()) decision.ignore() elif action.get_reason() == REASON_OTHER: decision.use() else: decision.ignore() self.htmlview.connect('navigation-policy-decision-requested', \ navigation_policy_decision) self.scrolled_window.remove(self.scrolled_window.get_child()) self.scrolled_window.add(self.htmlview) self.textview = None self.htmlview.load_html_string('', '') self.htmlview.show() except ImportError: setattr(self, 'have_webkit', False) else: setattr(self, 'have_webkit', False)
import pango import os import cgi import gpodder _ = gpodder.gettext import logging logger = logging.getLogger(__name__) from gpodder import util try: import webkit webview_signals = gobject.signal_list_names(webkit.WebView) if 'navigation-policy-decision-requested' in webview_signals: have_webkit = True else: logger.warn('Your WebKit is too old (gPodder bug 1001).') have_webkit = False except ImportError: have_webkit = False class gPodderShownotes: def __init__(self, scrolled_window): self.scrolled_window = scrolled_window self.scrolled_window.add(self.init()) self.scrolled_window.show_all()
def __init__(self): GObject.__init__(self) self._all_signals = signal_list_names(self.__gtype_name__) self._enabled_signals = list(self._all_signals)
def testListObject(self): self.assertEqual(gobject.signal_list_names(C), ('my-signal',))
def checkSignal(fact): fact = fact.load() signals = gobject.signal_list_names(fact.get_element_type()) return 'block' in signals
def read_signals(self, obj): self.ide.storeSignals.clear() sobj = get_object_name( obj ) try: sigs = gobject.signal_list_names( type(obj) ) # gets signals from all implemented interfaces too. # for example, gtk.Entry implements gtk.Editable, which has # the "changed" signal, but that is not listed on # gtk.Entry's signals. # interfaces = gobject.type_interfaces( type(obj) ) for interface in interfaces: sigs += gobject.signal_list_names( interface ) except: sigs = [] parents = self.get_parent_list( obj ) for parent in parents: try: sigs += gobject.signal_list_names( parent ) except: pass for sig in sigs: details = gobject.signal_query( sig, type(obj) ) if details[4].name == 'void': sig_ret = "return" else: sig_ret = "return " + details[4].name sig_params = details[5] if len(sig_params) > 0: sparams = ["self", "widget"] for sig_param in sig_params: sp = sig_param.name if sp[:3] == 'Gtk' or sp[:3] == 'Gdk': sp = sp[3:] sp = sp[0].lower() + sp[1:] sparams.append( sp ) s_sig_params = ", ".join( sparams ) else: s_sig_params = "self, widget" s_sig_params = "(" + s_sig_params + ")" img = get_image_by_name( 'signal_default' ) if details[2].pytype != type(obj): img = get_image_by_name( 'signal_parent' ) if "-event" in sig: img = get_image_by_name( 'signal_event' ) sig_implemented, sig_line = self.ide.analyser.check_obj_signal( \ sobj, sig ) sig_markup = sig if sig_implemented: sig_markup = "<b>" + sig + "</b> <span foreground='gray'><i>" + \ "(source line %d)</i></span>" % sig_line self.ide.storeSignals.append( [img, sig, s_sig_params, sig_ret, \ sig_line, sig_markup] )
import gpodder _ = gpodder.gettext import logging logger = logging.getLogger(__name__) from gpodder import util from gpodder.gtkui.draw import draw_text_box_centered try: import webkit webview_signals = gobject.signal_list_names(webkit.WebView) if 'navigation-policy-decision-requested' in webview_signals: have_webkit = True else: logger.warn('Your WebKit is too old (gPodder bug 1001).') have_webkit = False except ImportError: have_webkit = False class gPodderShownotes: def __init__(self, shownotes_pane): self.shownotes_pane = shownotes_pane self.scrolled_window = gtk.ScrolledWindow() self.scrolled_window.set_shadow_type(gtk.SHADOW_IN)
def _map_signals(obj, prefix="plugin_on_", blacklist=tuple()): sigs = list(gobject.signal_list_names(obj)) map(sigs.remove, blacklist) sigs = [(s.replace('-', '_'), prefix + s.replace('-', '_')) for s in sigs] return sigs
def testListObject(self): self.assertEqual(gobject.signal_list_names(C), ('my-signal', ))
def _add_tooltip_support(self): # Add the "tool tips" popup_win = gtk.Window(gtk.WINDOW_POPUP) label = gtk.Label() popup_win.add(label) if "path-cross-event" not in gobject.signal_list_names(gtk.TreeView): gobject.signal_new("path-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event,)) gobject.signal_new("column-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event,)) gobject.signal_new("cell-cross-event", gtk.TreeView, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gtk.gdk.Event,)) self.connect( "leave-notify-event", self.on_treeview_leave_notify, popup_win) self.connect("motion-notify-event", self.on_treeview_motion_notify) self.connect("path-cross-event", self.emit_cell_cross_signal) self.connect("column-cross-event", self.emit_cell_cross_signal) self.connect("cell-cross-event", self.handle_popup, popup_win) # Handle double click on a row self.connect("row-activated", self.handle_double_click)