Skip to content


Subversion checkout URL

You can clone with
Download ZIP


disable calltips in PySide < 1.0.7 to prevent segfault #963

merged 2 commits into from

3 participants


PySide bug caused segfault when QApplication.topLevelAt(pos) should return None, has been fixed in PySide 1.0.7.

We only call this method in the calltip widget (by far the biggest cause of crashes in the qtconsole), but if we want to call it anywhere else, we should probably just bump the PySide version dependency to 1.0.7 in external.qt.

@minrk minrk disable calltips in PySide < 1.0.7 to prevent segfault
PySide bug caused segfault when QApplication.topLevelAt(pos) should return None,
has been fixed in 1.0.7.
@minrk minrk referenced this pull request

segfault on mac os x #711


Looks fine at a glance.


An argument against this one is that it disables calltips perhaps too conservatively. It appears to only be macs affected (not the PySide bug itself, but the code path to the call seems executed only on mac), and it is a very specific call that throws the error, so we could circumvent the call much more narrowly.

I'm fine leaving it like this, though, as PySide is in relatively rapid release cycle right now, as it irons out various bugs, and we should probably bump minimum supported version to at least 1.0.7 before too long.


Just bump min PySide version to 1.0.8 or you will end up with too much if's with PySide versions in your code. =)


When it works fine other than a single minor feature, and apparently on a single platform, I think bumping the minimum to a two-week-old release is excessive. But I agree that we should not let this sort of thing proliferate. At the first sign of a more serious bug, or other similar bug, we should bump it, and depending on timing wrt EPD, etc., it may make sense to push the base when we do actually release 0.12.


@minrk, 1.0.8 contains a fix for PySide bug #1019 that affected spyderlib. The assumption that it is only a single minor feature that does not work is true as long as nobody reported some more. Users are more inclined to search for workarounds than to report bugs, and even if they report thing, I won't be too happy to spend time to troubleshoot some issue with ancient PySide version.


I'm not lobbying that we should compartmentalize every area for it's particular minimum PySide version, but we don't want to draw the line unnecessarily. Approximately all reported crashes of the QtConsole are caused by this bug, which only ever affected OSX (to our knowledge). We will happily bump the version to 1.0.8 (or whatever it is at the time), when the next EPD ships, but preventing the qtconsole from running in environments where it is known to work quite well doesn't make a lot of sense.

@minrk minrk merged commit 23b354b into ipython:master
@ellisonbg ellisonbg referenced this pull request from a commit
Commit has since been removed from the repository and is no longer available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Nov 1, 2011
  1. @minrk

    disable calltips in PySide < 1.0.7 to prevent segfault

    minrk authored
    PySide bug caused segfault when QApplication.topLevelAt(pos) should return None,
    has been fixed in 1.0.7.
Commits on Nov 9, 2011
  1. @minrk
This page is out of date. Refresh to see the latest.
Showing with 8 additions and 0 deletions.
  1. +8 −0 IPython/frontend/qt/console/
8 IPython/frontend/qt/console/
@@ -7,6 +7,7 @@
# System library imports
from pygments.lexers import PythonLexer
+from IPython.external import qt
from IPython.external.qt import QtCore, QtGui
# Local imports
@@ -118,6 +119,13 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):
def __init__(self, *args, **kw):
super(FrontendWidget, self).__init__(*args, **kw)
+ # FIXME: remove this when PySide min version is updated past 1.0.7
+ # forcefully disable calltips if PySide is < 1.0.7, because they crash
+ if qt.QT_API == qt.QT_API_PYSIDE:
+ import PySide
+ if PySide.__version_info__ < (1,0,7):
+ self.log.warn("PySide %s < 1.0.7 detected, disabling calltips" % PySide.__version__)
+ self.enable_calltips = False
# FrontendWidget protected variables.
self._bracket_matcher = BracketMatcher(self._control)
Something went wrong with that request. Please try again.