Example #1
0
    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)
Example #2
0
    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] )
Example #4
0
 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))
Example #5
0
 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))
Example #6
0
    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__ = {}
Example #8
0
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()
Example #9
0
    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)
Example #10
0
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)
Example #12
0
 def testListObject(self):
     self.assertEqual(gobject.signal_list_names(C), ('my-signal',))
Example #13
0
 def checkSignal(fact):
     fact = fact.load()
     signals = gobject.signal_list_names(fact.get_element_type())
     return 'block' in signals
Example #14
0
 def __init__(self):
     GObject.__init__(self)
     self._all_signals = signal_list_names(self.__gtype_name__)
     self._enabled_signals = list(self._all_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] )
Example #16
0

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)
Example #17
0
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
Example #18
0
 def testListObject(self):
     self.assertEqual(gobject.signal_list_names(C), ('my-signal', ))
Example #19
0
 def checkSignal(fact):
     fact = fact.load()
     signals = gobject.signal_list_names(fact.get_element_type())
     return 'block' in signals
Example #20
-1
    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)